深入::first-letter的研究

:first-letter 伪元素用来向文本的第一个字母添加特殊样式

1.::first-letter伪元素生效的前提

1.首先,元素的display计算值必须是 block, inline-block, table-cell, list-item或者table-caption,其他所有display计算值都没有用,包括display:table以及display:flex等

2.不是所有的字符都能单独被::first-letter伪元素修饰的

比如给<p>????????</p>添加CSS样式”p:first-letter { color: #cd0000; }”的结果,我们发现第一个问号并没有变成红色。。这是哪里出了问题???这是因为常见的标点符号,各类括号和引号在::first-letter伪元素眼中全部都是“辅助类”字符,有点京东买东西送的赠品的感觉,但是赠品本身却不能购买,这里的问号(?)就属于赠品。有些不理解,我们看了例子就知道了,假如我们在上面HTML一堆问号后面写上一些内容字符,比方说中文“辅助”二字,结果效果就是
这里写图片描述
“???????辅”全部都红色了,小样还挺有个性的,要么不红,要红就红一大波。原因是,“辅助”二字才是::first-letter伪元素真正要收入囊中作为“伪元素”的字符,但是现在前面出现了一堆不感冒的问号(?),怎么办呢?那就当做是赠品一并收了,于是,一大波字符全都红色了。如果全是问号(?),由于没有主商品,自然也就无法获得赠品,所以::first-letter没有选择任何字符,问号全部都是黑色。

3.字符前面不能有图片或者inline-table之类的元素存在

比如<p><i style="display:inline-block"></i>红色</p>的效果文字还是黑色的,因为就因为多了一个display值是inline-block尺寸为0的元素,导致::first-letter伪元素直接失效了。
那么我们要是用::before来生成伪元素能被”::first-letter”所修饰吗??一般来讲,::before伪元素和普通元素之间没有多少瓜葛,和:first-child, :empty之类的选择器之间也不会受影响。用专业术语概括就是:::before伪元素也参与::first-letter伪元素
这里写图片描述

2::first-letter伪元素可以生效的CSS属性

如果字符被选作了::first-letter伪元素,并不是像::before伪元素那样,几乎所有CSS都有效,仅仅是一部分,如下:

  • 所有字体相关属性:font, font-style, font-variant, font-weight, font-size, line-height以及font-family
  • 所有背景相关属性:background-color, background-image, background-position, background-repeat, background-size, 以及background-attachment
  • 所有margin相关属性:margin, margin-top, margin-right, margin-bottom, margin-left
  • 所有padding相关属性:padding, padding-top, padding-right, padding-bottom, padding-left
  • 所有border相关属性:缩写的border, border-style, border-color, border-width及普通书写的属性
  • color属性
  • text-decoration, text-transform, letter-spacing, word-spacing(合适情境下), line-height, float, vertical-align(只有当float为none的时候)这些CSS属性们
    所以大家如果妄图使用visibility:hidden或者display:none隐藏::first-letter伪元素,那还是省省吧,那完全是没有用的

3.::first-letter一些实际应用举例

这里再展示一个实际应用,是水哥之前跟我提及的。就是电商产品经常会有价格,价格前面一般都是有个羊角符号¥,表示价钱。往往这个羊角符号字体会比较特殊,字号也比较大,同时和文字的数值有几像素的距离。要实现这里的效果,我们通常的做法是在羊角符号¥外面包个span标签,命名个类名,然后通过CSS控制,实际上,有更简单巧妙的方法,就是使用本文介绍的::first-letter伪元素
这里写图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
:first-child和:first-of-type是CSS选择器中的两个不同的选择器。 :first-child选择器匹配其父元素中的第一个子元素。例如,如果我们有以下CSS代码: p:first-child { background-color: yellow; } span:first-child { background-color: yellow; } 那么它将选择所有p元素和span元素中的第一个子元素,并将其背景颜色设置为黄色。\[1\] :first-of-type选择器匹配其父级是特定类型的第一个子元素。例如,如果我们有以下CSS代码: p:first-of-type { color: blue; } 那么它将选择所有p元素中的第一个子元素,并将其字体颜色设置为蓝色。注意,这里的:first-of-type只要是该类型元素的第一个就行了,不要求是第一个子元素了。\[2\] 所以,两个选择器的区别在于:first-child选择器只匹配其父元素中的第一个子元素,而:first-of-type选择器匹配其父级是特定类型的第一个子元素。 #### 引用[.reference_title] - *1* [css:first-child和first-of-type](https://blog.csdn.net/xiaojinguniang/article/details/119887850)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [:first-child和:first-of-type的区别](https://blog.csdn.net/weixin_46305214/article/details/104644576)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [CSS选择器 :first-of-type/:last-of-type/ :first-child/:last-child 用法](https://blog.csdn.net/momo_mom177/article/details/124008659)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值