CSS Selectors

Table of Contents

CSS selectors are the part of CSS rules that determine what HTML elements that are affected by the CSS rule. Here is an example CSS rule:

div {
    border: 1px solid black;
}

  

The CSS selector part of the above CSS rule is this:

div

This selector means that all div elements should be targeted by the CSS rule.

There are several different types of CSS selectors. Both CSS 1.0, CSS 2.1 and CSS 3.0 added selectors to the CSS standard. The rest of this text will go through these CSS selectors.

Universal Selector

The universal CSS selector is used to select all elements. It is marked with a *. Here is a universal CSS selector example:

* {
    font-size: 18px;
}

  

This example selects all HTML elements and set their font-size CSS property.

The universal CSS selector is not so often used alone. It is more often used with a child selector or descendant selector.

Element Selector

The element selector is the most basic CSS selector. It selects all the HTML elements of the same type. For instance, all div elements or p elements.

With the element CSS selector you simply write the element name of the elements to apply the CSS rule to. Here are three examples:

div {
    border: 1px solid black;
}
p {
    font-size: 18px;
}
input {
    border: 1px solid #cccccc;
}

  

These three CSS rules each have a selector that selects all of a certain type of HTML elements. The first CSS selector selects all div elements. The second CSS selector selects all p elements. The third CSS selector selector selects all input elements.

You can select any HTML element using the element selector. All elements of that type / name will be affected by the CSS rule having the element selector.

Class Selector

The class selector is another very commonly used CSS selector. The class selector selects all HTML elements which have the given CSS class set on them. You set a CSS class on an HTML element by giving the HTML element a class attribute. Here is an example:

<div class="green"> Text... </div>

<p class="green"> Paragraph... </p>

  

As you can see, you can give different types of HTML elements the same CSS class. That is fully valid (in case you need that).

You target these HTML elements by creating a CSS rule with the same name as the CSS class to select, and prefix with a dot (.). Here is a CSS rule example that selects the two HTML elements from the example above:

.green {
    border: 1px solid green;
}

  

The CSS rule example selects all HTML elements with the CSS class green set on them. Notice the . in the beginning CSS selector part (.green) of the CSS rule. This signals to the browser that this is a CSS class selector, and that the name after the . is the name of the CSS class to select.

You can use any name as a CSS class. There are no built-in CSS class names. Use CSS class names that start with letters - not numbers or other special characters. CSS class names are case sensitive, so GREEN is not the same CSS class as green or Green.

ID Selector

The ID selector selects the HTML element which has the given ID. The ID of an HTML element is set via the idattribute. Here is an example:

<div id="myElement"> My Element </div>

You can select this HTML element using an ID selector, by prefixing the CSS selector with a # and then write the ID of the HTML element. Here is an example that selects the above HTML element by its ID:

#myElement {
    border: 1px solid blue;
}

  

This example uses the # to signal that the selector is an ID selector, and then the ID myElement right after the# to mark what ID to select.

Attribute Selector

The CSS attribute selector is used to select HTML elements by their attributes. Look at this HTML:

<a href="http://tutorials.jenkov.com"> Java and Web Development Tutorials</a>

<a name="jump-here"></a>

  

Notice how the two a elements have different attributes. The first a element has a href attribute, and the second a element has a name attribute.

You can select these two a elements individually using an attribute selector. Here is a CSS attribute selector example:

[href] {
    font-size: 18px;
}

  

This example CSS rule selects all HTML elements that have an href attribute. That means the first a element in the HTML shown earlier will be targeted by the CSS rule, but the second a element will not.

It is the [attrName] that makes up the attribute selector. Inside the square brackets ([ ]) you write the name of the attribute to target.

You can also select HTML elements based on their attribute values. I will show you a few ways to do that in the following sections.

Attribute Equals

You can select an HTML element based on its attribute value like this:

[href="http://jenkov.com"]

  

You add a = after the attribute name, and then you write the desired attribute value. In this case I want to select all HTML elements that have an href attribute with the value http://jenkov.com.

Attribute Begins With

You can select HTML element based on what an attribute value starts with. Instead of using the = sign between attribute name and attribute value, you write ^=. Here is an example:

<a href="http://jenkov.com"></a>

<style>
    [href^="http://"] {
        font-size: 18px;
    }
</style>

  

This example will select all HTML elements that has an href attribute which value starts with http://.

Attribute Begins With Language Code

The CSS attribute begins with language code selector is used select HTML elements with a given language code. Look at this HTML:

