本文介绍: CSS种伪类和伪元素的详细介绍

目录

一、引入伪类跟伪元素的原因?

二、什么是伪类,伪元素?

1、伪类

2、伪元素

三、伪类

1、状态伪类:基于元素当前状态进行选择的

常见的状态伪类

伪类和 CSS 类

2、结构性伪类:css3新增选择器

常见的结构性伪类

伪类和CSS

四、伪元素

所有的伪元素

::before和::after比较

contnt属性的类别


一、引入伪类跟伪元素的原因?

伪类和伪元素的引入是因为在文档树里有些信息无法被充分描述

比如CSS没有“段落的第一行”、“文章首字母”之类的选择器,而这在一些出版场景里又是必须的,因此引入。

引用标准中的话:
(CSS 引入伪类和伪元素的概念是为了实现基于文档树之外的信息格式化。)

二、什么是伪类,伪元素?

1、伪类

概念:为处于某个状态的已有元素添加对应样式,这个状态是根据用户行为动态改变的。

可以用于

设置鼠标悬停在元素上时的样式 为已访问和未访问链接设置不同的样式 设置元素获得焦点时的样式

2、伪元素

概念创建一些不在文档树中的元素,并为其添加样式。(就是选取某些元素前面或后面这种普通选择器无法完成的工作,虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。)

可以用于

设置元素的首字母、首行的样式 在元素的内容之前或之后插入内容

三、伪类

分类

状态伪类

结构性伪类

1、状态伪类:基于元素当前状态进行选择

元素的样式会根据其状态呈现不同的样式,当元素处于某状态时会呈现该样式,而进入另一状态后,该样式也会失去。

常见的状态伪类

:link 应用于未被访问过的链接

:hover 应用鼠标悬停到的元素;

:active 应用于被激活的元素;

:visited 应用于被访问过的链接,与:link互斥

:focus 应用于拥有键盘输入焦点的元素。

 实例
 <!DOCTYPE html>
 <html>
         <head>
             <style>
                 /* 未访问链接 */
                 a:link {
                   color: red;
                 }
 ​
                 /* 已访问链接  */
                 a:visited {
                   color: green;
                 }
 ​
                 /* 鼠标悬停链接  */
                 a:hover {
                   color: hotpink;
                 }
 ​
                 /* 已选择链接*/
                 a:active {
                   color: blue;
                 }
             </style>
         </head>
 <body>
 ​
 <p><a href="">这是一个链接</a></p>
 ​
 </body>
 </html>

注意:

  1. 这几个伪类同时出现在一个元素的操作上,顺序不能改变,否则很大程度上会产生紊乱,造成效果失效!
    a:hover 必须在 CSS 定义中的 a:link 和 a:visited 之后,才能生效。
    (意思是必须先写a:link 和 a:visited再写 :hover)
    
    a:active 必须在 CSS 定义中的 a:hover 之后才能生效。
    (意思是必须先写a:hover再写 :active)
  2. 另外伪类名称大小写并不敏感
伪类和 CSS 类

1.当您将鼠标悬停在类highlight上时,会改变颜色:

 a.highlight:hover {
   color: red;
 }

2.悬停在 <div> 上

 div:hover {
   background-color: blue;
 }

