【CSS】CSS 伪类和伪元素

红太狼 2023-02-15 15:54 166阅读 0赞

目录

        1. 什么是伪类和伪元素?
        • 1.1 伪类
        • 1.2 伪元素
        1. 伪类和伪元素的使用场景?
        • 2.1 伪类的应用
          • 2.1.1 在 a 标签中的应用
          • 2.1.2 表单验证
          • 2.1.3 元素索引
        • 2.2 伪元素的应用
          • 2.2.1 使用 :after 清除浮动
          • 2.2.2 插入文本内容
          • 2.2.3 插入非文本内容
        1. CSS3中的伪类和伪元素
        • 3.1 CSS3中的伪类
        • 3.2 CSS3中的伪元素

前言: 最近在项目练习中使用了很多伪类和以及伪元素,但是对这些知识只有一知半解的理解,下面就来整理一下相关知识,以便后面再使用的时候能够得心应手。

1. 什么是伪类和伪元素?

1.1 伪类

CSS 伪类 是添加到选择器的关键字,指定要选择的元素的特殊状态,在不同的状态下,有不同的样式。伪类更多的定义的是状态,常见的伪类如下表:






















































属性 描述
:active 向被激活的元素添加样式。
:focus 向拥有键盘输入焦点的元素添加样式。
:hover 当鼠标悬浮在元素上方时,向元素添加样式。
:link 向未被访问的链接添加样式。
:visited 向已被访问的链接添加样式。
:first-child 向元素的第一个子元素添加样式。
:last-child 向元素的最后一个子元素添加样式。
:nth-child(n) 向元素的第n个子元素添加样式。
:required 指定具有 required属性 的表单元素。
:valid 指定一个 匹配指定要求 的表单元素。
:invalid 指定一个 不匹配指定要求 的表单元素。

1.2 伪元素

CSS 伪元素用于向某些选择器设置特殊效果,常见的伪元素有以下几个:


























属性 描述
:first-letter 向文本的第一个字母添加特殊样式。
:first-line 向文本的首行添加特殊样式。
:before 在元素之前添加内容。
:after 在元素之后添加内容。

需要注意的是: 在CSS3中明确规定伪元素前面用两个冒号(::)来表示,而伪类用一个冒号来表示(:),但是由于浏览器兼容的问题,它们都用一个冒号(:)来表示,所以比较容易混淆。

2. 伪类和伪元素的使用场景?

2.1 伪类的应用

伪类选择器可以分为两种:静态伪类动态伪类

  • 静态伪类,只能用于超链接样式,例如::link:visited
  • 动态伪类,针对所有标签都使用的样式,例如::hover:hover:focus
2.1.1 在 a 标签中的应用

<a>标签有四种状态::link:hover:active:visited

  1. /* 超链接点击之前*/
  2. a:link{
  3. color:green;
  4. }
  5. /* 超链接被被访问之后 */
  6. a:visited{
  7. color:orange;
  8. }
  9. /* 鼠标放在标签上时 */
  10. a:hover{
  11. color:red;
  12. }
  13. /* 鼠标点击超链接,但是没松手时 */
  14. a:active{
  15. color:skyblue;
  16. }

需要注意: 这四个属性必须按照以上顺序写,不然设置的样式不会生效!

还有一个小问题,就是<a>标签本身定义的属性和a:link定义的属性有什么区别呢?

  • a{} 定义的样式对所有的<a>标签生效
  • a:link 定义的样式只对有href属性的<a>标签生效

实际使用中,我们使用 a:link较少,因为a{}设置的样式也能到达同样的效果。

2.1.2 表单验证

在表单验证中,我们常会用到一下三个属性:






















选择器 描述
:required 指定具有 required属性 的表单元素
:valid 指定一个 匹配指定要求 的表单元素
:invalid 指定一个 不匹配指定要求 的表单元素

(1):required 选择器在表单元素是必填项时设置指定样式。表单元素可以使用 required 属性来设置必填项。该选择器只适用于以下表单元素:inputselecttextarea

