探索CSS3选择器的奥秘

CSS3选择器

思维脑图

在这里插入图片描述

属性选择器

1.element[attr] 表示选择带有attr属性的element元素
例如:选择带有class属性的span元素,并将其颜色变成红色。

<style>
<style>
        span[class] {
           color: red;
        }
    </style>
	<span class="spanClass">span</span>
    <span id="spanId">span</span>

这样就成功匹配到第一个span元素
2.element[attr~=attr] 表示的一个单独的属性值,这个属性值是以空格分隔开。
例如:让class属性为f40的div颜色变成淘宝红**#f40**

 <style>
 div[class~="f40"] {
            color: #f40;
        }
 </style>
<div class="f40 ml10 fl">div</div>

这样成功选择class中多个属性中的其中一个
3.element[attr|=val] 表示的一个单独的属性值或是以“-”分隔的
例如:让class属性中含有contentdiv颜色全部变为红色。(以“-”分隔)

<style>
        div[class|="content"] {
            color: red;
        }
    </style>
    <div class="content">content</div>
    <div class="content-1">content-1</div>

两个div全部变为红色
第1个div,拥有class属性,并且值为content,所以被选中;
第2个div,拥有class属性,值是content开头并紧跟着连接符“-”,所以被选中。
4.elment[attr=val] 表示属性值里含有val字符并且在“任意”位置
例如:让class属性中含有div的div变成红色

<style>
 div[class*="div"] {
            color: red;
        }
 </style>
 <div class="contentdivred">red</div>

5.element[attr^=val] 表示的属性值里包含val字符并且在“开始”位置
例如:让class属性中含有div的div变成红色(div必须在class属性中的开头)

<style>
 div[class^="div"] {
            color: red;
        }
 </style>
 <div class="divredcontent">red</div>

6.element[attr$=val] 表示的属性值里包含val字符并且在“结束”位置。
例如:让class属性中含有div的div变成红色(div必须在class属性中的结尾)

<style>
 div[class$="div"] {
            color: red;
        }
 <div class="contentreddiv">red</div>

伪类选择器

1.element:first-child 相对于父级做参考,所有子元素的第一个子元素,并且位置要对应。
例如:将第一个li的颜色变为红色。

<style>
        li:first-child {
            color: red;
        }
</style>
    <ul>
            <li>1</li>
            <li>2</li>
    </ul>

2.element:first-of-type相对于父级元素做参考,特定类型的(element)的第一个子元素。
例如:仍将第一个
li
的颜色变为红色。

<style>
        li:first-of-type {
            color: red;
        }
 </style>
    <ul>
            
            <li>1</li>
            <li>2</li>
   </ul>

有人可能会问这两个效果相同,这两个有什么区别吗?
如果在第一个li前面加上一个span元素,那么li:first-child就会失效,它虽然是第一个li,但它相对于父级做参考,它不是第一个子元素,li:first-child 它是指相对于父级ul下面的第一个子元素,通过判断,第一个子元素不是li那么就不起作用了。执行逻辑:返回到父级,然后选择第一个子元素,第一个子元素是li执行,不是li,不执行

<style>
        li:first-child {
            color: red;
        }
        //失效
        li:first-of-type {
            color: red;
        }
        //生效
 </style>
 <ul>
            <span>1</span>
            <li>1</li>
            <li>2</li>
</ul>

3.element:last-child 相对于父级做参考,所有子元素的最后一个子元素,并且位置要对应。
4.element:last-of-type 相对于父级元素做参考,特定类型的(element)的最后一个子元素。
5.element:only-child 相对于父级元素做参考,element父级下仅有一个
element
子元素,出现两个element就失效了。
例如:将span的颜色变为红色。

<style>
        span:only-child {
            color: red;
        }
</style>
 <ul>
            <span>1</span>
 </ul>

6.nth-of-child(n) 第n个子元素,element元素的全部兄弟元素中的第n个element元素
(n的取值大于等于1,当n为系数时n的取值可以为0)
例如:将第三个span元素变为红色。

<style>
        span:nth-child(3) {
            color: red;
        }
    </style>
    <ul>
            <span>1</span>
            <span>2</span>
            <span>3</span>
    </ul>

7.nth-of-type(n) 第n个子元素,忽略element的其他与其不同的兄弟元素中的第n个element元素。
例如:将第四个span元素变为红色。

<style>
        span:nth-of-type(4) {
            color: red;
        }
</style>
<ul>
            <span>1</span>
            <span>2</span>
            <span>3</span>
            <li>4</li>
            <span>4</span>
</ul>

nth-of-child(n)nth-of-type(n)区分方法与上面的
element:first-of-typeelement:first-child 相同。
8.nth-last-child(n)nth-last-of-type(n) 从最后一个元素往前数,第n个子元素,是上面两种的倒序。
9.element:target 结合锚点进行使用,处于当前锚点的元素会被选中
例如:假设代码在
index.html
中,当访问index.html#demodiv中的文字颜色变为红色。

<style> 
        #demo:target {
            color: red;
        }
</style>
<a href="#demo">demo</a>
    <div id="demo">
        <p>Element:target伪类使用方法</p>
    </div>

10.element:empty表示元素没有任何内容才被选中。
例如:将空的p元素的背景颜色设置为红色,高20px

<style>
        p:empty {
            background-color: red;
            height: 20px;
        }
</style>
<ul>
            <p></p>
</ul>

伪元素选择器

1.element::before设置元素前面的内容,用来和content属性一起使用,并且必须定义content属性
例如:在bc前面插入a并将a的颜色改为红色

<style>
        p::before {
            content: "a";
            color: red;
        }
    </style>
    <ul>
            <p>bc</p>
    </ul>

2.element::after 设置元素后面的内容,用来和content属性一起使用,并且必须定义content属性
例如:在a后面插入bc,并将bc的颜色改为红色

<style>
        p::after {
            content: "bc";
            color: red;
        }
</style>
<div>
        <p>a</p>
</div>

3.element::placeholder 设置对象文字占位符的样式。
注意:(1)除了Firefox是 ::placeholder,其他浏览器都是使用 ::input-placeholder
(2)兼容性不太好,需要添加相应的浏览器前缀
例如:将占位符的默认灰色改为共色

<style>
        input::-webkit-input-placeholder {
            color: red;
        }
</style>
<input type="text" placeholder="请输入用户名">

4.element::selection改变选中(鼠标选中)文本的样式。
注意: ::selection只能定义被选择时的background-color,color及text-shadow(IE11尚不支持定义该属性)。
例如:当选中123456时,颜色变为红色。

<style>
        p::selection {
            color: red;
        }
</style>
<p>123456</p>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值