注册 登录

清河洛

CSS伪类中的content

qingheluo2023-12-06清河洛756
在伪类中的content属性可能的值attr(X) 将 X 属性值以字符串形式返回。如果没有则返回一个空字符串 string 文本内容 open-quote 左引号 close-quote 右引号 no-open-quote no-close-quote 不会生产任何内容,但是会改变(增加或降低)引号层级。 url 指定一个外部资源(比如图片) initial 它将属性设置为其默认值 inherit 继承自其父元素 none 不设置伪元素::before或::after的...

在伪类中的content属性可能的值

attr(X)        将 X 属性值以字符串形式返回。如果没有则返回一个空字符串
string         文本内容
open-quote     左引号
close-quote    右引号
no-open-quote  
no-close-quote 不会生产任何内容,但是会改变(增加或降低)引号层级。
url            指定一个外部资源(比如图片)
initial        它将属性设置为其默认值
inherit        继承自其父元素
none           不设置伪元素::before或::after的内容。
normal         伪类元素中会被视为 none,,默认值。如果内容属性正常,则设置内容

counter(name[,style])            计数器
counters(name[,string[,style]])  分层级计数器

一、清除浮动

父元素中子元素浮动后会脱离文档流,无法撑起容器

.left {float: left}
.right {float: right}
.clear:after {
    content: '';
    clear: both;
    display: block;
}

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

<!--html-->
<div class="container clear">
    <div class="left">左</div>
    <div class="right">右</div>
</div>

二、小三角的气泡窗口

配合伪元素:after,实现一个右下角带倒三角指向性的气泡窗口

通过调整border各边的颜色和绝对定位位置,可以绘制出指向不同的气泡窗口

<!--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;
}

三、无内容时的提示

当元素内容为空时,通过content进行提示,不需要使用 JavaScript 处理

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

div:empty:after {
    content: '暂无数据';
    color: red;
}
 
<!--html-->
<div>有内容</div>
<div></div>

四、面包屑菜单

<!--css-->
ul li:not(:last-child):after {
    content: '\276D';
    margin: 5px;
}
 
<!--html-->
<ul>
    <li>首页</li>
    <li>商品</li>
    <li>详情</li>
</ul>

content值为特殊字符,配合伪类和伪元素完成面包屑菜单,也可完成文字前后添加图标

五、加载动画

<!--css-->
.loading:after {
    content: ".";
    animation: loading 2s ease infinite;
}
 
@keyframes loading {
    33% {
        content: "..";
    }
    66% {
        content: "...";
    }
}
 
<!--html-->
<p class="loading">加载中 </p>

六、插入图片

<!--css-->
.loading:before {
    content: url("../static/img/loading.gif");
    vertical-align: middle;
}
 
<!--html-->
<div class="loading"> 加载中... </div>

content可以使用url()方法插入图片,和background属性类似,不同的是content属性无法控制图片大小

七、获取属性值

content值可以通过attr() 方法,用来获取指定属性的值

<!--css-->
.web:after {
    content: attr(href)
}
 
<!--html-->
<a class="web" href="https://domain.com">echevera</a>

八、计数器

通常要实现一个动态的递增数,都是通过js实现,而现在可以通过CSS中的计数器实现递增数

本质上CSS计数器是由CSS维护的变量,这些变量可能根据CSS规则增加以跟踪使用次数

使用步骤:

1、counter-reset定义计数器名称及初始值,默认为0
    counter-reset: name;
        /* 定义计数器name并设置其值为默认值 0 */
    counter-reset: name 2;
        /* 定义计数器name并设置其值为 2  */
    counter-reset: name1 2 name2 1;
        /* 同时定义name1和name2两个计数器  */

2、counter-increment定义指定计数器的每次递增数,默认为1
    counter-increment:name 2;
        /* 定义计数器name每次计数递增 2 */

3、counter()或counters()函数来显示在页面上
    content:counter(name,upper-roman)
        /* 显示内容并设置显示格式为大写罗马数字 */

counter(name[,style])

其中style表示计数器的显示格式,和list-style-type属性的可选值相同,可选值

disc                 :实心圆点
circle               :空心圆点
square               :实心方块
decimal              :十进制阿拉伯数字,默认值
decimal-leading-zero :有前导零的2位十进制
lower-roman          :小写罗马数字
upper-roman          :大写罗马数字
lower-greek          :小写希腊语
lower-latin          :小写拉丁语(英文字母)
upper-latin          :大写拉丁语(英文字母)
armenian             :亚美尼亚
georgian             :格鲁吉亚
none                 :不显示标记

应用示例

<style>
.page-list {
  counter-reset: counter;
}
.page-list p:before {
  padding: 2px 5px;
  border: 1px solid  #ccc;
  counter-increment: counter;
  content: counter(counter);
}
</style>
<div class="page-list">
    <p>一</p>
    <p>二</p>
    <p>三</p>
</div>

九、分层计数器

counters()对嵌套的计数器非常有用,可以在不同级别的嵌套计数器之间插入字符串

目前仅能识别ol-li或ul-li列表

counters(name[,string[,style]]):string为分层时各层级间的分割字符

<style>
.list {
  counter-reset: jishu;
  list-style-type: none;
}
.list li:before {
  counter-increment: jishu;
  content: counters(jishu, "-") ":";
}
</style>

<ul class="list">
    <li>item</li>
    <li>item
        <ul class="list">
            <li>item</li>
            <li>item</li>
            <li>item
                <ul class="list">
                    <li>item</li>
                    <li>item</li>
                    <li>item</li>
                </ul>
            </li>
            <li>item</li>
        </ul>
    </li>
    <li>item</li>
</ul>


网址导航