<p lang="en"   > English text</p>
<p lang="en-UK"> UK English text</p>
<p lang="en-US"> US English text</p>

  

You can then use the CSS attribute begins with language code selector to select all HTML elements with a language code that starts with en-, like this:

[lang|="en"] {
    font-size: 18px;
}

  

Notice the |= part of the selector in the above CSS rule. That part signals that the attribute value should either be en or start with en- in the language code.

Attribute Ends With

You can also select HTML elements based on what an attribute value ends with. Instead of writing ^= you write$= between the attribute name and attribute value. Here is another example:

<a href="http://jenkov.com"></a>

<style>
    [href$=".png"] {
        font-size: 18px;
    }
</style>

  

This example CSS rule selects all HTML elements which have an href attribute which value ends in .png.

Attribute Contains

The CSS attribute contains selector is used to select all HTML elements with a given attribute which contains the specified substring. Here is a CSS attribute contains selector example:

[href*="jenkov.com"] {
    font-size: 18px;
}

  

This example CSS rule selects all HTML elements with an href attribute which contains the substringjenkov.com somewhere in its attribute value. Thus, it will select the two first of the below a elements, but not the third:

<a href="http://jenkov.com">Jenkov.com</a>
<a href="http://tutorials.jenkov.com">Tutorials</a>
<a href="http://google.com">Google</a>

  

Attribute Contains Word

The CSS attribute contains word selector can select HTML elements with attribute which value contains a given word. The difference between this selector and the attribute contains selector is, that for this selector the targeted substring must be surrounded by spaces in the attribute value. Put differently, it must appear as a word inside the attribute value, not just an arbitrary substring.

Look at these two HTML elements:

<div myattr="iamaprogrammer"></div>    

<div myattr="i am a programmer"></div>

  

Both of these div elements contains the substring programmer inside their myattr attribute values, but only the second div element contains it as a whitespace separated word. Thus, the selector in this CSS rule:

[myattr~="programmer"] {

}

  

... will only select the second of the div elements shown above.

Group Selector

The CSS group selector is used to group together multiple selectors into one, big CSS selector. That means, that all elements targeted by any of the selectors will be affected by the CSS rule. Here is a CSS group selector example:

div, p {
    font-size : 18px;
}

  

This example CSS rule sets the font size of both div and p elements.

Notice how the example has two selectors separated by a comma (div and p). The comma makes this a group selector, meaning the CSS rule is applied to all elements matching one (or more) of the selectors that are grouped together.

Child Selector

The child CSS selector is used to select all elements that are immediate children of some other element. Here is a child CSS selector example:

li>a {
    font-size: 18px;
}

  

This example selects all a elements which are children of li elements. Thus, only the second a element would be selected in this HTML:

<a href="...">This will not be selected</a>

<ul>
    <li><a href="...">This WILL be selected</a></li>
</ul>

  

The first a element is not a child of a li element. Thus it is not selected by the child selector. The second aelement on the other hand, is a child of a li element, so the CSS rule is applied to that element.

It is the > character which marks a selector as a child selector. Notice the > character between the li and a in the selector in the example above.

You can use more than one level of child selectors. Here is an example:

ol>li>a {
    font-size: 18px;
}

  

This example only selects the a elements which are children of li which are again children of ol elements. Thus, the CSS rule is not applied to a elements nested inside a ul (unordered list).

Descendant Selector

The descendant CSS selector is used to select elements that are descendants of other elements. The selected elements do not have to be immediate children of the specified ancestor. They just have to be nested inside the ancestor somewhere. That is how descendant selectors are different from child selectors. Look at this HTML:

  1. Link 1

You can select all a elements nested inside the ol element using this CSS rule:

ol a {
    font-size : 18px;
}

  

The descendant selector is marked via the space character. Notice the space between the ol and the a in the selector in the above CSS rule. This space specifies that this selector is a descendant selector, and that it selects all a elements that are descendants of (nested inside) ol elements. It does not care how far down in the element hierarchy the a is nested, as long as it has a ol as an ancestor somewhere higher up in the hierarchy.

Adjacent Sibling Selector

The adjacent sibling CSS selector is used to select HTML elements that are adjacent siblings of some other HTML element. Look at this HTML:

<body>
    <h1>Headline</h1>

    <p>

    </p>

    <p>

    </p>

    <table>

    </table>

    <table>

    </table>
</body>

  