(2):valid 选择器在表单元素的值需要根据指定条件验证时设置指定样式。

(3):invalid 选择器用于在表单元素中的值是非法时设置指定样式。

注意: :valid选择器和:invalid 选择器只作用于能指定区间值的元素,例如 input 元素中的 min 和 max 属性,及正确的 email 字段, 合法的数字字段等。

看下面的例子,对input框的email类型进行校验:

  1. <input type="email" placeholder="请输入" value="123456@qq.com" />
  2. <input type="email" placeholder="请输入" value="hello world" />
  3. <input type="email" placeholder="请输入" value="" required />
  4. input:valid {
  5. border-color: green;
  6. }
  7. input:invalid {
  8. border-color: red;
  9. }
  10. input:required {
  11. border-color: pink;
  12. }

显示结果:
在这里插入图片描述

2.1.3 元素索引

对于制定一系列相同的标签时,我们不需要使用JavaScript去获取,可以使用下面的属性获取:


























选择器 描述
:first-child 向元素的第一个子元素添加样式。
:last-child 向元素的最后一个子元素添加样式。
:nth-child(n) 向元素的第n个子元素添加样式。
:nth-of-type(n) 向元素同类型中的第n个同级兄弟元素添加元素。

注意: 上面的选择器中的n,既可以是数字,也可以是关键字,或者一个公式。

示例:

  1. <div>
  2. <h2>标题</h2>
  3. <p>第一段文字</p>
  4. <p>第二段文字</p>
  5. <p>第三段文字</p>
  6. <p>第四段文字</p>
  7. <p>第五段文字</p>
  8. </div>
  9. <style> p:nth-child(3){
  10. color: blue;
  11. }
  12. p:nth-of-type(3){
  13. color: pink;
  14. }
  15. p:last-child{
  16. color: red;
  17. }
  18. p:first-child{
  19. color: green;
  20. }
  21. </style>

在这里插入图片描述
从上面的运行结果我们可以看到,:nth-child(n):nth-of-type(n) 所表示的内容是不一样的,:nth-child(n)不关注元素的类型,只关注是父元素下的第n个子元素,而 :nth-of-type(n)会关注元素的类型,设置的样式只对第n个同类的兄弟元素有效。

同样我们可以看到我们使用:first-child设置的样式没有生效,原因是p标签父元素的第一个子元素不是p标签,所以没有生效。这也说明了:first-child:last-child:nth-child(n)一样,不关注元素的类型。

2.2 伪元素的应用

在使用的伪元素的时候我们需要注意以下几点:

  • 伪元素在使用时必须设置content属性,不然是无效的
  • 在伪元素插入的内容,只能在CSS中看到
  • 在伪类中插入的元素通常情况下是内联元素,通常需要转化为块级元素再进行设置
  • 伪元素不会继承父元素的样式
  • 伪元素被应用为元素的子元素

:before:after是我们常用的两个伪元素:


















伪元素 描述
:before 在元素之前添加内容,使用 content 属性来指定要插入的内容。
:after 在元素之后添加内容,使用 content 属性来指定要插入的内容。
2.2.1 使用 :after 清除浮动

使用 :after 清除浮动是目前使用的比较多的方法,它的形式如下:

  1. <style> .container{
  2. border:1px solid #ccc;
  3. background:pink;
  4. margin:50px ;
  5. padding:50px;
  6. }
  7. .container:after {
  8. content:'';
  9. clear:both;
  10. display:block;
  11. height:0;
  12. width:0;
  13. }
  14. .div1{
  15. width: 100px;
  16. height:100px;
  17. background:red;
  18. float:left;
  19. }
  20. .div2{
  21. width: 100px;
  22. height:100px;
  23. background:blue;
  24. float:left;
  25. }
  26. .div3{
  27. width: 100px;
  28. height:100px;
  29. background:skyblue;
  30. float:left;
  31. }
  32. </style>
  33. <div class="container">
  34. <div class="div1">1</div>
  35. <div class="div2">2</div>
  36. <div class="div3">3</div>
  37. </div>

