css 里面的 content 属性你有注意过吗?

简介: content 属性是用来在元素中插入内容的,它只能用在 ::before 和 ::after 这两个伪元素上,它的值可以是一个字符串,也可以是一个图片,还可以是一个计数器。

content属性是用来在元素中插入内容的,它只能用在::before::after这两个伪元素上,它的值可以是一个字符串,也可以是一个图片,还可以是一个计数器。

简单认识content属性

content属性的值可以是一个字符串,也可以是一个图片,还可以是一个计数器。

::before {
   
    content: "hello world"; /* 字符串 */
    content: url(./img.png); /* 图片 */
    content: counter(list); /* 计数器 */
}

当然content的属性值还有很多,比如attr()open-quoteclose-quote等等,除了这些,还有一些特殊的值,比如nonenormal
inherit等等。

content属性的值

string

string表示插入一个字符串。

::before {
   
    content: "hello world";
}

函数

url()

url表示插入一个图片。

::before {
   
    content: url(./img.png);
}

url函数的参数可以是一个图片的路径,也可以是一个base64编码的图片,最终会将图片插入到元素中。

参考:url()

counter()

counter表示插入一个计数器。

::before {
   
    content: counter(list);
}

counter函数的参数可以是一个计数器的名称,或者是一个计数器的名称和一个样式,最终会将计数器插入到元素中。

参考:counter()

attr()

attr表示插入一个属性值。

::before {
   
    content: attr(data-name);
}

attr函数的参数可以是一个属性的名称,最终会将属性的值插入到元素中。

参考:attr()

element()

element表示插入一个元素。