3.把鼠标悬停到 <div> 元素以显示 <h1>元素(类似工具提示效果

 h1 {
   display: none;
   background-color: green;
   padding: 25px;
 }
 ​
 div:hover h1 {
   display: block;
 }

2、结构性伪类:css3新增选择器

利用dom树进行元素过滤通过文档结构的互相关系来匹配元素,能够减少classid属性定义,使文档结构简洁

常见的结构性伪类
  :first-child 选择某个元素的第一个子元素; 
  :last-child 选择某个元素的最后一个子元素;
  :nth-child(n) 匹配属于其父元素的第 n个子元素,不论元素的类型;
  :nth-last-child() 从这个元素的最后一个子元素开始算,选匹配属于其父元素的第 n个子元素,不论元素的类型;
  :nth-of-type() 规定属于其父元素的第n个 指定 元素;
  :nth-last-of-type() 从元素的最后一个开始计算,规定属于其父元素的指定 元素;
  :first-of-type 选择一个上级元素下的第一个同类子元素;
  :last-of-type 选择一个上级元素的最后一个同类子元素;
  :only-child 选择它的父元素的唯一一个子元素;
  :only-of-type 选择一个元素是它的上级元素的唯一一个相同类型的子元素;
  :checked匹配被选中input元素,这个input元素包括radio和checkbox。
  :empty 选择的元素里面没有任何内容。
  :disabled匹配禁用的表单元素。
  :enabled匹配没有设置disabled属性的表单元素。
  :valid匹配条件验证正确的表单元素。
  :in-range选择具有指定范围内的值的 <input> 元素。
  :optional选择不带 "required" 属性的 <input> 元素。
  :focus选择获得焦点的 <input> 元素。
伪类和CSS

实例

1.选择器匹配p元素的第一个子元素:

 p:first-child {
   color: red;
 }
 <p>你好</p>
 <p>好啊</p>

2.匹配所有 <p> 元素中的首个 <i> 元素:

 p i:first-child {
   color: blue;
 }
 ​
 <p>我是一个<i>强壮</i>的男人。我是一个<i>强壮</i>的男人。</p>
 <p>我是一个<i>强壮</i>的男人。我是一个<i>强壮</i>的男人。</p>

3.段落2变成蓝色

语法解释:p:nth-child(3),P标签的父元素是bodybody的第3个子元素是“段落2。”所以段落2”,颜色变成了蓝色

 p:nth-child(3)
 {
 background:blue;
 }
 ​
 <body>
     <h1>今天学习伪类和伪元素</h1>
     <p>段落1</p>
     <p>段落2</p>
     <p>段落3</p>
 </body>
     

在上一个代码中,如果p:nth-child(3)改为属p:nth-of-type(3) ,则意思为规定其父元素的第3个 p 元素,那么变蓝色的是段落3

4.lang=”en” 的 q 元素定义~:

q:lang(en) {
  quotes: "~" "~";
}

<p>Some text <q lang="en">A quote in a paragraph</q> Some text.</p>

5.选择获得焦点的 <input> 元素(点击输入框背景颜色变为黄色):

input:focus {
  background-color: yellow;
}

  First name: <input type="text" name="fname"><br>
  Last name: <input type="text" name="lname"><br>

四、伪元素

所有的伪元素

选择器 例子 例子描述
::after p::after 每个 <p> 元素之后插入内容
::before p::before 每个 <p> 元素之前插入内容
::firstletter p::firstletter 选择每个 <p> 元素的首字母
::firstline p::firstline 选择每个 <p> 元素的首行。
::selection p::selection 选择用户选择的元素部分。

注意:

CSS3 规范中有一部分要求,为了区分伪类和伪元素,伪元素使用两个冒号 (::), 伪类使用一个冒号 (:)

对于 CSS2 中已经有的伪元素,例如 :before,单冒号和双冒号的写法 ,::before 作用是一样的,所以,如果网站需要兼容 webkitfirefoxopera 等浏览器,伪元素建议采用双冒号的写法,如果是要兼容 IE 浏览器建议用 CSS2 的单冒号写法

为所有 <p> 元素中的首行添加样式:

p::first-line {
  color: #ff0000;
  font-size:16px;
}

这里对于::firstline,我们需要注意,::first-line 伪元素只能应用块级元素。

以下属性用于 ::first-line 伪元素:

设置所有 <p> 元素中文本的首字母格式

p::first-letter {
  color: red;
  font-size: 16px;
}

这里对于::first-letter ,我们需要注意,::first-letter 伪元素只能应用块级元素。

下面的属性用于 ::first-letter 伪元素:

::before和::after比较

在元素的 ::before和 ::after中插入内容content属性(如果没有content样式,伪元素会失效)

默认值 normal
继承: no
版本 CSS2
JavaScript 语法 object.style.content=”url(beep.wav)”
contnt属性的类别
none 设置 content 为空值。
normal 在 :before 和 :after 伪类元素中会被视为 none,即也是空值
counter 设定计数器格式可以counter(name) 或 counter(name,style) 。产生的内容是该伪类元素指定名称最小范围的计数格式style指定默认是’decimal’——十进制数字
attr(attribute) 将元素的 attribute 属性以字符串形式返回
string 设置文本内容
open-quote 设置前引号
close-quote 设置后引号
noopen-quote 移除内容的开始引号
noclose-quote 移除内容的闭合引号
url(url) 设置某种媒体(图像,声音,视频等内容)的链接地址
inherit 指定的 content 属性的值,应该从父元素继承

在每个 <h1> 元素的内容之前插入一幅图:

h1::before {
  content: url();
}

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

h1::after {
  content: url();
}

使所选文本在蓝色背景显示为红色:

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

可以应用于 ::selection:的属性

伪元素与 CSS 类结合使用:(将以粉色和较大的字体显示 class=”name” 的段落的首字母。)

p.name::first-letter {

  color: hotpink;
  font-size: 200%;

}  


<p class="name">你好漂亮!</p>

原文地址:https://blog.csdn.net/m0_66570642/article/details/131343603

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_15149.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注