Now that we know a little bit more about CSS syntax, I want to take a moment to
focus on selectors in a bit more detail.
Remember, selectors allow us to tell the browser which elements on the page we want to style.
In some cases, you are going to want to apply styles broadly to a number of
elements all across your site.
In other situations, you are going to want to target a smaller number of
elements, or even a single element.
Understanding how selectors work will allow you to do just that.
The first selector I want to start with is the most basic, the element selector.
Element selectors are global in nature, meaning they are going to affect every
element of that type in a style document.
You simply need to know what the tag is for a given element in order to style it.
Now unlike HTML, we don't need the angle brackets around the tag name, just the tag itself.
For example, to style paragraphs, you'd use the p; for heading 1s, you'd use an
h1; for unordered lists you'd use an ul, and so on.
While these selectors are very efficient, they're also very broad, which is why
they are most often used to set global site-wide styles.
Another basic selector type is the class selector.
Classes are HTML attributes that can be set on any HTML element.
You can name a class anything you want, and you can use it on as many elements,
and as many times on the page as you need.
As you can imagine, that makes classes pretty popular when it comes to writing CSS.
Now here, for example, the browser would look through all the elements on the
page and apply styling to any elements with a class attribute of subheading.
Note that classes are identified in CSS by the period in front of their name.
Now ID selectors are similar to class selectors in that they represent an HTML attribute.
They differ from classes in one very important aspect.
IDs must be unique to the page, meaning that if you assign an ID to a page
element, no other element on that page may have that specific ID.
In this example, the browser would find the element on the page that has the ID
attribute of sidebar and then apply the styling.
Now, IDs identified by the octothorpe, or as it is more commonly known, the pound
symbol, in front of the ID name.
You can also make class and ID selectors element-specific by adding an element
to the front of the selector.
This limits the styling to only elements with the specific class or specific ID applied to it.
For example, here styling would only be applied to heading 2s with a class of
subheading, or divs with an ID of sidebar.
This allows you to write a single general class, or ID style, and then follow
that with a more focused element-specific style if necessary.
Classes and IDs can be anything you want them to be, but you do need a follow
some naming conventions.
First, don't use any spaces or special characters.
Also, remember that they are case sensitive.
If you use uppercase letters, you are going to need to remember that when
writing the styles for them.
Honestly, it doesn't really matter what you practice, as long as you're consistent.
Another type of selector I want to discuss is the descendent selector.
Descendent selectors allow you to target an element based on where it's found
within another element.
You simply string the selectors together, separating them with whitespace.
The parent selectors are added first, followed by each successive nested selector.
For example, in this example the browser would find any span elements inside of
paragraph elements which were also inside of div elements.
Now there isn't any limit as to how many of those that you can string together,
but more than three starts to become extremely inefficient.
Let's take a look at a couple of examples.
Now in this first example, the browser would locate any paragraph found within a
div tag and then apply the styling.
In the second one, it would find any span element inside of a paragraph which is
also inside of a div, and then apply the styling.
As you can see, descendent selectors allow you to be extremely specific.
Another thing I want to point out here is that the descendent selectors apply to
any nested element, no matter how deep it's found within the page structure.
Going back to that first example, it's going to apply to paragraphs inside the
div, not just ones that are immediately inside the div.
You can also group selectors together by using commas between the
selectors themselves.
Now this can make writing styles more efficient by grouping selectors together
that need the same styling.
Instead of writing three separate selectors like this, for example, you can
simply write one group selector, and that's a lot more efficient.
Although there are certainly more selector types available than the ones that
I've shown here, the overwhelming bulk of your styles will probably be written
through the basic selector types that we've covered.
Learning how to write efficient selectors based on your document structure is
among the most important CSS skills that you can cultivate.
By mastering the different types of selectors available, you'll find that you
have a much broader set of options for writing effective styles.