如果我们不清除浮动,那父元素就会发送塌陷。

在不清除浮动之前,三个块是这样的:
在这里插入图片描述
清除浮动之后:
在这里插入图片描述

2.2.2 插入文本内容
  1. <style>
  2. p:before{
  3. content: "题目: ";
  4. }
  5. <body>
  6. <p>这是一段文字</p>
  7. </body>
  8. </style>

显示结果:
在这里插入图片描述

2.2.3 插入非文本内容
  1. <style>
  2. p:before{
  3. content: "";
  4. display: block;
  5. width: 30px;
  6. height: 30px;
  7. background:url(icon.jpg) no-repeat;
  8. background-size:100%;
  9. }
  10. </style>
  11. <body>
  12. <p>图标</p>
  13. </body>

3. CSS3中的伪类和伪元素

3.1 CSS3中的伪类

动态伪类:






























伪类 描述
:link 选择所有未被访问的链接。
:visited 选择所有已被访问的链接。
:active 选择活动链接。
:hover 选择鼠标指针位于其上的链接。
:focus 选择获得焦点的 input 元素。

状态伪类:






















伪类 描述
:enabled 选择每个启用的元素。
:disabled 选择每个禁用的元素。
:checked 选择每个被选中的元素。

:nth选择器:







































































伪类 示例 描述
:first-of-type p:first-of-type 选择属于其父元素的首个 <p> 元素的每个 <p> 元素。
:last-of-type p:last-of-type 选择属于其父元素的最后 <p> 元素的每个 <p> 元素。
:only-of-type p:only-of-type 选择属于其父元素唯一的 <p> 元素的每个 <p> 元素。
:only-child p:only-child 选择属于其父元素的唯一子元素的每个 <p> 元素。
:nth-child(n) p:nth-child(2) 选择属于其父元素的第二个子元素的每个 <p> 元素。
:nth-last-child(n) p:nth-last-child(2) 同上,从最后一个子元素开始计数。
:nth-of-type(n) p:nth-of-type(2) 选择属于其父元素第二个 <p> 元素的每个 <p> 元素。
:nth-last-of-type(n) p:nth-last-of-type(2) 同上,但是从最后一个子元素开始计数。
:last-child p:last-child 选择属于其父元素最后一个子元素每个 <p> 元素。
:empty p:empty 选择没有子元素的每个 <p> 元素(包括文本节点)。
:not(selector) :not§ 选择非 <p> 元素的每个元素。
:root :root 选择文档的根元素。

3.2 CSS3中的伪元素






























伪元素 描述
::after 已选中元素的最后一个子元素
::before 已选中元素的第一个子元素
::first-letter 选中某个款级元素的第一行的第一个字母
::first-line 匹配某个块级元素的第一行
::selection 匹配用户划词时的高亮部分

发表评论

表情:
评论列表 (有 0 条评论,166人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CSS的元素

    定义 伪类: CSS 伪类 是添加到选择器的关键字,指定要选择的元素的特殊状态。 例如,:hover 可被用于在用户将鼠标悬停在按钮上时改变按钮的颜色。

    相关 css 元素

    一、伪类、伪元素的共同点 1. 伪类、伪元素存在的原因: css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比

    相关 CSS元素

    为什么要引入伪类与伪元素? css引入伪类和伪元素概念是为了格式化文档树以外的信息。也就是说,伪类和伪元素是用来修饰不在文档树中的部分,比如,一句话中的第一个字母,或是列

    相关 元素

    首先,阅读 `w3c` 对两者的定义: `CSS` 伪类用于向某些选择器添加特殊的效果。 `CSS` 伪元素用于将特殊的效果添加到某些选择器。 可以明确两点,第

    相关 元素

    一、伪类 伪类包含两种:状态伪类(UI 伪类)和结构性伪类。 (1)状态伪类是基于元素当前状态进行选择的。 在与用户的交互过程中元素的状态是动态变化的,因此该元素