CSS中content属性的妙用

前言

本文讲解CSS中使用频率并不高的content属性,通过多个实用的案例,带你由浅入深的掌握content的用法,让代码变得更加简洁、高效。

定义

W3school中这样定义:

content 属性与 :before 及 :after 伪元素配合使用,来插入生成内容。
该属性用于定义元素之前或之后放置的生成内容。默认地,这往往是行内内容,不过该内容创建的框类型可以用属性 display 控制。

在前端日常开发中,content属性使用频率并不高,所以开发者一般对它的理解并不深入,通常会在清除浮动、字体图标时偶尔使用。下面通过各种案例,来一起看看content的妙用。

案例

1. 清除浮动

<!--css-->
.left {float: left}
.right {float: right}
.clear:after {
    content: '';
    clear: both;
    display: block;
}

<!--html-->
<div class="container clear">
    <div class="left">&#x5DE6;</div>
    <div class="right">&#x53F3;</div>
</div>

父元素 .container中两个子元素 .left.right浮动后会脱离文档流,无法撑起容器,造成 .container高度为 0。使用伪元素 :after清除浮动,三个属性缺一不可:

  • content: '';通过 :after添加一个内容为空的伪元素。
  • clear: both;伪元素 :after两侧浮动清除。
  • dispaly: block;设置块元素,因为 clear只对块元素有效。

说到 clear属性,使用最多的就是 clear: bothleft/right用的却很少,因为 both已经包含 left/right特性,简单直接还有效。想更加深入了解 clear属性,可以看看张鑫旭大神的准确理解CSS clear:left/right的含义及实际用途

2. 小三角的气泡窗口

<!--css-->
.box {
    width: 200px;
    height: 100px;
    border-radius: 5px;
    background: #fff;
    position: relative;
}
.box:after {
    content: '';
    position: absolute;
    bottom: -20px;
    right: 20px;
    width: 0;
    height: 0;
    border-top: 10px solid #fff;
    border-bottom: 10px solid transparent;
    border-left: 10px solid transparent;
    border-right: 10px solid transparent;
}

<!--html-->

效果:

CSS中content属性的妙用

配合伪元素 :after,实现了一个右下角带倒三角指向性的气泡窗口。通过调整 border各边的颜色和绝对定位位置,可以绘制出指向不同的气泡窗口,只用一个 div标签实现,是不是既简洁又美观。可能你会想到这是伪元素 :after的效果,和 content属性无关,实际上去掉 content:after是不生效的。

CSS中content属性的妙用

3. 字体图标

第一种是浏览器自带的特殊字符:

<!--css-->
.music:before {
    content: '\266C';
    color: red;
}

<!--html-->
<span class="music">&#x6674;&#x5929;-&#x5468;&#x6770;&#x4F26;</span>

效果:

CSS中content属性的妙用

浏览器支持很多字体图标,如:天气☀、雪花❄、三叶草☘、太极☯等等有趣的字符。参考网页HTML特殊字符编码对照表

第二种是外部引入字体图标,如Bootstrap中的Glyphicon字体图标:

<link rel="stylesheet" href="../static/css/bootstrap.min.css">

<!--html-->

效果:

CSS中content属性的妙用

这里为什么没有写CSS样式呢,因为bootstrap.min.css中已经定义好了glyphicon-heart的样式,直接在官网上查看:

CSS中content属性的妙用

需要说明的是,本地引入bootstrap.min.css后,还需要引入字体图标库glyphicons-halflings-regular.woff2,字体图标才能生效。

<!--bootstrap.min.css-->

