【CSS】css常用复杂选择器都有哪些?看这一篇就够了_07

目录 

❣️ 复杂选择器

1.兄弟选择器

2.属性选择器

(1) 属性选择器的定义方式

(2) 属性选择器的模糊查询

3.复杂的伪类选择器

(1) 动态伪类-5个

(2 )状态伪类-3个

(3) 目标伪类选择器-1个

(4) 结构性伪类选择器-12个

(5) 否定伪类选择器-1个

(6) 绝对丁克伪类选择器-1个

(7) 独生子女伪类选择器-1个

(8) 语言伪类选择器-1个

4.伪元素选择器—内容生成

(1) 伪元素选择器的定义与作用

(2) 伪元素内容生成,可以解决的问题

⏬ 伪元素与伪类有何区别?


🆙【前文回顾】👉 定位—相对定位,绝对定位,固定定位_06


   

❣️ 复杂选择器

1.兄弟选择器

兄弟元素,具备同一个爹的同级元素。

只能通过哥哥,找弟弟。只能往后找。

① 相邻兄弟选择器,通过哥哥找到紧紧挨在后面的弟弟

选择器1+选择器2{}    ——2个关键信息:(1) 紧接在另一元素后;(2) 二者有相同父元素

② 通用兄弟选择器,通过哥哥,找到后面所有符合要求的弟弟

选择器1~选择器2{}

相邻兄弟选择器在项目中的应用场景:

一组相同的元素,除了老大以外,其它兄弟都选中,使用相邻兄弟选择器,选择器1+选择器2{}

例如:li标签实现导航栏时的应用,li+li{margin-left:20px;} ,而不用li~li{ margin-left:20px;},因为通用兄弟选择器,会重复执行操作(因为每一个li都可以当作哥哥)

2.属性选择器

属性选择器在css中使用较少,在js中使用较多

“属性选择器”根据元素的属性和属性值来匹配元素,“属性”英文单词为:attribute。

(1) 属性选择器的定义方式

[attr]{}   匹配带有attr属性的元素

例如:li[class] {  color: red;  background: yellow;}

含义:选择有 class 属性(值不限)的所有 li 元素,使其文本为 red,背景色为 yellow。

[attr1][attr2]{}  匹配同时带有两个属性的元素

[attr=value]{}   匹配带有attr属性并且取值为value元素

例如:li[class="second"] {  color: red;  background: yellow;}


含义:选择有 class 属性值为 second 的所有 li 元素,使其文本为 red,背景色为 yellow。

elem[attr]{}    匹配带有attr属性的elem元素

例如:li[class] {  color: red;  background: yellow;}

含义:选择有 class 属性(值不限)的所有 li 元素,使其文本为 red,背景色为 yellow。

elem[attr=value]{}   匹配带有attr属性并且取值为value的elem元素

(2) 属性选择器的模糊查询

[attr^=value]{}  匹配带有attr属性并且属性值以value开头的元素  

例如:li[class^="se"] {  color: red;  background: yellow;}


含义:选择 class 整个属性值以 se 开头的所有 li 元素,使其文本为 red,背景色为 yellow。

[attr$=value]{}  匹配带有attr属性并且以value结尾的元素

例如:li[class$="ne"] {  color: red;  background: yellow;}


含义:选择 class 整个属性值以 ne 结尾的所有 li 元素,使其文本为 red,背景色为 yellow。

[attr*=value]{}  匹配带有attr属性并且含有value的元素

例如:li[class*="ir"] {  color: red;  background: yellow;}


含义:选择 class 属性值中包含字串 ir 的所有 li 元素,使其文本为 red,背景色为 yellow。

[attr~=value]{}  匹配带有attr属性并且含有value这个独立单词的元素

例如:li[class~="done"] {  color: red;  background: yellow;}


含义:选择有 class 属性值包含 done 的所有 li 元素,使其文本为 red,背景色为 yellow。

3.复杂的伪类选择器

伪类选择器(简称:伪类)通过冒号来定义,它定义了元素的状态,如点击按下,点击完成等,通过伪类可以为元素的状态修改样式。

