伪元素使用详解(超详细版)

Posted 杭州-前端-求内推

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了伪元素使用详解(超详细版)相关的知识,希望对你有一定的参考价值。

1. :after ::after 单双引号的区别

其实无论是单引号还是双引号,他们的本质都是伪元素,只不过因为伪类使用的也是单引号,同时他们的写法类似,写法也相仿,但实际上 css3 为了区分两者,已经明确规定了伪类用一个冒号来表示,而伪元素则用两个冒号来表示。

但因为兼容性的问题,所以现在大部分还是统一的单冒号,但是抛开兼容性的问题,我们在书写时应该尽可能养成好习惯,区分两者。

2.使用伪元素需要注意的问题

  • 在内容模块中提到,伪元素如果没有设置“content”属性,伪元素是无用的。

  • 使用伪元素插入的内容在页面的源码里是不可见的,只能在css里可见。

  • 插入的元素在默认情况下是内联元素(或者,在html5中,在文本语义的类别里)。因此,为了给插入的元素赋予高度,填充,边距等等,你通常必须显式地定义它是一个块级元素。

  • 还要注意的是典型的 CSS 继承规则适用于插入的元素。例如,你有字体系列黑体,宋体,无衬线字体应用到 body 元素里,然后伪元素会像其他元素一样继承这些字体系列。

  • 伪元素不会自然继承自父元素(如 padding margins)的样式。

  • 你的直觉是 :before:after 伪元素可能是插入的内容会被注入到目标元素的前或后注入。其实不是这样的,注入的内容将是有关联的目标元素的子元素,但它会被置于这个元素的任何内容的“前”或“后”。来看下面这样一个栗子:

<head>
    <title></title>
    <style type="text/css">
        p.box    
          width: 300px;   
          border: solid 1px black;   
          padding: 20px;   
           

        p.box:before    
          content: "#";   
          border: solid 1px black;   
          padding: 2px;   
          margin: 0 10px 0 0;   
        
    </style>
</head>
<body>
<p class="box">Other content.</p>  
</body>

效果展示

外面的盒子是这个段落。围绕有散列符号的边框表示伪元素的边界。所以,不是插入“before”到段落,而是伪元素被置于到此段落的“Other content”的前面。

  • 记住伪元素必须是被应用元素的子元素。

  • 伪元素不会出现在DOM中,这些元素不是真正的元素。因此,它们不是可用的。所以,不要使用伪元素生成内容,是你的网页的可用性和可访问性的关键。

  • 另外一件需要记住的是,开发工具,例如火狐,不要用伪元素显示内容。所以,如果使用了,伪元素会造成难以维护和调试缓慢。

3.使用 after 伪类清除浮动

使用 after 伪类清除浮动也是目前清除浮动的主流方法,其使用方式如下:

未清除浮动之前:

<head>
    <title></title>
    <style type="text/css">
        .container
            border: 1px solid;
        
        .subCon
            width: 100px;
            height: 100px;
            background-color: yellow;
            float: left;
        
    </style>
</head>
<body>
    <div class="container">
        <div class="subCon"></div>
    </div>
</body>

效果展示。可以看出此时因为给子级添加了浮动,所以父级并没有包住子元素。

使用 after 伪类清除浮动:

<head>
    <title></title>
    <style type="text/css">
        .container
            border: 1px solid;
        

        .clear:after
            content: "";
            display: block;
            clear: both;
        
        .subCon
            width: 100px;
            height: 100px;
            background-color: yellow;
            float: left;
        
    </style>
</head>
<body>
    <div class="container clear">
        <div class="subCon"></div>
    </div>
</body>

效果展示。但是问题又来了,使用 after 伪元素在元素末尾添加内容在 IE6 和 IE7 下是不兼容的。

这个时候就要使用到 zoom 缩放来触发 IE 下的 haslayout ,使元素根据自身内容计算宽高。

要注意:在 IE6,IE7 下,父级元素有宽高是不用清浮动的。

兼容性处理:

<head>
    <title></title>
    <style type="text/css">
        .container
            border: 1px solid;
        

        /*在这里请浮动*/
        .clear:after
            content: "";
            display: block;
            clear: both;
        

        /*在这里进行兼容性处理*/
        .clear
            *zoom:1;
        
        .subCon
            width: 100px;
            height: 100px;
            background-color: yellow;
            float: left;
        
    </style>
</head>
<body>
    <div class="container clear">
        <div class="subCon"></div>
    </div>
</body>

效果展示

注意:是在父级上使用 after 伪类。

4.使用伪元素插入文本内容

<head>
    <title></title>
    <style type="text/css">
        p.box    
          width: 300px;   
          border: solid 1px black;   
          padding: 20px;   
           

        p.box:before    
          content: "#";   
          border: solid 1px black;   
          padding: 2px;   
          margin: 0 10px 0 0;   
        
    </style>
</head>
<body>
<p class="box">Other content.</p>  
</body>

效果展示

5.使用伪元素插入非文本内容

/* 使用伪元素插入图片 注意:url里面的内容没有引号*/
p:before
        content: url(image.jpg);

6.给一段文字打引号

效果展示&&源代码

7.参考文献

参考文献一&&参考文献二

以上是关于伪元素使用详解(超详细版)的主要内容,如果未能解决你的问题,请参考以下文章

伪元素使用详解(超详细版)

CSS6大种选择器(超详细!!!!!!)

指针的这些知识你知道吗?C语言超硬核指针进阶版3w+字详解+指针笔试题画图+文字详细讲解

Python 元组tuple详解(超详细)

超详细,多图文介绍redis集群方式并搭建redis伪集群

CSS 伪元素的用法和使用详解