<!--format 属性是帮助浏览器识别字体的-->
@font-face {
    font-family: 'Glyphicons Halflings';
    src: url(../fonts/glyphicons-halflings-regular.eot);
    src: url(../fonts/glyphicons-halflings-regular.eot?#iefix) format('embedded-opentype'),
    url(../fonts/glyphicons-halflings-regular.woff2) format('woff2'),
    url(../fonts/glyphicons-halflings-regular.woff) format('woff'),
    url(../fonts/glyphicons-halflings-regular.ttf) format('truetype'),
    url(../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular) format('svg')
}

按照上述url路径,将glyphicons-halflings-regular.woff2放到如下目录结构中即可。

CSS中content属性的妙用

4. 无内容提示

<!--css-->
<!--:empty为空时匹配-->
div:empty:after {
    content: '&#x6682;&#x65E0;&#x6570;&#x636E;';
    color: red;
}

<!--html-->
<div>&#x6709;&#x5185;&#x5BB9;&#x6570;&#x636E;</div>

效果:

CSS中content属性的妙用

当元素内容为空时,通过 content内容”暂无数据”进行展示。可使用场景:后台接口返回数据后,插入到页面DOM中,当后台返回数据为空时,通过CSS直接提示暂无数据,不需要使用JavaScript处理。

一个有趣的现象, content内容”暂无数据”无法被选中,这是因为伪元素用于创建一些不在文档树中的元素,虽然用户可以看到这些文本,但是这些文本实际上不在文档树中。

5. 面包屑菜单

<!--css-->
ul li {
    display: inline-block;
    font-weight: bold;
}

ul li:not(:last-child):after {
    content: '\276D';
    margin: 5px;
}

<!--html-->
<ul>
    <li>&#x9996;&#x9875;</li>
    <li>&#x5546;&#x54C1;</li>
    <li>&#x8BE6;&#x60C5;</li>
</ul>

效果:

CSS中content属性的妙用

又是一个 content值为特殊字符的例子,配合伪类和伪元素完成面包屑菜单。

6. 加载中…动画

<!--css-->
.loading:after {
    content: ".";
    animation: loading 2s ease infinite;
}

@keyframes loading {
    33% {
        content: "..";
    }
    66% {
        content: "...";
    }
}

<!--html-->
<p class="loading">&#x52A0;&#x8F7D;&#x4E2D; </p>

效果:

CSS中content属性的妙用

animation动画值含义:

  • loading:animation-name,规定需要绑定到选择器的 keyframe 名称为loading。
  • 2s:animation-duration,规定完成动画所花费的时间2秒。
  • ease:animation-timing-function,规定动画的速度曲线,先慢中快后慢。
  • infinite:animation-iteration,规定动画应该播放的次数为无限次。

通过 animation动画完成33%、66%时与 content内容配合,实现动态”加载中…”的效果。

7. 插入图片


.loading:before {
    content: url("../static/img/loading.gif");
    vertical-align: middle;
}

 加载中...

效果:

CSS中content属性的妙用

除了插入字体图标, content还可以使用 url()方法插入图片,和 background属性类似可以使用 url指定一个图片路径,不同的是 content属性无法控制图片大小,使用条件有限。

8. attr属性内容生成

<!--css-->
.web:after {
    content: "&#xFF08;"attr(href)"&#xFF09;"
}

<!--html-->
<a class="web" href="https://echeverra.cn">echevera</a>

效果:

CSS中content属性的妙用

content值也可以是 attr()方法,用来获取指定属性的值,可插入到指定的位置。

9. 半边特效

<!--css-->
span{
    font-family: sans-serif;
    font-size: 30px;
    font-weight: bold;
    position: relative;
    color: green;
}
span:before{
    content: attr(text);
    color: orange;
    position: absolute;
    left: 0;
    top: 0;
    width: 50%;
    overflow: hidden;
}

<!--html-->
<span text="echeverra">echeverra</span>
<span text="&#x535A;">&#x535A;</span>
<span text="&#x5BA2;">&#x5BA2;</span>

效果:

CSS中content属性的妙用

半边特效是通过 attr()方法获取 text属性值,属性值与其内容相同,巧妙的设置绝对定位,只显示一半并覆盖了原文本内容,实现文字半边特效,是不是还挺炫酷的。需要注意的是有些 font-family字体会有文字无法重合的问题。

10. 文字引号

<!--css-->
span {
    quotes: '&#x201C;' '&#x201D;';
}
span:before {
    content: open-quote;
}
span:after {
    content: close-quote;
}

<!--html-->
<p>&#x9C81;&#x8FC5;&#x8BF4;&#x8FC7;&#xFF1A;<span>&#x771F;&#x6B63;&#x7684;&#x52C7;&#x58EB;,&#x6562;&#x4E8E;&#x76F4;&#x9762;&#x60E8;&#x6DE1;&#x7684;&#x4EBA;&#x751F;,&#x6562;&#x4E8E;&#x6B63;&#x89C6;&#x6DCB;&#x6F13;&#x7684;&#x9C9C;&#x8840;&#x3002;</span></p>

效果:

CSS中content属性的妙用

利用元素的 quotes属性指定双引号,使用 contentopen-quote属性值设置开口引号, close-quote属性值设置闭合引号,当然 quotes也可以指定其他符号。

11. 添加章节数

<!--css-->
ul{
    counter-reset: section;
}
li{
    list-style-type: none;
    counter-increment: section;
}
li:before{
    content: counters(section, '-') '.';
}

<!--html-->
<ul>
    <li>&#x7AE0;&#x8282;&#x4E00;</li>
    <li>&#x7AE0;&#x8282;&#x4E8C;
        <ul>
            <li>&#x7AE0;&#x8282;&#x4E8C;&#x4E00;</li>
            <li>&#x7AE0;&#x8282;&#x4E8C;&#x4E8C;</li>
            <li>&#x7AE0;&#x8282;&#x4E8C;&#x4E09;</li>
        </ul>
    </li>
    <li>&#x7AE0;&#x8282;&#x4E09;</li>
    <li>&#x7AE0;&#x8282;&#x56DB;</li>
    <li>&#x7AE0;&#x8282;&#x4E94;
        <ul>
            <li>&#x7AE0;&#x8282;&#x4E94;&#x4E00;</li>
            <li>&#x7AE0;&#x8282;&#x4E94;&#x4E8C;</li>
        </ul>
    </li>
    <li>&#x7AE0;&#x8282;&#x516D;</li>
</ul>

效果:

CSS中content属性的妙用

这里用到了 counter计数器方法,涉及到 counter-resetcounter-incrementcounter()counters()几个属性。

  • counter-reset用来指定计数器名称,例子中命名为 section,同时可以指定计数器开始计数的数值,如指定开始计数数值为1: counter-reset: section 1;,不指定默认为 0
  • counter-increment用来指定计数器每次递增的值,如指定计数器递增值为2: counter-increment: section 2;,默认值为1, counter-increment只要指定了 counter-reset,对应的计数器的值就会变化。
  • counter(name, style)用来输出计数器的值。其中 name为计数器名称, style可选参数,默认为阿拉伯数字,也可指定 list-style-type支持的值,如罗马数字 lower-roman
  • counters(name, strings, style)用来处理嵌套计数器,同样是输出计数器的值,和 counter()不同的是多了一个 strings参数,表示子序号的连接字符串。例如 1.1string就是 '.'1-1就是 '-'

关于计数器的详细的教程,同样可以参考CSS大神张鑫旭的CSS counter计数器(content目录序号自动递增)详解

12. 计算checkbox选中数

<!--css-->
form {
    counter-reset: count 0;
}

input[type="checkbox"]:checked {
    counter-increment: count 1;
}

.result:after {
    content: counter(count);
}

<!--html-->
<form>
    <input type="checkbox" id="javaScript">
    <label for="javaScript">javaScript</label>
    <input type="checkbox" id="PHP">
    <label for="PHP">PHP</label>
    <input type="checkbox" id="Python">
    <label for="Python">Python</label>

    <div class="result">&#x5DF2;&#x9009;&#xFF1A;</div>
</form>

效果:

CSS中content属性的妙用

巧妙运用计数器配合 :checked伪类,选中计数器增加1,取消选中减1,用CSS实现动态计数功能。

总结

总结content属性值可以为以下几种:

  • string字符串,最常见的,对应案例:清除浮动、小三角的气泡窗口、字体图标、无内容提示、面包屑菜单、加载中…动画。
  • url()方法,对应案例:插入图片。
  • attr()方法,对应案例:attr属性内容生成、半边特效。
  • quotes引号,对应案例:文字引号。
  • counter()方法,计数器功能,对应案例:添加章节数,计算checkbox选中数。

尽管使用javaScript同样可以实现上述的大部分功能,灵活性也更高,但使用CSS的好处就是可以极大地简化开发,不占用JS主线程,提升web的性能。

其实content的案例远不止于此,在查阅相关资料的同时,我还见识到了另外一些神奇的用法,当然原理大致相同,本文的案例只是尽可能的带你了解content不为人知的一面,打开一个全新的世界,让你举一反三。如果能在实际开发中运用上,那就更Nice了,希望能对大家有所帮助。

你学”废”了么?

文章首发于我的博客
https://echeverra.cn

,原创文章,转载请注明出处。

CSS中content属性的妙用

欢迎关注我的微信公众号,一起学习进步!不定时会有资源和福利相送哦!

Original: https://www.cnblogs.com/echeverra/p/15108332.html
Author: echeverra
Title: CSS中content属性的妙用

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/582362/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 机器学习:正态方程 python实现

    前言 一、算法介绍 二、核心算法 1. 公式 2.python实现 总结 前言 使用python简单实现机器学习中正态方程算法。 一、算法介绍 与梯度下降算法相比,正态方程同样用于…

    Linux 2023年6月7日
    0101
  • 编程模式-表驱动编程

    刚开始编程时,往往会碰到一些根据不同条件执行不同功能的情况,通常都是采用if-else或者switch-case的方式,如果有很多的情况需要区分,则会有很多的 else if 或者…

    Linux 2023年6月7日
    0118
  • 读《软件测试的艺术》——第一章

    《软件测试的艺术》作为元老级别的测试理论书籍,在业内非常经典且有口皆碑,书中提出的 软件测试为求错而非求证的观点至今仍在学术界被广泛讨论。本书还为计算机界一个最为重要的主题提供了一…

    Linux 2023年6月13日
    0108
  • php+apache环境搭建

    【先安装apache】 1、安装基础环境: yum -y install gcc libxml2 libxml2-devel sqlite-devel libcurl-devel….

    Linux 2023年6月6日
    084
  • ASP.NET Core设置URLs的几种方法

    前言 在使用ASP.NET Core 3.1开发时,需要配置服务器监听的端口和协议,官方帮助文档进行简单说明,文档中提到了4种指定URL的方法 设置 ASPNETCORE_URLS…

    Linux 2023年6月8日
    086
  • 演示webuploader和cropperjs图片裁剪上传

    最近有个项目要在浏览器端裁剪并上传图片。由于缺乏人力,只能我上阵杀敌。通过参考各种文章,最后决定用cropperjs进行图片裁剪,用webuploader上传文件。本文涉及到的知识…

    Linux 2023年6月6日
    0109
  • 十一、服务介绍及端口

    服务管理简介服务器的作用主要是什么?主要是通过网络来提供服务,比如apache提供一个web服务,mysql提供一个数据库服务,dns提供一个域名解析服务,ftp提供一个文件服务器…

    Linux 2023年6月7日
    0112
  • gitlab

    版本控制gitlab 1. 版本控制介绍 2. gitlab部署 版本控制介绍 版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思…

    Linux 2023年6月7日
    0135
  • MHA实现MySQL的高可用性

    对主节点进行监控,可实现自动故障转移至其它从节点;通过提升某一从节点为新的主节点,基于主从复制实现,还需要客户端配合实现。 目前MHA主要支持一主多从的架构,要搭建MHA,要求一个…

    Linux 2023年6月7日
    0111
  • 关于在Rocky linux下安装dotnet sdk不成功的问题

    Rocky Linux 9,运行 dnf install -y dotnet-sdk-6.0 一切正常,运行起来非常顺利,安装完毕。但是非常诡异,运行 dotnet –list-…

    Linux 2023年6月6日
    0123
  • 不要使用短路逻辑编写 stl sorter 多条件比较

    最近工期紧、任务多,没有时间更新博客,就水一期吧。虽然是水,也不能太水,刚好最近工作中遇到一个 sorter 多条件排序的问题,花费了半天时间来定位解决,就说说它吧。 公司产品是一…

    Linux 2023年6月6日
    0103
  • Docker容器搭建android编译环境

    Docker容器搭建android编译环境 .版本:v0.4作者:河东西望日期:2022-7-12. 1.1 手动部署 &#x5B89;&#x88C5;&#…

    Linux 2023年6月7日
    0100
  • Java基础学习笔记

    Java 入门基础编程笔记 Java 入门基础编程视频课件地址:点击我啦哟 提取码:50ME 1 前言 1.1 软件开发介绍 软件,即一系列按照特定顺序组织的计算机数据和指令的集合…

    Linux 2023年6月13日
    0112
  • 存储过程,存储函数(Oracle)

    –打印hello world create or replace procedure sayhelloworld as –说明部分 begin dbms_output.put_…

    Linux 2023年6月14日
    085
  • SQL中连接(JOIN)子句介绍

    本文主要介绍 SQL(Structured Query Language)中连接(JOIN)子句的相关知识,同时通过用法示例介绍连接的常见用法。 说明:本文的用法示例是面向 MyS…

    Linux 2023年6月13日
    078
  • Docker centos7,宝塔

    拉取一个centos镜像 docker pull centos:centos7 运行一个容器 docker run -i -t -d –restart=always –name…

    Linux 2023年6月6日
    099
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球