All of the HTML elements in this example are siblings, meaning the have the same parent HTML element (thebody element). But they are not all adjacent siblings. By adjacent is meant that the elements are following each other immediately, with no other HTML elements in between.

You can select the first p element after the h1 using this adjacent sibling selector:

h1+p {

}

  

This selects all p elements which are have a h1 element preceding it as sibling. In the HTML above, that means the first p element after the h1 element, but not the following p elements, because they are preceded by a pelement, not a h1 element.

Similarly you could select all table elements adjacent to a p element using this adjacent sibling selector:

p+table {

}

  

General Sibling Selector

The CSS general sibling selector is used to select HTML elements which have the same parent. Unlike with the adjacent sibling selector, the general sibling selector selects all elements that are preceded by another element (inside the same parent), even if the two elements are not directly adjacent.

Look at this HTML example:

<body>
    <h1>Headline</h1>

    <p>

    </p>

    <p>

    </p>

</body>

  

A CSS rule using a general sibling selector can be used to select all p elements which are preceded by anotherp element somewhere (inside the same parent), like this:

p~p {

}

  

Notice the ~ character between the two p‘s in the selector part of the CSS rule. The ~ character is what marks this as a general sibling selector.

Pseudo Classes

CSS has defined a set of pseudo classes which you can use in your CSS selectors. A CSS pseudo class is actually a state of an HTML element. Thus, you can assign different CSS styles to HTML elements depending on the HTML element state. CSS 3.0 added quite a few new CSS pseudo classes to the standard. I will cover each of these CSS pseudo classes in the following sections.

a:link, a:visted, a:hover, a:active

The a element (which represents a link) can be in four different states, each of which has an associated pseudo class:

Pseudo Class Description
a:link Selects all links that have not yet been visited.
a:visited Selects all links that have already been visited.
a:hover Selects all links the mouse hovers over.
a:active Selects all links that have been clicked - until the new page is loaded.

The a:active pseudo class does not "live long". It is only applied in the short time between a user clicks a link (that thus becomes active), and until the browser loads the page the link points to.

Here are some a element pseudo class examples:

