第13天 ::before和:after中单冒号和双冒号的区别是什么,这两个伪元素有什么作用?
伪元素在css1中已经存在当时用单冒号,css3时做了修订用双冒号 ::before ::after表示伪元素用来区别伪类。
在元素前面(::before)和后面(::after)加内容
发现这道题和后面的题目有点类似,都是讲伪元素 :before
和 :after
,直接看这道题的解释吧,同样可以回答这个问题。
[css] 第19天 css的属性content有什么作用呢?有哪些场景可以用到?
针对这道题写了篇blog,原文链接:https://xiangshuo.blog.csdn.net/article/details/89843456
以下是回答。
:before
和 :after
display: inline
;content
属性,否则一切都是无用功, content
属性也只能应用在 :before
和 :after
伪元素上;:before
和 :after
的内容无法被用户选中;.target:hover:after
。:before
和 :after
是在CSS2中提出来的,所以兼容IE8;::before
和 ::after
是CSS3中的写法,为了将伪类和伪元素区分开;::before
、::after
、::first-letter
、::first-line
、::selection
等;content
定义用法content
属性与 :before
及 :after
伪元素配合使用,在元素头或尾部来插入生成内容。
说明: 该属性用于定义元素之前或之后放置的生成内容。默认地,这往往是行内内容,不过该内容创建的盒子类型可以用属性 display 控制。
MDN 对 content
的取值描述:
content: normal /* Keywords that cannot be combined with other values */
content: none
content: 'prefix' /* <string> value, non-latin characters must be encoded e.g. \00A0 for */
content: url(http://www.example.com/test.html) /* <uri> value */
content: chapter_counter /* <counter> values */
content: attr(value string) /* attr() value linked to the HTML attribute value */
content: open-quote /* Language- and position-dependant keywords */
content: close-quote
content: no-open-quote
content: no-close-quote
content: open-quote chapter_counter /* Except for normal and none, several values can be used simultaneously */
content: inherit
<string>
value 字符串可以加入任何字符,包括 Unicode 编码等各种字符。
<a class="demo" href="https://www.xunlei.com/" title="精彩,一下就有">精彩,一下就有</a>
.demo:after{
content: "↗"
}
我们还可以通过 content
内字符串的变化,实现类似 加载中... 的动画效果
.demo:after{
animation: dot 1.6s linear both;
}
@keyframe dot{
0%{ content: "." }
33%{ content: ".." }
66%{ content: "..." }
100%{ content: "." }
}
类似的,还有种实现方式,steps阶梯函数实现元素位移
<a class="demo" href="https://www.xunlei.com/" title="精彩,一下就有">精彩,一下就有<dot>...</dot></a>
dot {
display: inline-block;
height: 1em;
line-height: 1;
text-align: left;
vertical-align: -.25em;
overflow: hidden;
}
dot::before {
display: block;
content: '...\A..\A.';
white-space: pre-wrap;
animation: dot2 1.6s infinite step-start both;
}
@keyframes dot2 {
33% {
transform: translateY(-2em);
}
66% {
transform: translateY(-1em);
}
}
<uri>
value 外部资源用于引用媒体文件,图片,图标,SVG等。
.demo:after{
content: url(https://img-vip-ssl.a.88cdn.com/img/xunleiadmin/5b9889e14dcdc.png);
}
受 background-image: url()
可以用渐变实现背景启发,类似的,一些函数是不是可以放在 content
中来实现?
.demo:after {
content: radial-gradient(circle at 35% 35%, white 10%, pink 70%);
display: inline-block;
border-radius: 50%;
width: 100px;
height: 100px;
overflow: hidden;
}
完美!当然本来就伪元素背景就可以实现,又为什么要放 content
呢?
调用当前元素的属性,可以方便的比如将图片的 Alt 提示文字或者链接的 Href 地址显示出来。
.demo:after{
content: attr(href);
}
.demo:after{
content: attr(class);
}
<counter>
values调用计数器,可以不使用列表元素实现序号功能。具体请参见 counter-increment
和 counter-reset
属性的用法。
<h1>大标题</h1>
<h2>中标题</h2>
<h3>小标题</h3>
<h3>小标题</h3>
<h2>中标题</h2>
<h3>小标题</h3>
<h3>小标题</h3>
<h1>大标题</h1>
<h2>中标题</h2>
<h3>小标题</h3>
<h3>小标题</h3>
<h2>中标题</h2>
<h3>小标题</h3>
<h3>小标题</h3>
h1::before{
content:counter(h1)'.';
}
h1{
counter-increment:h1;
counter-reset:h2;
}
h2::before{
content:counter(h1) '-' counter(h2);
}
h2{
counter-increment:h2;
counter-reset:h3;
margin-left:40px;
}
h3::before{
content:counter(h1) '-' counter(h2) '-' counter(h3);
}
h3{
counter-increment:h3;
margin-left:80px;
}
属于引用符号的取值有 4 种,共 2 对,在 CSS 中用了语义较为清晰的关键词来表示: open-quote、 close-quote、no-open-quote、no-close-quote。
默认:
.demo::before {
content: open-quote;
}
.demo::after {
content: close-quote;
}
自定义引用符号:
.demo {
quotes: "『" "』";
}
.demo::before {
content: open-quote;
}
.demo::after {
content: close-quote;
}
quotes
可以设置多组引用符号,用以应对次级引用:
.demo {
quotes: "«" "»" "‹" "›";
}
.demo::before {
content: no-open-quote open-quote;
}
.demo::after {
content: close-quote;
}
以上我们主要了解了 content
的一些用法和巧用,当然 :before
和 :after
本身作为元素,也可以实现多种应用效果,比如:三角形(border)、装饰元素、阴影等。希望通过以上介绍,能让大家对 content
有更深入的了解,帮助我们在平时的布局和样式以及用户体验中发挥更大的价值。
Demo codepen 地址:https://codepen.io/xiangshuo1992/pen/zQGyBW
END.
::是伪元素 ::after::before::first-letter:first-line
:是伪类 :active:hover:link:focus:visited
::
和 :
是 CSS3 中为了区别伪类和伪元素所用的不同的写法。::
表示伪元素,目前两种写法都被兼容。
::before
,::after
可以在一个 DOM 元素的前面和后面增加一个伪元素。可以用来清除浮动、为元素增加特殊效果(如前面有特殊符号等)。
::before
和 ::after
默认添加的是 inlne
元素,通过 content
属性来设置展示的内容,并且必须要设置 content
属性。content
属性可以利用 attr
与元素的相关内容做联动。
详细设置和用法可以参考 css 伪元素:before 和:after 用法详解
: 伪类
:: 伪元素
双冒号是在当前规范中引入的,用于区分伪类和伪元素。不过浏览器需要同时支持旧的已经存在的伪元素写法。
::是css3为了区分伪类和伪元素新增的
::伪元素
:伪类
::before在元素内部的最开头添加元素或者content
::after与之相反,在元素内部的最结尾
:after
伪类
::before
伪元素
:表示伪类,是一种样式,比如:hover, :active等
::表示伪元素,是具体的内容,比如::before是在元素前面插入内容,::after则是在元素后面插入内容,不过需要content配合,并且插入的内容是inline的。
:before和:after其实还是表示伪元素,在css3中已经修订为::before和::after了,只是为了能兼容IE浏览器,所以也可以表示成:before和:after
回答第一个,第二个大家知道了,单冒号和双冒号主要区别恐怕是兼容性问题吧,前者也就是单冒号是css3出来的,肯定是不兼容IE9以下,后者兼容。
Most helpful comment
发现这道题和后面的题目有点类似,都是讲伪元素
:before
和:after
,直接看这道题的解释吧,同样可以回答这个问题。[css] 第19天 css的属性content有什么作用呢?有哪些场景可以用到?
针对这道题写了篇blog,原文链接:https://xiangshuo.blog.csdn.net/article/details/89843456
以下是回答。
认识
:before
和:after
display: inline
;content
属性,否则一切都是无用功,content
属性也只能应用在:before
和:after
伪元素上;:before
和:after
的内容无法被用户选中;.target:hover:after
。:before
和:after
是在CSS2中提出来的,所以兼容IE8;::before
和::after
是CSS3中的写法,为了将伪类和伪元素区分开;::before
、::after
、::first-letter
、::first-line
、::selection
等;content
定义用法content
属性与:before
及:after
伪元素配合使用,在元素头或尾部来插入生成内容。说明: 该属性用于定义元素之前或之后放置的生成内容。默认地,这往往是行内内容,不过该内容创建的盒子类型可以用属性 display 控制。
MDN 对
content
的取值描述:content:
<string>
value 字符串可以加入任何字符,包括 Unicode 编码等各种字符。
我们还可以通过
content
内字符串的变化,实现类似 加载中... 的动画效果类似的,还有种实现方式,steps阶梯函数实现元素位移
content:
<uri>
value 外部资源用于引用媒体文件,图片,图标,SVG等。
受
background-image: url()
可以用渐变实现背景启发,类似的,一些函数是不是可以放在content
中来实现?完美!当然本来就伪元素背景就可以实现,又为什么要放
content
呢?content: attr() value 属性值的引用
调用当前元素的属性,可以方便的比如将图片的 Alt 提示文字或者链接的 Href 地址显示出来。
content:
<counter>
values调用计数器,可以不使用列表元素实现序号功能。具体请参见
counter-increment
和counter-reset
属性的用法。引用符号
属于引用符号的取值有 4 种,共 2 对,在 CSS 中用了语义较为清晰的关键词来表示: open-quote、 close-quote、no-open-quote、no-close-quote。
默认:
自定义引用符号:
quotes
可以设置多组引用符号,用以应对次级引用:总结
以上我们主要了解了
content
的一些用法和巧用,当然:before
和:after
本身作为元素,也可以实现多种应用效果,比如:三角形(border)、装饰元素、阴影等。希望通过以上介绍,能让大家对content
有更深入的了解,帮助我们在平时的布局和样式以及用户体验中发挥更大的价值。Demo codepen 地址:https://codepen.io/xiangshuo1992/pen/zQGyBW
END.