CSS 选择器

172 阅读6分钟

CSS 选择器及其优先级

选择器格式优先级权重
id 选择器#id100
类选择器#classname10
属性选择器a[ref=“eee”]10
伪类选择器li:last-child10
标签选择器div1
伪元素选择器li::after1
相邻兄弟选择器h1+p0
子选择器ul>li0
后代选择器li a0
通配符选择器*0

注意事项:

  • !important 声明的样式的优先级最高;
  • 如果优先级相同,则最后出现的样式生效;
  • 继承得到的样式的优先级最低;
  • 通用选择器(*)、子选择器(>)和相邻同胞选择器(+)并不在这四个等级中,所以它们的权值都为 0 ;
  • 样式表的来源不同时,优先级顺序为:内联样式 > 内部样式 > 外部样式 > 浏览器用户自定义样式 > 浏览器默认样式。

1. ID 选择器

为标有特定“id”的html元素来指定特定的样式,以“#”来定义。

<style>
    #green{
        color: green;
    }
</style>
<body>
    <h1 id="green">我是绿色的</h1>
    <h2 id="no"> 我没有被设置,我不是绿色的</h2>
</body>

2. 属性选择器

参考文档:www.w3school.com.cn/css/css_sel…

为具有指定属性的html元素设置样式。

2-1. 如果希望选择有某个属性的元素,而不论属性值是什么,可以使用简单属性选择器。

*[title] {color:red;}

2-2. 可以只对有 href 属性的锚(a 元素)应用样式:

a[href] {color:red;}

2-3. 可以根据多个属性进行选择,只需将属性选择器连接在一起即可。

例如,为了将同时有 href 和 title 属性的 HTML 超链接的文本设置为红色,可以这样写:

a[href][title] {color:red;}

2-4. 属性与属性值必须完全匹配

<p class="important warning">This paragraph is a very important warning.</p>

p[class="important warning"] {color: red;}

2-5. 根据部分属性值选择

如果需要根据属性值中的词列表的某个词进行选择,则需要使用波浪号(~)。

假设您想选择 class 属性中包含 important 的元素,可以用下面这个选择器做到这一点:

p[class~="important"] {color: red;}

2-6. 子串匹配属性选择器

类型描述
[abc^="def"]选择 abc 属性值以 "def" 开头的所有元素
[abc$="def"]选择 abc 属性值以 "def" 结尾的所有元素
[abc*="def"]选择 abc 属性值中包含子串 "def" 的所有元素

例如:如果希望对指向 W3School 的所有链接应用样式,不必为所有这些链接指定 class,再根据这个类编写样式,而只需编写以下规则:

a[href*="w3school.com.cn"] {color: red;}

2-7. 特定属性选择类型

*[lang|="en"] {color: red;}

上面这个规则会选择 lang 属性等于 en 或以 en- 开头的所有元素。因此,以下示例标记中的前三个元素将被选中,而不会选择后两个元素:

<p lang="en">Hello!</p>
<p lang="en-us">Greetings!</p>
<p lang="en-au">G'day!</p>
<p lang="fr">Bonjour!</p>
<p lang="cy-en">Jrooana!</p>

3. 类选择器

在 CSS 中,类选择器以一个点号显示:

.center {text-align: center}
// p 元素有 center 类。这意味着将遵守 ".center" 选择器中的规则。
<p class="center">
    This paragraph will also be center-aligned.
</p>

4. 伪类选择器

用来描述一个元素的特殊状态。比如第一个元素、某个元素的子元素、鼠标点击的元素。

静态伪类: 只能用于超链接的样式

  • :link 超链接点击之前
  • :visited 链接被访问过之后

动态伪类:针对所有标签都适用的样式

  • :hover “悬停”:鼠标放到标签上的时候
  • :active “激活”: 鼠标点击标签,但是不松手时。
  • :focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点)

使用举例:

  • a:link 未访问的链接显示的样式;
  • a:visited 已访问的链接显示的样式;
  • a:hover 鼠标挪动到链接上(重要)显示的样式;
  • a:active 激活的链接(鼠标在链接上长按住未松开)显示的样式;

5. 伪元素选择器

伪元素用于设置元素指定部分的样式。

参考文档:www.w3school.com.cn/css/css_pse…

5-1. ::first-line 伪元素

::first-line 伪元素用于向文本的首行添加特殊样式(只适用于块级元素)。

下面的例子为所有

元素中的首行添加样式:

p::first-line {
  color: #ff0000;
  font-variant: small-caps;
}

5-2. ::first-letter 伪元素

::first-letter 伪元素用于向文本的首字母添加特殊样式(只适用于块级元素)。

下面的例子设置所有

元素中文本的首字母格式:

p::first-letter {
  color: #ff0000;
  font-size: xx-large;
}

5-3. ::before 伪元素

::before 伪元素可用于在元素内容之前插入一些内容。

下面的例子在每个 <h1> 元素的内容之前插入一幅图像:

h1::before {
  content: url(smiley.gif);
}

5-4. ::after 伪元素

::after 伪元素可用于在元素内容之后插入一些内容。

下面的例子在每个 <h1> 元素的内容之后插入一幅图像:

h1::after {
  content: url(smiley.gif);
}

5-5. ::selection 伪元素

::selection 伪元素匹配用户选择的元素部分。

以下 CSS 属性可以应用于 ::selection

  • color
  • background
  • cursor
  • outline

下例使所选文本在黄色背景上显示为红色:

::selection {
  color: red; 
  background: yellow;
}

总结:所有 CSS 伪元素

::afterp::after在每个 p 元素之后插入内容。
::beforep::before在每个 p 元素之前插入内容。
::first-letterp::first-letter选择每个 p 元素的首字母。
::first-linep::first-line选择每个 p 元素的首行。
::selectionp::selection选择用户选择的元素部分。

6. 相邻兄弟选择器

相邻兄弟选择器可选择紧接在另一元素后的元素,且二者有相同父元素。

例如,如果要增加紧接在 h1 元素后出现的段落的上边距,可以这样写:

h1 + p {margin-top:50px;}

这个选择器读作:“选择紧接在 h1 元素后出现的段落,h1p 元素拥有共同的父元素”。

<style type="text/css">
    h1 + p {margin-top:50px;}
</style>
// ...
<body>
    <h1>This is a heading.</h1>
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
    <p>This is paragraph.</p>
</body>

image.png

7. 子选择器

如果只选择某个元素的子元素,请使用子元素选择器。

参考文档:www.w3school.com.cn/css/css_sel…

例如,如果希望选择只作为 h1 元素子元素的 strong 元素,可以这样写:

h1 > strong {color:red;}

这个规则会把第一个 h1 下面的两个 strong 元素变为红色,但是第二个 h1 中的 strong 不受影响:

<h1>This is 
    <strong>very</strong> 
    <strong>very</strong> important.
</h1>
<h1>This is 
    <em>really 
        <strong>very</strong>
    </em> important.
</h1>

image.png

8. 后代选择器

后代选择器可以选择作为某元素后代的元素。

参考文档:www.w3school.com.cn/css/css_sel…

举例来说,如果希望只对 h1 元素中的 em 元素应用样式,可以这样写:

h1 em {color:red;}

上面这个规则会把作为 h1 元素后代的 em 元素的文本变为 红色。其他 em 文本(如段落或块引用中的 em)则不会被这个规则选中:

<h1>This is a <em>important</em> heading</h1>
<p>This is a <em>important</em> paragraph.</p>

image.png

9. 通配符选择器

    * {
        // ...
    }