css content属性与before和伪元素结合使用以增加其价值,
content属性应与before和用于伪元素结合使用。其功能可以定义伪元素显示的内容。本文主要提供可选值以及实际例子和技巧内容?
基本使用
简单示例:
<p>「不会写前端」</p>
复制代码p {
&::before {
content: "欢迎关注"
}
&::after {
content: "微信公众号"
}
}
复制代码浏览 设备显示此字幕:
我们看一下浏览器中实际渲染的结构:
是的,就是这么粗暴,就像他们的名字一样,一个接一个?,双冒号指的是 为了保持文章简洁,有一些属性 浏览器自带的特殊字符: 显示如下: html 特殊字符对照表 显示如下: iconfont -阿里巴巴矢量图标库 顾名思义,该函数可以检索 显示我的掘金头像: 显示如下: 缺点是图片大小无法控制?伪元素 ,即使你写成 :po,标准浏览器仍然会将其渲染为 ::po ,目的是为了兼容旧的写法吗? 中的 可用值
unicodeattr 函数 url 函数 计数器 函数 css 变量相继使用
content省略了外层的父元素:// 原始
p {
&::after {
content: "";
}
}
// 省略后
content: "";
复制代码1。常规字符
content: "我是文字内容";
复制代码2。 unicode
p {
&:after {
content: "\02691";
color: red;
}
}
复制代码iconfont自定义字体图标:<span class="icon icon-close"></span>
复制代码@font-face {
font-family: "iconfont";
src: url('//at.alicdn.com/t/font_1209853_ok7e8ntkhr.ttf?t=1560857741304') format('truetype');
}
.icon {
font-family: "iconfont";
}
.icon-close::before {
content: "\e617";
}
复制代码3. attr 函数
html元素中的属性值,如id、class、风格.等等?的功能是插入计数器值。使用属性<p data-content="我是文字内容"></p>
复制代码content: attr(data-content);
复制代码4.函数url
content: url("https://user-gold-cdn.xitu.io/2019/8/7/16c681a0fb3e84c4?imageView2/1/w/180/h/180/q/85/format/webp/interlace/1");
复制代码5.计数器函数 函数计数器
content可以在计数器中显示值吗?在实现用法之前,首先要熟悉两个属性 计数器重置 以及 计数器增量?计数器重置用于定义计数器:counter-reset: count1 0; // 声明一个计数器count1,并从0开始计算
counter-reset: count2 1; // 声明一个计数器count2,并从1开始计算
counter-reset: count3 0 count4 0 count5 0; // 声明多个计数器
复制代码 counter -increment 增加计数器值,可以理解为javascript+=:
counter-reset: count 0;
counter-increment: count 2; // 使count自增2,当前count的值为2
counter-increment: count -2; // 使count自增-2,当前count的值为-2
复制代码注意计数器值 显示变量时,如果变量是 普通字符串连接: 字符串拼接函数: 隐式转换: 显示如下: 显示如下: 以前是这样写的吗? 进度条显示如下: 添加过渡效果: 鱼与熊掌不可兼得。如果你只依靠 刷新页面最终效果如下: 参考文章:小技巧:如何使用content属性显示CSSvar变量的值 效果如下: 多方向性、主题、动画的实现可以按照我之前写的实现。我读到的文章:利用css内容实现紧急工具文字提示? 效果如下: 显示如下:动7.加载中... 动画 效果如下: count 不是这里改回和0,可以看作是样式覆盖,就像下面的代码:div {
width: 100px;
width: 200px; // 实际渲染的宽度
}
复制代码6。 css变量
string类型,则可以直接显示。如果是int类型,则需要借用函数counter?// string类型
--name: "不会写前端";
p {
&::after {
content: var(--name); // 显示为"不会写前端"
}
}
---------- 我是分割线 ----------
// int类型
--count: 60;
p {
&::after {
counter-reset: color var(--count);
content: counter(count); // 显示为"60"
}
}
---------- 我是分割线 ----------
// 不支持的类型及情况
--count: 60.5; // 显示为"0",不支持小数
--count: 60px; // 显示为"",不支持css属性值
复制代码连接
content: "xxx" + "xxx";
复制代码// 不能使用 + 连接符,也可以不需要空格,这里只是为了区分
content: "我支持" attr(xx);
count: "我的掘金头像:" url("xxxxx");
content: "计数器的值为:" counter(xx);
复制代码content: 0; // 显示为""
content: "" + 0; // 显示为"0"
content: "" + attr(name); // 显示为"attr(name)"
复制代码实际示例
1.当标签内容为空时,显示其属性
href中的值:<a href="https://juejin.im/user/587e1822128fe1005706db1c"></a>
复制代码a {
&:empty {
&::after {
content: "链接内容为:" attr(href);
}
}
}
复制代码2。破折号和标点
<ul>
<li>首页</li>
<li>商品</li>
<li>详情</li>
</ul>
复制代码ul {
display: flex;
font-weight: bold;
li {
&:not(:last-child) {
margin-right: 5px;
&::after {
content: "\276D";
margin-left: 5px;
}
}
}
}
复制代码<li v-for="(item, index) in list">
<span>{{item}}</span>
<span v-show="index < list.length - 1">、</span>
</li>
复制代码3。
<div class="progress" style="--percent: 14;"></div>
<div class="progress" style="--percent: 41;"></div>
<div class="progress" style="--percent: 94;"></div>
复制代码.progress {
width: 400px;
height: 17px;
margin: 5px;
color: #fff;
background-color: #f1f1f1;
font-size: 12px;
&::before {
counter-reset: percent var(--percent);
content: counter(percent) "%"; // 文字显示
display: inline-block;
width: calc(100% * var(--percent) / 100); // 宽度计算
max-width: 100%; // 以防溢出
height: inherit;
text-align: right;
background-color: #2486ff;
}
}
复制代码transition: width 1s ease; // 页面首次进入没有过渡效果,因为width必须要发生变化才行
复制代码![]()
css,想要在第一次进入页面时触发动画效果,那么只有animation可以做到吗? .progress {
&::before {
// 移除width跟transition属性
animation: progress 1s ease forwards;
}
@keyframes progress {
from {
width: 0;
}
to {
width: calc(100% * var(--percent) / 100);
}
}
}
复制代码![]()
4。 tooltip
<button data-tooltip="我是一段提示">按钮</button>
复制代码[data-tooltip] {
position: relative;
&::after {
content: attr(data-tooltip); // 文字内容
display: none; // 默认隐藏
position: absolute;
// 漂浮在按钮上方并居中
bottom: calc(100% + 10px);
left: 50%;
transform: translate(-50%, 0);
padding: 5px;
border-radius: 4px;
color: #fff;
background-color: #313131;
white-space: nowrap;
z-index: 1;
}
// 鼠标移入button的时候显示tooltip
&:hover {
&::after {
display: block;
}
}
}
复制代码![]()
5.计算复选框选择数量
<form>
<input type="checkbox" id="one">
<label for="one">波霸奶茶</label>
<input type="checkbox" id="two">
<label for="two">烤奶</label>
<input type="checkbox" id="three">
<label for="three">咖啡</label>
<!-- 输入结果 -->
<div class="result">已选中:</div>
</form>
复制代码form {
counter-reset: count 0;
// 当checkbox选中的时候,计数器自增1
input[type="checkbox"] {
&:checked {
counter-increment: count 1;
}
}
// 输出结果
.result {
&::after {
content: counter(count);
}
}
}
复制代码![]()
6.添加章节数到目录
<!-- 章节 -->
<ul class="section">
<li>
<h1>自我介绍</h1>
<!-- 子章节 -->
<ul class="subsection">
<li>
<h2></h2>
</li>
<li>
<h2></h2>
</li>
</ul>
</li>
<li>
<h1>写一段css代码</h1>
</li>
</ul>
复制代码// 章节
.section {
counter-reset: section 0; // 外层计数器
h1 {
&::before {
counter-increment: section 1; // 自增1
content: "Section"counter(section) ". ";
}
}
// 子章节
.subsection {
counter-reset: subsection 0; // 内层计数器
h2 {
&::before {
counter-increment: subsection 1; // 自增1
content: counter(section) "."counter(subsection); // 计数器是有作用域的,这里可以访问外层计数器
}
}
}
}
复制代码<p>加载中</p>
复制代码p {
&::after {
content: ".";
animation: loading 2s ease infinite;
@keyframes loading {
33% {
content: "..";
}
66% {
content: "...";
}
}
}
}
复制代码![]()
8.没有更多数据了。 before
for使用了伪元素,主要是为了显示一些额外的信息。有几个案件大家一定要调查清楚,只要你脑子够大。
作者:Smart Tom
来源:掘金
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
code前端网