问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

css伪元素的content值可为哪些

发布网友 发布时间:2022-04-06 11:13

我来回答

3个回答

懂视网 时间:2022-04-06 15:34

本篇文章给大家带来的内容是关于CSS伪元素和Content属性的详细分析(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

继上篇深入了解CSS伪类选择器的用法(代码示例)记录完伪类后,我自然而然要向伪元素伸出“魔掌”的啦。本文讲讲述伪元素以及功能强大的Contet属性,让我们可以通过伪元素更好地实现更多的可能!

初识伪元素

?说起伪元素我第一想到的莫过于::before::after这两个了,它俩其实就是在其附属的选择器命中的元素上插入第一个子节点和追加最后一个子节点。那这时我不禁地想问:“直接添加两个class为.before和.after不是一样的吗?”
?其实使用伪元素::before::after以下两个好处:

  1. HTML的代码量减少,对SEO有帮助;

  2. 提高JavaScript查询元素的效率。

?那为什么会这两好处呢?原因就是伪元素并不存在于DOM中,而是位于CSSOM,HTML代码和DOM Tree中均没有它的身影,量少了自然效率有所提升。但这也引入一个问题——我们没办法通过JavaScript完全操控伪元素(我将在下面一节为大家讲述)

一大波伪元素来了

除了::before和::after外,别漏了以下的哦!

:first-line:只能用于块级元素。用于设置附属元素的第一个行内容的样式。可用的CSS属性为font,color,background,word-spacing,letter-spacing,text-decoration,vertical-align,text-transform,line-height,clear。

:first-letter:只能用于块级元素。用于设置附属元素的第一个字母的样式。可用的CSS属性为font,color,background,marin,padding,border,text-decoration,vertical-align,text-transform,line-height,float,clear。

::selection:匹配选中部分的内容。可用的CSS属性为background,color。

有没有发现有的伪元素前缀是:有的却是::呢?::是CSS3的写法,其实除了::selection外,其他伪元素既两种前缀都是可以的,为兼容性可选择使用:,为容易区分伪元素和伪类则使用::,但我还是建议使用::来提高可读性,兼容性就让postcss等工具帮我们处理就好了。

::before和::after的注意事项

默认display: inline;

必须设置content属性,否则一切都是无用功;

默认user-select: none,就是::before和::after的内容无法被用户选中的;

伪元素和伪类结合使用形如:.target:hover::after。

JavaScript操作伪元素

?上文提到由于伪元素仅位于CSSOM中,因此我们仅能通过操作CSSOM API——window.getComputedStyle来读取伪元素的样式信息,注意:我们能做的就是读取,无法设置的哦!

{- window.getComputedStyle的类型 -}
data PseudoElement = ":before" | "::before" | ":after" | "::after" | ":first-line" | "::first-line" | ":first-letter" | "::first-letter" | "::selection" | ":backdrop" | "::backdrop" | Null

window.getComputedStyle :: HTMLElement -> PesudoElement -> CSSStyleDeclaration

{- CSSStyleDeclaration实例的方法 -}
data CSSPropertyName = "float" | "backround-color" | ......
data DOMPropertyName = "cssFloat" | "styleFloat" | "backgroundColor" | ......

-- IE9+的方法
CSSStyleDeclaration#getPropertyValue :: CSSPropertyName -> *
-- IE6~8的方法
CSSStyleDeclaration#getAttribute :: CSSPropertyName -> *
-- 键值对方式获取
CSSStyleDeclaration#[DOMPropertyName] -> *

示例:

.target[title="hello world"]::after{
 display: inline-block;
 content: attr(title);
 background: red;
 text-decoration: underline;
}
const elTarget = document.querySelector(".target")
const computedStyle = window.getComputedStyle(elTarget, "::after")
const content = computedStyle.getPropertyValue("content")
const bg = computedStyle.getAttribute("backgroundColor")
const txtDecoration = computedStyle["text-decoration"]
console.log(content) // "hello world"
console.log(bg) // red
console.log(txtDecoration) // underline

玩透Content属性

?到这里我们已经可以利用::before和::after实现tooltip等效果了,但其实更为强大的且更需花时间研究的才刚要开始呢!那就是Content属性,不仅仅可以简单直接地设置一个字符串作为伪元素的内容,它还具备一定限度的编程能力,就如上面attr(title)那样,以其附属元素的title特性作为content值。下面请允许我为大家介绍吧!

p::after{
 content: "普通字符串";
 content: attr(父元素的html属性名称);
 content: url(图片、音频、视频等资源的url);
 /* 使用unicode字符集,采用4位16进制编码
 * 但不同的浏览器显示存在差异,而且移动端识别度更差
 */
 content: "21e0";
 /* content的多个值可以任意组合,各部分通过空格分隔 */
 content: "'" attr(title) "'";
 
 /* 自增计数器,用于插入数字/字母/罗马数字编号
 * counter-reset: [<identifier> <integer>?]+,必选,用于标识自增计数器的作用范围,<identifier>为自定义名称,<integer>为起始编号默认为0。
 * counter-increment: [<identifier> <integer>?]+,用于标识计数器与实际关联的范围,<identifier>为counter-reset中的自定义名称,<integer>为步长默认为1。
 * <list-style-type>: disc | circle | square | decimal | decimal-leading-zero | lower-roman | upper-roman | lower-greek | lower-latin | upper-latin | armenian | georgian | lower-alpha | upper-alpha
 */
 content: counter(<identifier>, <list-style-type>);
 
 /* 以父附属元素的qutoes值作为content的值
 */
 content: open-quote | close-quote | no-open-quote | no-close-quote;
}

换行符:HTML实体为 ,CSS为A,JS为uA。

?可以看到Content接受6种类型,和一种组合方式。其中最后两种比较复杂,我们后面逐一说明。

自定义计数器

?HTML为我们提供ulolli来实现列表,但如果我们希望实现更为可性化的列表,那么该如何处理呢?content属性的counter类型值就能帮到我们。

<!-- HTML 部分-->
.dl
 .dt{chapter1}
 .dd{text11}
 .dd{text12}
 .dt{chapter2}
 .dd{text21}
 
/* CSS部分 */
.dl {
 counter-reset: dt 0; /* 表示解析到.dl时,重置dt计数器为0 */
 
 & .dt {
 counter-reset: dd 0; /* 表示解析到.dt时,重置dd计数器为0 */
 
 &::before{
 counter-increment: dt 1; /* 表示解析到.dt时,dt计数器自增1 */
 content: counter(dt, lower-roman) " ";
 }
 }
 
 & .dd::before {
 counter-increment: dd 1; /* 表示解析到.dd时,dd计数器自增1 */
 content: counter(dd) " ";
 }
}

87877522-5ba0ab31a71d7_articlex.png

通过counter-reset来定义和重置计数器,通过counter-increment来增加计数器的值,然后通过counter来决定使用哪个计数器,并指定使用哪种样式。
?如果用JavaScript来表示应该是这样的

const globalCounters = {"__temp":{}}

function resetCounter(name, value){
 globalCounters[name] = value
}
function incrementCounter(name, step){
 const oVal = globalCounters[name]
 if (oVal){
 globalCounters[name] = oVal + step
 }
 else{
 globalCounters.__temp[name] = step
 }
}
function counter(name, style){
 return globalCounters[name] || globalCounters.__temp[name]
}

function applyCSS(mount){
 const clz = mount.className
 if (clz == "dl"){
 resetCounter("dt", 0)
 const children = mount.children
 for (let i = 0; i < children.length; ++i){
  applyCSS(children[i])
 }
 }
 else if (clz == "dt"){
 resetCounter("dd", 0)
 incrementCounter("dt", 1)
 const elAsBefore = document.createElement("span")
 elAsBefore.textContent = counter("dt", "lower-roman") + " "
 mount.insertBefore(mount.firstChild)
 }
 else if (clz == "dd"){
 incrementCounter("dd", 1)
 const elAsBefore = document.createElement("span")
 elAsBefore.textContent = counter("dd", "lower-roman") + " "
 mount.insertBefore(mount.firstChild)
 }
}

嵌套计数器

?对于多层嵌套计数器我们可以使用counters(<identifier>, <separator>, <list-style-type>?)

.ol
 .li
 .ol
 .li{a}
 .li{b}
 .li
 .ol
 .li{c}
.ol {
 counter-reset: ol;
 & .li::before {
 counter-increment: ol;
 content: counters(ol, ".");
 }
}

Content的限制

IE8+才支持Content属性;

除了Opera9.5+中所有元素均支持外,其他浏览器仅能用于:before,:after内使用;

无法通过JS获取Counter和Counters的运算结果。得到的就只能是"counter(mycouonter) " ""。

自定义引号

?引号这个平时很少在意的符号,其实在不同的文化中使用的引号将不尽相同,如简体中文地区使用的"",而日本则使用「」。那我们根据需求自定义引号呢?答案是肯定的。
?通过open-quote,close-quote,no-open-quote和no-close-quote即可实现,下面我们通过例子来理解。
?<q>会根据父元素的lang属性自动创建::before和::after来实现插入quotation marks。

p[lang=en]>q{英语}
p[lang=no]>q{挪威语}
p[lang=zh]>q{汉语}
p[lang=en]>q.no-quote{英语2}
div[lang=no]>.quote{挪威语2}

CSS片段:

p[lang=en] > q{
 quotes: "<!--" "-->"; /* 定义引号 */
}
p[lang=en] > q.no-quote::before{
 content: no-open-quote;
 /*或者 content: none;*/
}
div[lang=no] > .quote {
 quotes: "<<-" "->>";
}
div[lang=no] > .quote::before {
 content: open-quote;
}
div[lang=no] > .quote::after {
 content: close-quote;
}

2605515230-5ba0ab31ac01d_articlex.png

示例

分割线

p.sep{or}
.sep {
 position: relative;
 text-align: center;
 
 &::before,
 &::after {
 content: "";
 box-sizing: border-box;
 height: 1px;
 width: 50%;
 border-left: 3em solid transparent;
 border-right: 3em solid transparent;
 position: absolute;
 top: 50%;
 }
 
 &::before {
 left: 0;
 }
 
 &::after {
 right: 0;
 }
}

只读效果(通过遮罩原来的元素实现)

.input-group {
 position: relative;
 
 &.readonly::before {
 content: "";
 position: absolute;
 width: 100%;
 height: 100%;
 top: 0;
 left: 0;
 }
}

计数器

.selections>input[type=checkbox]{option1}+input[type=checkbox]{option2}
.selection-count
.selections{
 counter-reset: selection-count;
 
 & input:checked {
 counter-increment: selection-count;
 }
}
.selection-count::before {
 content: counter(selection-count);
}

热心网友 时间:2022-04-06 12:42

用来和:after及:before伪元素一起使用,在对象前或后显示内容。content:后可加的内容有下列几种attr(alt):使用对象的alt属性的文字counter(name):使用已命名的计数器counter(name,list-style-type):使用已命名的计数器并遵从指定的list-style-type属性counters(name,string):使用所有已命名的计数器counters(name,string,list-style-type):使用所有已命名的计数器并遵从指定的list-style-type属性no-close-quote:并不插入quotes属性的后标记。但增加其嵌套级别no-open-quote:并不插入quotes属性的前标记。但减少其嵌套级别close-quote:插入quotes属性的后标记open-quote:插入quotes属性的前标记string:使用用引号括起的字符串url(url):使用指定的绝对或相对url地址

热心网友 时间:2022-04-06 14:00

难道不是任意字符串吗...
css伪元素的content值可为哪些

用来和:after及:before伪元素一起使用,在对象前或后显示内容。content:后可加的内容有下列几种attr(alt):使用对象的alt属性的文字counter(name):使用已命名的计数器counter(name,list-style-type):使用已命名的计数器并遵从指定的list-style-type属性counters(name,string):使用所有已命名的计数器counter...

css中content: " ";是什么意思?有什么用?

1、在body中添加两个h标签,如下图所示。2、在style标签下书写CSS样式,给h标签的伪元素添加content内容,如下图所示。3、先定义符号,然后添加符号,除了可以运用content添加纯文本内容外,也可以运用它添加文字符号。4、运用content属性添加图片。5、content还可以运用其attr获取元素的属性值,如下图所示。

css3中content和attr属性有什么用

基本content用法content属性能让程序员使用CSS往页面元素里填写内容例:.myDiv:after { content: "我是一个使用*content*属性生产的静态文字"; }请注意,如果想让伪元素:after绝对定位,必须对div设置position: relativecontent和attr配合使用如果不想把content内容在CSS里写死,那么可以使用attr表达式来从页...

css样式中content:"."是什么意思?

这个clearfix的CSS使用了after这个伪对象,它将在应用clearfix的元素的结尾添加content中的内容。在这里添加了一个句号".",并且把它的display设置成block;高度设为0;clear设为both;visibility设为隐藏,这样就达到了撑开容器的目的。

css 中 content是什么意思

意思是有满足的、使满足、目录等,同时也是计算机语言的一种方法。音标:英 ['kɒntent] 美 [ˈkɑ:ntent] 。content 一共有三种词性,具体的意思如下:1、n.内容;满足;(书等的)目录;容量 2、adj.满足的,满意的;愿意的;心甘情愿的 3、vt.使满足,使满意 content的各种...

css规则按选择器类型分为哪四种?

1、代表内联样式,如:style=””,权值为1000。2、代表ID选择器,如:#content,权值为100。3、代表类,伪类和属性选择器,如.content,权值为10。4、代表类型(元素)选择器和伪元素选择器,如divp,权值为1。按照CSS代码的执行先后顺序。如果有重复的规则,按照后执行的定义。最终规则是多个定义规则...

以下的CSS代码中AFTER怎么理解?

content: "."; ---内容为“.”就是一个英文的句号而已。也可以不写。display: block; ---加入的这个元素转换为块级元素。clear: both; ---清除左右两边浮动。visibility: hidden; ---可见度设为隐藏。注意它和display:none;是有区别的。visibility:hidden;仍然占据空间,只是看不到...

清除浮动的3种方式 2021-03-21

clerar 属性是 css 专门提供用来清除浮动的.这个属性主要有三个值:该方法虽好, 但是也有一些不足之处.因为 clear 对那些浮动的元素没有做任何的操作, 所以浮动元素的父辈仍然没有高度(如果你没有手动添加的话)[图片上传失败...(image-cf1f54-1616303772213)]前面说过 clear 的本质是在清理元素顶部...

CSS伪类怎么实现第一个栏目默认显示,然后鼠标悬停在别的栏目自动隐藏第...

用复合选择器来写可能要好一点 其他栏目div:hover 第一个栏目div:nth-child(0){display:none;},第一个栏目一开始要有其他样式的话,你需要给他一个单独的class,再写样式

css中的after是什么意思

:after 伪元素在元素之后添加内容。这个伪元素允许创作人员在元素内容的最后面插入生成内容。默认地,这个伪元素是行内元素,不过可以使用属性 display 改变这一点。所有主流浏览器都支持 :after 伪元素,但对于IE来说,只有IE8以上版本支持。h1:after { content:url(beep.wav);} 此样式会在每个 h1 ...

css伪元素和伪类有哪些 css3伪元素有哪些 css伪元素选择器有哪些 css伪元素和伪类 css伪类和伪元素区别 css中伪类和伪元素选择器 伪元素和伪类的区别HTML5 css伪元素是什么 添加伪元素css
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
怎样设置苹果手机的应用分身 怎么判断家里有蟑螂窝 如何让蟑螂不靠近床 怎样判断是否有蟑螂窝 有什么办法不让睡觉打呼噜了 如何在哪里查询项目经理证书 excel双纵坐标怎么做 了解“中国白酒排名前100强”,选择一款放心的酒 淘宝签到领现金活动在哪里? 签到红包在哪领取啊? 烧火烤红薯算不算污染空气? 茴香、迷迭香那一种可以做凉拌豆腐 普顿外汇平台怎么样?不知道可不可靠。 怎么升级凯立德车载导航? 豆腐和茴香能一起吃吗 ps套索工具抠如何图后边缘处理? 怎样升级凯立德汽车导航系统 工业企业如何控制和降低经营成本 员工年底总结怎么说? 求几部像 大剑 Fate stay night 这样的动漫 美女+打斗 谢谢啊 动漫中有哪些美女死神角色? 有没有描写给女生用刑的动漫 求情节中有女主角被严刑拷打的漫画 两位被挫骨扬灰,一位赤裸死去,国漫中下场最凄惨的美女都有谁? 怎么制作魔兽争霸3冰封王座的地图? 魔兽世界3冰封王座怎样创造地图 魔兽世界冰封王座的地图如何下载 魔兽世界冰封王座3怎么制作地图 被处以火刑的动漫女角色,有哪些让人感叹错的是整个世界? 魔兽世界3冰封王座 防守地图求告知 如何增加魔兽世界3冰封王座的地图 茴香豆嘴怎么做好吃 我好喜欢吃凉拌,可我不会做,总想着自己做,能告诉我些简单的凉拌做法吗? 凉菜,拌豆腐吃的蘸水,要哪些香料才好吃啊! 谁会做拌豆腐脑的调料 格力云控怎样控制中央空调?急求 去巴厘岛玩 格力中央空调配置的云控有什么作用哦?求解 方便做的冷菜 巴厘岛司机YOKO怎么样 适合大排挡的凉菜 中国银行收款行标识是什么 收款行标识是什么? 格力云控怎样控制中央空调?急求格力云控怎么复位 以前买的空调能用云控吗? 茴香拌豆腐怎么做 格力空调的云控怎么关掉灯闪烁? 酷夏怎么做好吃的美食 中央空调云控信号线 格力*空调智睿在连接云控时显示故障原因是CH,(与有效主手操器冲突标志)请问怎样外理? 山东金洲科瑞节能科技有限公司怎么样? 干的龙眼可以拿来泡酒吗?今年龙眼有点多余