Join James Williamson for an in-depth discussion in this video The universal selector, part of CSS: Core Concepts.
- View Offline
The universal selector is one that is often overlooked as people learn CSS. It's one of the most basic and most powerful selectors available to you, yet few people use it. Now there is of course a reason for that, so let's examine what the universal selector is and why people tend to avoid it. So I have the universal.htm file open in the 02_07 folder. And the easiest thing to do with the universal selector to experiment with it is just to try it. So it's called the universal selector because it affects every element on the page.
And I am just going to go right here to line number 11, right below the add styling here, and I am just going to write a rule that uses the universal selector. The universal selector is basically the asterisk. It's kind of the wildcard character, if you will, and that means everything, every element on the page. So if I go ahead and open up my curly braces, I am just going to set a color here. So I am just going to say color, and I will just use blue. So if I save this and preview this in one of my browsers, I can see that every single thing on the page is now blue, so boom, one shot, you get everything.
Now a lot of people sort of confuse this with inheritance, and let me show you the big difference for this. We will talk about inheritance a little bit more later on, but inheritance basically says that if you apply a property to a parent tag, if it's a property that the child can inherit, it will. Let me show you what I mean. So if I go over here and I change universal selector to body--remember body is our main parent element here for everything-- if I save this and preview that in the browser, I see no styling change.
So they act exactly the same, or do they? Let's find out. I am going to go back into my code, and I notice that in the content here I have several sections of content. So if I wanted each of these sections to look a little bit different, one of the things I could do is come up and say, okay, in this section, or in any section, I want the color to be red. It's a very simple element selector there. Now if I save this, I can preview this in my browser. I can see that now my section is overwriting body because it's a child style that's overriding the parent style.
That's kind of how inheritance works. Parent styles inherent, then child styles are allowed to overwrite them. However, I want to show you a really big difference between inheritance and the universal selector. So I am back in my code and I am going to change the body selector back to that universal selector. Now if I save n this and test it, wow! All of a sudden, that section content where the color is told to be red is being overwritten. Okay, so what is happening there? Well, essentially the universal selector applies to every single element on the page, so all paragraphs, headings, unordered lists, sections aside, articles. Then I am going to go back into the code here.
So because each of those sections has child elements inside of it--a paragraph here or a paragraph here--the universal selector is going through each one of these and saying you are blue, you are blue, you are blue. So even though this section says, no, I'd like to be red, the universal selector is countering that out. Now it can be put to good effect, so, for example, I could come in here and get rid of the color, and I could say margin: 0 padding: 0. Now you may have remembered earlier on and we talked bout how browsers have their own default margins and padding and things like that for elements on the page.
A lot of times you want to try to get rid of those so that then you can go ahead and add your own margins and padding for elements and not worry about the browser's default. So if I save this and test it, you can see that it does just that. We now no longer have any spacing between the elements on the page. They are all just budded up right against each other, and we can now go in and rewrite that on our own margins and paddings and that sort of thing. There is a downside of this, however. I've seen the universal selector used like this for what we call a CSS reset, so this is essentially just a very simple CSS reset.
Remember from earlier, CSS resets just sort of strip out all that default margins and padding. But the problem with the universal selector is again, remember, it applies to every single element. That can include form elements, like buttons, and input, text fields, and checkboxes, and radio buttons. And in some browsers, stripping out those sorts of default margins and paddings without adding them back can cause some really, really bad styling issues. And if you don't know that those elements sort of need that default margins and paddings, a lot times you sort of forget to put it back in there.
So the universal selector is sort of a scorched earth selector, so you should really use caution when using it. And I am going to be honest with you. I've never used the universal selector in any of my styles ever. I just have never really needed it. A little later on we are going to learn about what we call descendent selectors, which involves combining selectors together for more precise targeting. And in those cases, I've seen a few people use the universal selector to target a really complex range of selectors, to say, like, go inside of a div and everything inside that that's also part of the section, do this.
So you can sort of combine it with other selectors to do that, but to be honest with you, I've never had a situation arise that I couldn't style that another way. Really, it's just another selector, and whether you use it or not is entirely up to you. You just want to be sure that you understand the effect it's going to have on every single element within your site before you decide to use it.
- Exploring default styling
- Writing a selector
- Setting properties
- Working with common units of measurement, including ems and pixels
- Structuring HTML correctly
- Understanding the cascade and inheritance
- Setting a font family, font size, text color, and more
- Understanding the box model
- Styling container elements
- Working with RGB vs. HSL values
- Styling drop shadows