a:link    { color: #00ff00; }
a:visited { color: #009900; }
a:hover   { color: #66ff66; }
a:active  { color: #ffff00; }

  

These example set the colors of the link (a element) to different colors depending on the link state (pseudo class).

:first-child, :last-child

The :first-child CSS pseudo class selects all elements that are the first child of some parent HTML element. The :last-child CSS pseudo class selects all elements that are the last child of some parent HTML element. Here is an example:

<div>
    <p>First child</p>
    <p>Second child</p>
</div>

<style>
    p:first-child {
        background-color: #ff00ff;
    }
    p:last-child {
        background-color: #00ff00;
    }
</style>

  

This example‘s first CSS rule selects all p elements that are the first child of their parent elements. In this example that would be the p element with the body First Child. This HTML element has its background color set to #ff00ff.

The example‘s second CSS rule selects all p elements that are the last child of their parent elements. In this example that would be the p element with the body Second Child.

:nth-child()

The :nth:child() CSS pseudo class selects the nth elements of some parent. The n could be every element, every 2nd element, every 3rd element etc. Here is an example:

<div>
    <p>1st child</p>
    <p>2nd child</p>
    <p>3rd child</p>
    <p>4th child</p>
    <p>5th child</p>
    <p>6th child</p>
</div>

<style>
    p:nth-child(2n) {
        background-color: #ffff00;
    }
</style>

  

This example CSS rule selects every second p element inside their parent elements. This means the p elements with the bodies 2nd child4th child and 6th child.

It is the 2 in p:nth-child(2n) that specifies that it is every second p element that is to be selected. If you write p:nth-child(3n) instead, you would select every third p element of their parents.

:first-of-type, :last-of-type

The :first-of-type CSS pseudo class selects elements that are the first child of its type inside its parent element. The :last-of-type CSS pseudo class selects elements that are the last of its type inside its parent element. Here is an example:

<div>
    <h2>1st h2</h2>
    <p>1st p</p>

    <h2>2nd h2</h2>
    <p>2nd p</p>

    <h2>3rd h2</h2>
    <p>3rd p</p>
</div>

<style>
    p:first-of-type {
        background-color: #ffff00;
    }
    p:last-of-type {
        background-color: #00ff00;
    }
</style>

  

This example contains 2 CSS rules. The p:first-of-type will select the p elements that are the first pelements of their parents, regardless of what other elements the parent contains. In this example that is the pelement with the body 1st p. The p:last-of-type will select the p elements that are the last p elements of their parents. In this example that would be the p element with the body 3rd p.

:nth-of-type()

The nth-of-type() CSS pseudo class selects all the elements that are the nth of their type inside their parents. Inside the parentheses you specify if they are to be every element, every second, every third etc. element of its type in its parent. Here is an CSS nth-of-type() example:

<div>
    <h2>1st h2</h2>

    <p>1st p</p>
    <p>2nd p</p>

    <p>3rd p</p>
    <p>4th p</p>

    <p>5th p</p>
    <p>6th p</p>
</div>

<style>
    p:nth-of-type(2n) {
        background-color: #ffff00;
    }
</style>

  

The CSS rule in this example selects every second p element inside their parent elements. Thus, the p elements with the bodies 2nd p4th p and 6th p. You could change the 2n to 3n and get every third element of its kind inside its parent.

:nth-last-child()

The :nth-last-child() CSS pseudo class selects the nth last child of its parent. It works similarly to the:nth-child() pseudo class, except it counts the elements backwards from the last towards the first.

:nth-last-of-type()

The :nth-last-of-type() CSS pseudo class selects the nth last child of its kind inside its parent. It works similarly to the :nth-of-type() pseudo class except it counts the elements backwards, from the last element and towards the first element inside each parent.

:only-child

The :only-child CSS pseudo class selects all elements that are the only child of their parent.

:only-of-type

The :only-of-type CSS pseudo class selects all elements that are the only child of its kind inside their parent.

:empty

The :empty CSS pseudo class selects all HTML elements that are empty, meaning they have no text or child elements inside their body. Here is an example :empty pseudo class example:

div:empty {

}

This CSS rule selects all div elements that are empty.

:not()

The :not() CSS pseudo class selects all of those HTML elements that do not match the CSS selector given as parameter (inside the parentheses) to the :not() pseudo class. Here is an example:

p:not(:last-child) {
    border-bottom: 1px solid #cccccc;
}

  

This CSS rule selects all p elements which are not the last child of their parents.

:checked

The :checked CSS pseudo class selects all input fields that are checked, meaning all checkboxes. Here is a:checked example:

input[type="checkbox"]:checked {

}

  

This CSS rule selects all input fields which have a type attribute with the value checkbox, and which are checked.

:enabled, :disabled

The :enabled and :disabled CSS pseudo classes selects HTML elements that are either enabled or disabled. This will typically be input fields. Here is an example:

input:enabled {
    border: 1px solid #6666ff;
}

input:disabled {
    border: 1px solid #666666;
}

  

This examples sets a blue border color on all enabled input elements, and a gray border on all disabledinput fields.

Pseudo Elements

CSS pseudo elements are parts elements that can be styled, but which are not by themselves real HTML elements.

Pseudo elements are specified in the CSS selector using a double colon (::) and then the name of the pseudo element. That syntax is new from CSS 3.0. Here is a CSS 3.0 pseudo element example:

p::first-letter {
    font-size : 20px;
}

  

Before CSS 3.0 the standard was a single colon, like this:

p:first-letter {
    font-size : 20px;
}

  

For backwards compatibility, the single colon notation still works in most browsers, but you are encouraged to use the double colon notation.

There are several different pseudo elements you can use. The CSS pseudo elements are covered in the following sections.

::first-letter

The :first-letter CSS pseudo element can be used to select the first letter of HTML elements. For instance, to select the first letter of all p elements you would write:

p::first-letter {
    font-size: 20px;
}

  

This example sets the first letter inside all p elements to font size 20px.

::first-line

Like with :first-letter you can select the first line of an HTML element, and style that differently. The first line is not the first sentence. It is the first horizontal line of text, regardless of whether that constitutes a less than or more than a full sentence.

Here is a :first-line pseudo element example:

p::first-line {
    font-size: 19px;
}

  

This example sets the first line of all p elements to font size 19px.

::before, ::after

The :before and :after CSS pseudo elements matches a virtual first and last child of the selected HTML element. This is normally used to insert some extra content (text or HTML) before or after that virtual last child using the content CSS property. The content CSS property is used to generate content and insert into the DOM via CSS. Here is an example:

<div id="#theId">
    HTML Text
</div>

<style>
    #theId::after {
        content : " - Generated Content";
    }
</style>

  

This example inserts the content defined in the content CSS property after the last child (last content) of the element with the id theId (the div element.

If you had used the :before pseudo element instead, the generated content would have been inserted before the first content instead of after the last content.

::selection

The ::selection pseudo element refers to the selected content when the user selects e.g. a passage of text with the mouse. This pseudo element is supported in IE and Chrome, but not in Firefox. It was part of the CSS 3.0 propposal, but is no longer part of the specification.

Here is a ::selection CSS pseudo element example:

::selection {
    background-color: #ff00ff;
}

  

This example sets the background-color of the selected text to purple.

时间: 2024-10-12 19:28:17

CSS Selectors的相关文章

BeautifulSoup高级应用 之 CSS selectors /CSS 选择器

BeautifulSoup支持最常用的CSS selectors,这是将字符串转化为Tag对象或者BeautifulSoup自身的.select()方法. 本篇所使用的html为: html_doc = """<html><head><title>The Dormouse's story</title></head><body><p class="title"><b&

[Selenium] 在Chrome的开发者工具中验证检查XPath/CSS selectors

Evaluate and validate XPath/CSS selectors in Chrome Developer Tools Method 1 : From Elements panel Use the search function inside Elements panel to evaluate XPath/CSS selectors and highlight matching nodes in the DOM. 1.Press F12 to open up Chrome De

盘点 CSS Selectors Level 4 中新增的选择器

CSS 选择器在实践中是非常常用的,无论是在写样式上或是在 JS 中选择 DOM 元素都需要用到.在 CSS Selectors Level 4 中,工作组继续为选择器标准添加了更丰富的选择器.下面我们来了解一下. :is() :is 是一个用于匹配任意元素的伪类,使用方法很简单,只需要将选择器列表传入即可,也就是说,:is()的结果也就是传入的选择器列表中选中的元素. 那么这个选择器有什么用呢?举个例子:我需要对不同层级下的h1标签设置不同的字体大小: /* Level 0 */ h1 { f

CSS命名规范

html页面的CSS.DIV命名规则 CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center 登录条:loginbar 标志:logo 广告:banner 页面主体:main 热点:hot 新闻:news 下载:download 子导航:subnav 菜单:menu 子菜单:submenu 搜索:search 友情链接:

[javascript]MooTools Selectors(MooTools 选择器) ELEMENT DOM选择

//ELEMENT DOM选择//on are tag names. //All the divs on the page: $$('div'); //All the divs and paragraphs //note: this returns an array with all the divs first, //then all the paragraphs: $$('div', 'p'); //When you include Selectors.js, you can //pass

学习提高你CSS技术的法则

分享一些我这几个月来理解的东西,这并不是一些代码片段或者是css小技巧,而更像是一些通用的规则或者是最佳实践之类的东西,如下: 不要让你的代码脱离你的掌控,尽量简洁 掌握基础,学习CSS技巧 保持代码的可复用性 面向对象的css Css3 了解他能做的以及你可以使用的部分 渐进增强与优雅降级 Css预处理工具 与时俱进 取长补短 熟能生巧 你想说什么呢?你准备好了?那我们继续往下吧. 1.不要让你的代码脱离你的掌控,尽量简洁 别让你的代码脱离你的掌控 这是编程的一种通用建议,不仅仅适合css.当

html页面的CSS、DIV命名规则

CSS命名规则 头:header 内容:content/containe 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左右中:left right center 登录条:loginbar 标志:logo 广告:banner 页面主体:main 热点:hot 新闻:news 下载:download 子导航:subnav 菜单:menu 子菜单:submenu 搜索:search 友情链接:friendlink 页脚:foote

30个你必须记住的CSS选择符

30个你必须记住的CSS选择符 整理 本文摘自:http://yanhaijing.com/css/2014/01/04/the-30-css-selectors-you-must-memorize/ 04 January 2014 号外号外:专注于移动端的fullPage.js来啦!!!快点我查看 所以你学会了基础的id,类和后代选择符,然后你就一直用它们了吗?如果是这样,你丢失了(css的)巨大的灵活性.在本文中提到的很多选择器属于CSS3规范的一部分,因此,只有在现代浏览器中才可使用. 1

初探CSS 4选择器

2014年1月,我写了一篇文章:The Current Generation of CSS3 Selectors,这篇文章的目的是介绍一些CSS3中新增的选择器.文中的选择器已经有了很多文档,并且也被大多数浏览器支持(包括IE9+). 由于Selectors Level 4 specification目前已是工作草案状态,并且Editor's Draft of the same spec也在进行中(编辑草案通常被视为更有权威),未来的CSS选择器看起来很明朗了, 这篇文章重点介绍没有在之前那篇文