CSS学习(四):CSS复合选择器

1.什么是复合选择器

在CSS中,可以根据选择器的类型把选择器分为基础选择器复合选择器, 复合选择器是建立在基础选择器之上,对基础选择器进行组合形成的。基础选择器的相关知识可以参考之前的博客。

复合选择器是由两个或多个基础选择器,通过不同的方式组合形成的,主要包括:后代选择器子选择器并集选择器伪类选择器

2. 后代选择器

后代选择器又称为包含选择器,可以选择父元素里面子元素。其写法就是把外层标签写在前面,内层标签写在后面,中间用空格分隔,当标签发生嵌套时,内层标签就成为外层标签的后代。

其语法格式为:

元素1 元素2 {样式声明;}

例如,页面中同时含有ul 标签和ol标签,我只想让ul标签里面的文本变为粉色,可以这样定义CSS:

<style>
    ul li {
        color:pink;
    }
</style>
<ol>
    <li>我是ol标签的li</li>
    <li>我是ol标签的li</li>
</ol>

<ul>
    <li>我是ul标签的li</li>
    <li>我是ul标签的li</li>
</ul>

这时就能看到ul 标签里的文本就会变成粉色,而ol标签里面的文本就不会发生变化。需要注意的是,这里的元素1和元素2均属于基础选择器中的标签选择器,也可以替换成其他基础选择器,比如类选择器。更换成类选择器后的代码如下:

<style>
    .nav2 .pink {
        color:pink;
    }
</style>
<ol class="nav">
    <li class="pink">我是ol标签的li</li>
    <li class="pink">我是ol标签的li</li>
</ol>

<ul class="nav2">
    <li class="pink">我是ul标签的li</li>
    <li class="pink">我是ul标签的li</li>
</ul>

也同样可以实现上述效果。后代选择器需要注意以下几点:

  • 元素1和元素2之间必须要用空格隔开。
  • 元素1是父级,元素2是子级,最终选择的是元素2
  • 元素2可以是儿子,也可以是孙子,只要是元素1的后代即可。
  • 元素1和元素2可以是任何基础选择器。

3. 子选择器

子元素选择器(子选择器)只能选择作为某元素的最近一级子元素,简单理解就是选择亲儿子元素。其基本语法为:

元素1>元素2 {样式说明;}

这里给出一个简单案例:

<style>
    .nav > a {
        color:pink;
    }
</style>
<div class="nav">
    <a href="#">我是儿子</a>
    <p>
        <a href="#">我是孙子</a>
    </p>
</div>

这时只有第一个a标签内的文本会变成粉色。子选择器需要注意以下几点:

  • 元素1和元素2中间用大于号隔开。
  • 元素1必须是父级,元素2是子级,最终选择的是元素2.
  • 元素2必须是亲儿子,其孙子,重孙之类都不归他管。

4. 并集选择器

并集选择器可以选择多组标签,同时为它们定义样式,通常用于集体声明,语法规范为:

元素1,元素2 {样式声明;}

一个简单的例子:

<style>
    p, div{
        color:pink;
    }
</style>
<div>
    雪之下雪乃
</div>
<p>
    由比滨结衣
</p>

并集选择器是各选择器通过英文逗号 ,连接而成,任何形式的选择器都可以作为并集选择器的一部分。

5.伪类选择器

伪类选择器 用于向某些选择器添加特殊效果,比如给链接添加效果,或者选择第1个元素,第n个元素。伪类选择器书写的最大特点是用冒号(:) 表示,比如 :hover, :first-child。

5.1 链接伪类选择器

类别 选择对象
a:link 选择所有未被访问的链接
a:visited 选择所有已被访问的链接
a:hover 选择鼠标指针位于其上的链接
a:active 选择活动链接(鼠标按下未弹起的链接)

一个简单的例子,定义CSS如下:

<style>
    a:link {
        color:black;
        text-decoration: none;
    }

    a:visited {
        color:pink;
    }
</style>

上述代码实现的效果是,未点击链接时,链接是黑色,点击链接后,链接变成粉色。同理,a:activea:hover 的使用方式相同。

注意事项:

  • 为了确保生效,请按照LVHA的顺序声明:link,visited,hover,active。
  • a 链接在浏览器中有默认样式,所以实际开发都需要给链接单独指定样式(给body指定颜色不会影响到a)。

5.2 :focus伪类选择器

:focus 伪类选择器 用于选取获得焦点的表单元素。焦点就是光标,一般情况input类表单元素才能获取,因此这个选择器主要针对表单元素来说的。

input:focus {
    background-color:pink;
}

5.3 其他伪类选择器

:first-child 选择器用于选取属于其父元素的首个子元素的指定选择器。例如:

a:first-child {
    color:pink;
}

个人理解是,会选出含有a标签子元素的标签,将其中的第一个标签设置为粉色。当我们HTML代码如下时:

<p>
    <span>我在span里面</span>
    <span><a>第一个链接</a></span>
    <a>第二个链接</a>
    <a>第三个链接</a>
</p>
<p>
    <a>第一个链接</a>
    <a>第二个链接</a>
</p>

两个p 标签里面的 “第一个链接” 都将显示红色。:first-child 也可以搭配复合选择器使用,如下所示:

p:first-child a {
    color:pink;
}
<body>
<p>
    <span><a>第一个链接</a></span>
    <a>第二个链接</a>
    <a>第三个链接</a>
</p>
<p>
    <a>第一个链接</a>
    <a>第二个链接</a>
</p>
</body>

这时,第一个p 标签中的所有a 标签都会变成红色(p标签是body的子标签),第二个p 标签不会发生改变。

::after(:after) 通常搭配content 使用,表示在选定标签后面加上content 的内容。同理,::before(:before)会在选定标签前面加上content 的内容 。

q::before {
  content: "«";
  color: blue;
}
q::after {
  content: "»";
  color: red;
}

6. 小结

选择器 作用 特征 使用情况 隔开符号及用法
后代选择器 用来选择后代元素 可以是子孙后代 较多 空格分隔,.nav a
子代选择器 选择最近一级元素 只选亲儿子 较少 大于分隔,.nav>a
并集选择器 选择某些相同样式的元素 可以用于集体声明 较多 逗号分隔,.nav,a
链接伪类选择器 选择不同状态的链接 跟链接相关 较多 LVHA
:focus选择器 选择获得光标的表单元素 跟表单相关 较少 input:focus
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