伪类的功能和一般的DOM中的元素样式相似,但和一般的DOM中的元素样式不一样,它并不改变任何DOM内容。只是插入了一些修饰类的元素,这些元素对于用户来说是可见的,但是对于DOM来说不可见。伪类的效果可以通过添加一个实际的类来达到。

伪类选择器主要可以分为:动态伪类选择器(非css3)、UI元素状态伪类选择器、目标伪类选择器、结构伪类选择器、否定伪类选择器(IE6-8浏览器不支持)、绝对丁克伪类选择器、独生子女伪类选择器、语言伪类选择器((非css3)。

(1) 动态伪类-5个

定义:这些伪类并不存在于HTML中,只有当用户和网站交互的时候才能体现出来。

伪类选择器分为两种。

:link   :visited   :hover   :active   :focus

🔽 静态伪类:只能用于超链接的样式。如下:

:link   :visited属于锚点伪类  ——静态伪类   

:link 超链接点击之前

:visited 链接被访问过之后

PS:以上两种样式,只能用于超链接。

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

 :hover  :active  :focus属于用户行为伪类 ——动态伪类

:hover “悬停”:鼠标放到标签上的时候

:active “激活”: 鼠标点击标签,但是不松手时。

:focus 是某个标签获得焦点时的样式(比如某个输入框获得焦点)

前两个规则(:link、:visited)使用了静态伪类,后三个利用了动态伪类。动态伪类可以应用到任何元素,这一点很好,因为对非链接的元素应用动态样式通常很有用。例如,使用以下标记:

可以突出显示一个准备接受键盘输入的表单元素。

input:focus {background: silver; font-weight: bold;}

向任意元素应用动态伪类还可以做一些有点奇怪的事情。你可能想通过以下规则为用户提供一种强调的效果:

body:hover {background: yellow;}

根据这个规则,从body元素继承的所有元素(即包含在body下的元素)在鼠标指针停留时(处于悬停状态时)会显示一个黄色背景。标题。段落、列表、表、图像和body中的所有元素都会改为有黄色背景。另外还可以改变字体,在鼠标停留的元素外加一个边框,或者改变浏览器允许的所有其他方面。

(2 )状态伪类-3个

状态伪类主要针对表单进行设计的,由于表单是UI设计的灵魂,因此吸引了广大用户的关注。UI是User Interface(用户界面)的缩写,UI元素状态伪类选择器主要是针对于HTML中的form元素进行操作。

CSS3新定义了3种常用的UI状态伪类选择器。简单说明如下:

① :enabled

E:enabled 匹配(form表单)中处于可用状态的E元素

:enabled 伪类表示匹配指定范围内所有可用UI元素。在网页中,UI元素一般是指包含在form元素内的表单元素。例如,在下面表单结构中,input:enabled 选择器将匹配文本框,但不匹配该表单中的按钮。

<form>
   <input type="text" disabled="disabled">
   <input type="button">
</form>

② :disabled

E:disabled 匹配(form表单)中处于不可用状态的E元素

:disabled 伪类表示匹配指定范围内的所有不可用UI(也就是html页面、界面)元素。例如,在以下表单结构中,input:disabled 选择器将匹配按钮,但不匹配该表单中的文本框。

<form>
   <input type="text">
   <input type="button" disabled="disabled">
</form>

③ :checked

E:checked 匹配(form表单)中处于选中状态的E元素

菜鸟教程关于:checked的定义和用法:

:checked 选择器匹配每个选中的输入元素(仅适用于单选按钮或复选框)。:checked 伪类表示匹配指定范围内所有可用UI元素。例如,在以下表单结构中,input:checked 选择器将匹配片段中单选按钮,但不匹配该表单中的复选框。

<form>
   <input type="checkbox">
   <input type="=radio" checked="checked">
</form>

注意:checked伪类仅仅适用于单选按钮或则复选框(input type="checkbox",input type="radio"),所以如果在其他类型的元素定义checked伪类,checked会失效

在表单中,这些状态伪类是比较常用的,最常用的是 type=“text” 有 enable 和 disable 两种状态,前者为可写状态,后者为不可状态。另外 type=”radio” 和 type=”checkbox” 有 checked 和unchecked 两种状态。

注意:IE6~8不支持:checked、:enabled、:disabled 这3种选择器

(3) 目标伪类选择器-1个

配被激活的锚点,所应用的样式

E:target{} 选择当前锚点指向的元素。也就是说用来匹配页面的URI中某个标识符的目标(E)元素。

当我们点击锚点链接时,对应id的元素会显示在视口    如下例子div:target{  }

注意:IE8及其以下版本浏览器不支持 E:target 选择器

目标伪类选择器形式如 E:target,它表示选择匹配 E 的所有元素,且匹配元素被相关 URL 指向。该选择器是动态选择器,只有当存在 URL 指向该匹配元素时,样式效果才能够有效。

示例:针对以下文档,当在浏览器地址栏中输入 URL,并附加“#red”,以锚点方式链接到<div id="red">时,该元素会立即显示为红色背景,如下图所示:

<style>
   div:target {
      background: red;
   }
</style>

<div id="red">盒子1</div>
<div id="blue">盒子2</div>

运行结果:

补:目标伪类选择器的应用

一个URI,除了可以直接指向某文档外,还可以通过井号(#)后跟一个锚点或元素 id,来指向页面的某个特定元素。

目标伪类选择器,就是用来匹配页面上被URI的某个标识符指定的目标元素,并为它应用样式。

 

选择器

功能描述

版本

E:target

选择该文档中特定“id”的元素

3

假如在 index.htm 页面中有 3 个<a>元素,id 为catlog、about、contact,它们分别代表一个书签。HTML代码如下:

<a id="catlog" href="#catlog">商品分类</a>
<a id="about" href="#about">联系我们</a>
<a id="contact" href="#contact">关于我们</a>

假如有一个外部链接,<a href="index.htm#contact ">关于我们</a>,就表示链接的目标为index.htm 文档中 id 为contact 的书签。当用户点击该链接时,跳转到index.htm 文档后,页面会向下滚动到 contact 书签的位置。

如果页面内容非常多,常常很难看出链接跳转到了哪个书签的位置。这种情况下,就可以使用目标伪类选择器 :target,为目标元素设置特殊的样式。这样,用户进入页面后,就会一目了然。CSS代码如下:

<style>
   a:target {
     color: #fff;
     background: #fa7a20;
   }
</style>

上述代码为目标超链接元素 a 定义了特殊的背景颜色,用户进入页面后,跳转到任何一个书签时,都可以提醒用户当前所处的书签位置。运行结果如下图所示:
 

(4) 结构性伪类选择器-12个

结构性伪类选择器,也称结构伪类

通过元素的结构关系,来匹配元素

① 选择器:first-child 匹配这个元素父元素的第一个儿子,这个儿子还得符合选择器

:first-child 选择器用于选取属于其父元素的首个子元素的指定选择器。——w3school
也就是说这里面有2个条件:一、该选择器的父元素的首个子元素;二、这个首个子元素正好是该选择器。

比如,E: first-child正确的理解应该是:
只要E元素是它的父级的第一个子元素,就选中。它需要同时满足两个条件,一个是“第一个子元素”,另一个是“这个子元素刚好是E”。

② 选择器:last-child 匹配这个元素父元素的最后一个儿子,这个儿子还得符合选择器

③ 选择器:nth-child(n) 匹配这个元素父元素的第n个儿子,这个儿子还得符合选择器

注意: n从1开始

④ 选择器:nth-last-child(n) 选择器匹配属于其元素的第 N 个子元素的每个元素,不论元素的类型,从最后一个子元素开始计数。n 可以是数字、关键词或公式。也就是说指定每个 选择器(如P元素)匹配同类型中的倒数第n个同级兄弟

注意: n从1开始

💦 扩展:CSS3__nth-last-child(n)选择器

:nth-last-child(n)等价:nth-last-of-type(n)选择器匹配同类型中的倒数第n个同级兄弟元素。n可以是一个数字,一个关键字,或者一个公式。

“:nth-last-child(n)”选择器和前面的“:nth-child(n)”选择器非常的相似,只是这里多了一个“last”,所起的作用和“:nth-child(n)”选择器有所区别,从某父元素的最后一个子元素开始计算,来选择特定的元素。

案例演示⏬

选择列表中倒数第五个列表项,将其背景设置为橙色。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      /* 选择列表中倒数第5个元素 */
      ol > li:nth-last-child(5) {
        background: orange;
      }
    </style>
  </head>
  <body>
    <ol>
      <li>item1</li>
      <li>item2</li>
      <li>item3</li>
      <li>item4</li>
      <li>item5</li>
      <li>item6</li>
      <li>item7</li>
      <li>item8</li>
      <li>item9</li>
      <li>item10</li>
      <li>item11</li>
      <li>item12</li>
      <li>item13</li>
      <li>item14</li>
      <li>item15</li>
    </ol>
  </body>
</html>

 运行结果:

⑤ 选择器:nth-of-type(n) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素。n可以是数字、关键词或公式。

注意: n从1开始

扩展:CSS3__nth-of-type(n)选择器

此选择器用于选择属于特定类型的子元素,例如,p:nth-of-type(2)选择p元素,且被选中的p元素是某父元素的第二个p元素。

:nth-of-type(n)”选择器和“:nth-child(n)”选择器非常类似,不同的是它只计算父元素中指定的某种类型的子元素。当某个元素中的子元素不单单是同一种类型的子元素时,使用“:nth-of-type(n)”选择器来定位于父元素中某种类型的子元素是非常方便和有用的。

在“:nth-of-type(n)”选择器中的“n”和“:nth-child(n)”选择器中的“n”参数也一样,可以是具体的整数,也可以是表达式,还可以是关键词。

示例演示

通过“:nth-of-type(2n)”选择器,将容器“div.wrapper”中偶数段数的背景设置为橙色。

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      .wrapper > p:nth-of-type(2n) {
        background: orange;
      }
    </style>
  </head>
  <body>
    <div class="wrapper">
      <div>我是一个Div元素</div>
      <p>我是一个段落元素</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
      <div>我是一个Div元素</div>
      <p>我是一个段落</p>
    </div>
  </body>
</html>

运行结果:

练习:创建4*4的表格,400*400写边框,第一行背景色为#0ff,最后一行背景色为#ff0,第三行第二列背景色为#faf

table{
  width: 400px;height: 400px;
  border: 2px solid #f00;}
  table td{border: 2px solid #f00;}
  tr:first-child{background-color: #0ff;}
  tr:last-child{background-color: #ff0;}
  tr:nth-child(3) td:not(:nth-child(2)){background-color: #faf;}
}

扩展:结构性伪类选择器都有哪些? 
 

伪类名称定义

:root

选择到根元素
:empty 选择到既不能有文本内容也没有后代元素的元素
:first-child           所有兄弟元素中的第一个
:last-child         所有兄弟元素中的最后一个
:nth-child(n)   所有兄弟元素中的第n个,n是个数字
:nth-last-child(n)    所有兄弟元素中的倒数第n个,n是个数字
:only-child           没有兄弟元素的元素
:first-of-type       所有兄弟元素中同类型的第一个
:last-of-type         所有兄弟元素中同类型的最后一个
:nth-of-type(n)    所有兄弟元素中同类型的第n个,n是个数字
:nth-last-of-type(n)   所有兄弟元素中同类型的倒数第n个,n是数字
:only-of-type         没有同类型兄弟元素

注: :empty、:only-child、:only-of-type,这3个伪类选择器,有的资料里归为结构性伪类选择器,有的拎出来归为一类,私以为属于结构性伪类更为合适。这里摘出来,我做了细分,大家可自行归类。 

(5) 否定伪类选择器-1个

:not(selector){} 符合selector都不选中

PS:IE6-8浏览器不支持否定伪类选择器

◼️可参考资料:菜鸟教程:https://www.runoob.com/cssref/sel-not.html

/* 除了第一个按钮以外,其它按钮的左上和左下圆角都清除 */
.btn:not(:first-child){ 
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}

示例1:尝试运行⑤上面的表格练习:

tr:not(:nth-child(3)) td:not(:nth-child(2)){background-color: #faf;}    

注意:第一二四行除了第二列背景都为#faf,即除了第三行和第二列其他都为#faf

示例2:对form中所有input加边框,但又不想submit也起变化,就可以这样写:

input:not([type=“submit”]) {border: 1px solid red;}

(6) 绝对丁克伪类选择器-1个

:empty{}  匹配内部不能包含任何元素,文本,空格,回车的空元素

:empty一个比较有趣的css伪类,这个伪类会匹配没有内容的元素,作用于该元素,使用 empty 配合 bofore 或者 after 可以达到空元素占位的效果。
 

<!DOCTYPE html>
<html lang="zh-Hans">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>css-> :empty</title>
    <style>
      * {
        padding: 0;
        margin: 0;
        box-sizing: border-box;}

      .contents {
        font-size: 15px;
      }
      /* 使用伪类 empty */
      .contents:empty {
        padding: 20px;
        border: 1px dashed;
      }
      /* 伪类empty 配合伪元素before使用 */
      .contents:empty::before {
        content: "暂无";
        color: gray;
       }
    </style>
  </head>
  <body>
    <div class="contents">this is content</div>
    <div class="contents">this is content</div>
    <!-- 没有内容的元素,作用于empty -->
    <div class="contents"></div>
    <div class="contents">this is content</div>
  </body>
</html>

运行结果:

其实很好懂, 节点元素没有内容,则 empty 生效,使用场景可以用于布局占位,以及配合 before 可以给占位默认值,在表格中很实用,某条表格数据值为空时,可以使用该伪类给默认值

(7) 独生子女伪类选择器-1个

:only-child{} 匹配属于其父元素的唯一子元素

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>菜鸟教程(runoob.com)</title>
    <style>
      p:only-child {
        background: #ff0000;
      }
    </style>
  </head>
  <body>
    <div><p>This is a paragraph.</p></div>
    <div>
      <span>This is a span.</span>
      <p>This is a paragraph.</p>
    </div>
    <p>
      <b>注意:</b> Internet Explorer 8以及更早版本的浏览器不支持
      :only-child选择器.
    </p>
  </body>
</html>

运行结果:

(8) 语言伪类选择器-1个

根据语言选择元素(lang 属性的值),该伪类了解即可

:lang(language) {} 用来匹配使用指定语言的元素。

示例:选择带有以 "en" 开头的 lang 属性值的每个 <p> 元素,并设置其样式:

<!DOCTYPE html>
<html>
  <head>
    <style>
      p:lang(en) {
        background: yellow;
      }
    </style>
  </head>
  <body>
    <p>我是唐老鸭。</p>
    <p lang="en">I live in Duckburg.</p>
    <p><b>注释:</b>对于在 IE8 中工作的 :lang,必须声明 DOCTYPE。</p>
  </body>
</html>

运行结果:

4.伪元素选择器—内容生成

(1) 伪元素选择器的定义与作用

CSS 伪元素是用来添加一些选择器的特殊效果。

使用css动态的在页面上生成html伪元素默认情况下,添加了一个行内元素

::before  或者  :before

::after     或者  :after

添加的伪元素的内容使用content属性

◼️ 伪元素选择器都有哪些?6个

::first-letter  选择元素中第一字母

::first-line   选择元素中第一行(只能用于块级元素)

③ ::after    给元素动态创建最后一个子元素

④ ::before 给元素动态创建第一个子元素

⑤ ::placeholder 用于设置输入框或文本域中placeholder属性设置的文字的样式

⑥ ::selection 用于设置被鼠标选中的文字的样式

⑦ ::backdorp 改变全屏模式下的背景颜色,全屏模式的默认颜色为黑色

番外:CSS伪元素可以用来干啥?

番外:CSS伪元素和伪类详解 

扩展:::before:before的区别?

1、::before是什么?有什么作用?

在css中,::before 是一个伪类元素,代表生成的内容元素,表示相应元素的可抽象样式的第一个子元素,即:所选元素的第一个子元素


利用::before可以把需要插入的内容插入到元素的其他内容之前,并且默认内联显示。::before需要使用content属性来指定内容的值。例:
 

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title></title>
    <style>
      /* 在链接之前添加一颗心 */
      a::before {
        content: "♥";
      }
      /* a标签水平居中 */
      a{
        display: block;
        width: 150px;
        margin: 0 auto;
        /* text-decoration: none; */
      }
    </style>
  </head>
  <body>
    <a href="http://www.juqiuos.cn">聚求科技官网</a>
  </body>
</html>

运行结果:



我们来看一个简单的示例:

假设你有一个带有一些文本的blockquote。你可以使用::before在实际文本之前插入内容,比如:一些花哨的引号。引号将显示在页面上,但不会添加到DOM中的blockquote中。
 

<blockquote>
   你目前的情况并不能确定你可以去哪里; 他们只是决定你从哪里开始。- Nido Qubein
</blockquote>

以下代码段将使用块引用添加几个花哨的引号::before。引号将在引用文本之前的blockquote中添加,并与其内联。

blockquote :: before {
  content:“\ 201C” ;  /*样式引用*/
  color:deepPink;
  font-size: 3em;
  position: relative;
  top: 20px;
}

content引用是通过转义其在属性内定义的Unicode值。这就是通常通过CSS表示和添加字形的方式。

我们来看看运行效果:

由于使用伪元素插入的内容未插入到DOM,因此通常无法使用浏览器的开发者工具查看和检查插入的内容。但是,Chrome 32+和Firebug for Firefox允许你查看伪元素在DOM中的位置,通过选择它,你可以在CSS面板中查看与其相关联的样式。在Chrome的开发工具中检查上述演示会显示以下结果:
 

可以看出,添加有::before的内容与blockquote内的其他内容内联并位于其之前。

伪元素可用于插入几乎任何类型的内容,包括字符(如上所述),文本字符串和图像。例如,以下是::before具有有效内容的所有有效声明:

.element :: before {
  content:url(path/to/image.png); /*图像,例如,图标*/
}

.element :: before {
  content:“注意:”; /*一个字符串*/
}

.element :: before {
  /*也算作一个字符串。转义Unicode会将其渲染为字符*/
  content:“\ 201C”;
}

注:使用伪元素插入的图像无法调整大小,它们会按原样插入,因此你必须在使用前调整图像大小。

2、::before:before的异同点

相同点:

① 伪类对象,用来设置对象前的内容

② ::before和:before写法是等效的

不同点:

① :beforo是Css2的写法,::before是Css3的写法

② :before的兼容性要比::before好 ,不过在H5开发中建议使用::before比较好

说明:

① 伪类元素要配合content属性一起使用

② 伪类元素是css渲染层加入的,不能通过js来操作

③ 伪类对象特效通常通过:hover伪类样式来激活
 

.test:hover::before {
   /* 这时animation和transition才生效 */
}

扩展:伪元素选择器::placeholder{ }

伪元素::placeholder可以选择一个表单元素的占位文本,它允许开发者和设计师自定义占位文本的样式。

<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
    <style>
      /*  input::-webkit-input-placeholder{}  ————这个伪元素是专有的,并且特定于WebKit和Blink,只被WebKit和Blink支持 */
      input::placeholder {
        color: red;
        font-size: 1.2em;
        font-style: italic;
      }
    </style>
  </head>
  <body>
    <input type="text" placeholder="我是红色的!" />
  </body>
</html>

运行结果:


注意:在使用了::placeholder伪元素的选择器中,仅有小一部分CSS属性可以使用。

(2) 伪元素内容生成,可以解决的问题

使用伪元素解决外边距溢出、清除浮动解决高度塌陷

利用伪元素解决外边距溢出问题

    <div id="d2">

      <div id="d3"></div>

    </div>

方案一:给父元素添加一个大儿子或是一个小儿子,空的<table></table>

/*上外边距溢出:添加大儿子  下外边距溢出:添加小儿子 */

方案二:外边距溢出,使用伪元素,在父元素的内容区之前或之后生成一个空的table  ——推荐!

/*上外边距溢出:利用::before  下外边距溢出:利用::after伪元素 */

/* 解决上外边距溢出 */
#d2::before{
  display: table;
  content: "";
}

/* 解决下外边距溢出 */
#d2::before{
  display: table;
  content: "";
}

利用伪元素清除浮动,解决高度坍塌问题

方案一:给父元素添加一个小儿子,这个小儿子是空的div并且设置clear:both样式

方案二:利用::after伪元素 ——推荐!

/*利用::after伪元素,解决高度坍塌问题*/

.clearfix::after {
  display: block;
  content: "";
  clear: both;
}

补:添加.clearfix类的原理

1、在IE6, 7zoom: 1会触发hasLayout,从而使元素闭合内部的浮动。

2、在标准浏览器下,.clearfix:after这个伪类会在应用到.clearfix的元素后面插入一个clear: both的块级元素,从而达到清除浮动的作用。

3、在需要清除浮动的时候,只要写一个.clearfix就行了,然后在需要清浮动的元素中 添加clearfix类名就好了。.clearfix为父元素类选择器


添加class以clearfix命名的after伪元素:推荐指数:☆☆☆☆☆ 👇

👉 优点:设置公共类,减少css代码,直接套用

👉 缺点:clearfix的
class需要添加zoom: 1

clearfix这个class需要添加zoom: 1(触发haslayout),才能支持IE6和IE7浏览器,这是最推荐使用的一种方式。但是在IE6IE7中不支持 :after伪类。如果想在IE6IE7中显示开启hasLayout,需要给clearfix这个class添加设置zoom:1

.clearfix:after{
  /*转换为一个块元素*/
  display: block;
  content: "";
  /*清除两侧的浮动*/
  clear: both;
}

/*在ie6、ie7中不支持after伪类处理*/
.clearfix{
  zoom: 1;
} 

⏬ 伪元素与伪类有何区别?

番外:CSS伪元素可以用来干啥?

番外:CSS伪元素和伪类详解

① 伪类本质上是为了弥补常规CSS选择器的不足,以便获取到更多信息;

② CSS3中伪类和伪元素的语法不同;伪类  :link  :hover ,伪元素  ::before    ::after

注意:在CSS3规范中,为了区别伪元素和伪类,CSS3建议伪类用单冒号“:",伪元素用双冒号"::"

③ 伪元素本质上是创建了一个有内容的虚拟容器;

④ 可以同时使用多个伪类,而只能同时使用一个伪元素;

⑤ 伪类和伪元素的根本区别在于:它们是否创造了新的元素,这个新创造的元素就叫  "伪无素" 。

伪类的操作对象是文档(DOM)树中已有的元素,而伪元素则创建了一个文档(DOM树树(DOM)外的元素。因此,伪类与伪元素的区别在于:有没有创建一个文档(DOM)树之外的元素。

👉 伪元素/伪对象:不存在在DOM文档中,是虚拟的元素,是创建新元素。 这个新元素(伪元素)  是某个元素的子元素,这个子元素虽然在逻辑上存在,但却并不实际存在于文档树中。

👉 伪类:存在DOM文档中,(无标签,找不到,  只有符合触发条件时才能看到 ),  逻辑上存在但在文档树中却无须标识的“幽灵”分类。

⑥ 因为伪类是类似于添加类所以可以是多个,而伪元素在一个选择器中只能出现一次,并且只能出现在末尾。

◼️ 注意:

👉 伪对象要配合content属性一起使用
 

👉 伪对象不会出现在DOM中,所以不能通过js来操作,仅仅是在 CSS 渲染层加入

👉 伪对象的特效通常要使用:hover伪类样式来激活


 🆕【后文传送门】👉 css弹性布局、CSS hack_08


  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

儒雅的烤地瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值