::before {
   
    content: element(#id);
}

element函数的参数可以是一个元素的选择器,最终会将元素插入到元素中。

参考:element()

leader()

leader表示插入一个前导符号。

::before {
   
    content: leader('.') target-counter(attr(href url), page);
}

注意:leader函数查阅过相关资料,w3c中有说明,但是在实际使用中,没有任何一个浏览器支持,所以这里就不做详细说明了。

可选关键字

none

nonecontent属性的默认值,它表示不插入任何内容。

::before {
   
    content: none;
}

normal

normal表示插入一个空字符串。

::before {
   
    content: normal;
}

注意:在beforeafter伪元素中,normalnone的效果是一样的。

open-quote

open-quote表示插入一个起始引号。

::before {
   
    content: open-quote;
}

close-quote

close-quote表示插入一个结束引号。

::before {
   
    content: close-quote;
}

no-open-quote

no-open-quote表示不插入一个起始引号。

::before {
   
    content: no-open-quote;
}

no-close-quote

no-close-quote表示不插入一个结束引号。

::before {
   
    content: no-close-quote;
}

inherit

inherit表示继承父元素的content属性值。

::before {
   
    content: inherit;
}

可以有多个值

content属性可以有多个值,多个值之间用空格分隔。

::before {
   
    content: url("./image.png") "hello" "world" attr(data-name);
}

content 属性的作用

上面疯狂 API,终于可以说说content属性的作用了。

插入内容

content属性可以插入内容,比如插入一个图片,插入一个计数器,插入一个属性值,插入一个元素等。

很明显我这里说的都是废话,因为大家都知道如果::before::after伪元素不设置content属性,那么它们就不会有任何效果。

但是我想大家一般都是直接设置一个空字符串,只是为了让伪元素生效,而不是真正的插入内容。

我要说的是动态插入内容,比如插入一个计数器,插入一个属性值,插入一个元素等。

没有想过可以通过content属性动态插入内容的,可以看看下面的例子。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>content</title>
    <style>
        .box {
    
            counter-increment: box;
        }

        .box::before {
    
            content: counter(box);
        }
    </style>

</head>
<body>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</body>
</html>

上面的例子中,我们通过counter-increment属性给每个.box元素设置一个计数器,然后通过content属性插入计数器的值。

当然这并不能惊艳到你,因为这个功能直接用ulli就可以实现,像这种小功能,ulli就够用了。

那么如果在伪元素中直接插入一个dom元素呢?

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>content</title>
    <style>
        .box::before {
    
            content: element(#element);
        }
    </style>

</head>
<body>
<div class="box"></div>
<div id="element">
    <div class="box">666</div>
</div>
</body>
</html>

这个就点到为止,content属性还可以插入一些其他的内容,比如插入一个图片,插入一个属性值等,css的世界靠的是想象力。

防止元素被选中

content属性可以防止元素被选中,比如下面的例子。

通过content属性插入的内容是不会被选中的,不仅不会被用户选中,也不会被浏览器的默认行为选中。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>content</title>
    <style>
        .box::before {
    
            content: "hello";
        }
    </style>

</head>
<body>
<div class="box">world</div>
</body>
</html>

上面的例子中,我们通过content属性插入了一个hello字符串,这里我们只能选中world,而不能选中hello

在部分浏览器中,如果我们做鼠标拖拽的时候,会默认选中文本,然后会弹出一个新的窗口,简直恶心的不行,这个时候我们可以通过content属性来防止这种情况。

<style>
[data-text]::before {
    
    content: attr(data-text);
}
</style>
 <div data-text="这里放内容"></div>

这样就完美解决了这个问题。

生成装饰性的内容

content属性可以生成装饰性的内容,最典型的例子就是iconfont就是通过content属性来生成的。

在使用iconfont的时候,我们需要在css中添加一个font-family属性,然后在html中添加一个class,然后通过content属性来插入一个unicode编码。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>content</title>
    <style>
        .iconfont {
    
            font-family: "iconfont" !important;
            font-size: 16px;
            font-style: normal;
            -webkit-font-smoothing: antialiased;
            -moz-osx-font-smoothing: grayscale;
        }

        .iconfont:before {
    
            content: "\e6a1";
        }
    </style>

</head>
<body>
<div class="iconfont"></div>
</body>
</html>

注意:这里的效果不成立,因为我没有引入iconfont的字体文件,这个可以自己去iconfont官网下载dome查看源码和效果。

总结

content属性是一个非常强大的属性,它可以用来插入一些内容,也可以用来防止元素被选中,还可以用来生成装饰性的内容,这个属性的用法非常多,可以说是一个非常强大的属性。

目录
相关文章
|
2月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
transition过渡属性 早期在Web中要实现动画效果,都是依赖于JavaScript或Flash来完成。 但在CSS3中新增加了一个新的模块transition,它可以通过一些简单的CSS事件来触发元素的外观变化, 让效果显得更加细腻。简单点说,就是通过鼠标经过、获得焦点,被点击或对元素任何改变中触发, 并平滑地以动画效果改变CSS的属性值。 在CSS中创建简单的过渡效果可以从以下几个步骤来实现: 在默认样式中声明元素的初始状态样式; 声明过渡元素最终状态样式,比如悬浮状态; 在默认样式中通过添加
211 1
|
2月前
|
前端开发 JavaScript 算法
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
transform变形 css3在原来的基础上新增了变形和动画相关属性,通过这些属性可以实现以前需要大段JavaScript才能实现的 功能。 CSS3的变形功能可以对HTML组件执行位移、旋转、缩放、倾斜4种几何变换,这样的变换可以控制HTML组件 呈现出丰富的外观。 借助于位移、旋转、缩放、倾斜这4种几何变换,CSS3提供了transition动画。 transition动画比较简单,只要指定HTML组件的哪些CSS属性需要使用动画效果来执行变化,并指定动画时间,就可保证动画播放。 比transitio
153 1
|
2月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
126 1
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
385 1
|
2月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
继承 我们的CSS中很多的属性也是可以继承的,其中相当一部分是跟文字的相关的,比如说颜色、字体、字号。 当然还有一部分是不能继承的。 例如边框、内外边距。 层叠 层叠是CSS的核心机制。 层叠的工作机制: 当元素的同一个样式属性有多种样式值的时候,CSS就是靠层叠机制来决定最终应用哪种样式。 层叠规则: 层叠规则一:找到应用给每个元素和属性的声明。 说明:浏览器在加载每个页面时,都会据此查找到每条CSS规则, 并标识出所有受到影响的HTML元素。
107 1
|
前端开发
css的渐变属性linear-gradient
css的渐变属性linear-gradient
|
前端开发
CSS属性:盒子模型
CSS属性:盒子模型
135 0
|
前端开发
CSS属性
CSS属性
148 0
|
前端开发
CSS 浮动属性讲解和使用
本文介绍了CSS中的浮动(float)属性,包括其基本功能、属性选项及其在网页布局中的应用。浮动使元素脱离文档流,向左或右排列,周围元素随之调整。文章还详细讲解了清除浮动的方法,如使用clear属性、设置父元素高度、利用overflow属性、伪元素等,以解决因浮动导致的布局问题。最后,强调了浮动在创建复杂布局时的作用,并预告后续内容。
327 2
|
前端开发
CSS transition过渡属性详解
本文介绍了CSS中`transition`属性的作用、用法及实例。`transition`用于在元素属性变化时添加平滑过渡动画,通过设置`transition-property`、`transition-duration`、`transition-timing-function`和`transition-delay`等属性值,可以精细控制过渡效果。文末提供了HTML示例代码,展示了如何使用`transition`实现鼠标悬停时背景颜色的平滑变化。
567 1