【CSS】你可能不知道伪元素(::before和::after)有多强大~

简介: 【CSS】你可能不知道伪元素(::before和::after)有多强大~

image.png

1、背景

前几天看到一篇文章里面嵌了一个很好看的渐变色阴影的卡片(无奈它是一张图片,所以也就看不到样式),图片是这样的:
image.png作为一个练习时长三年半的 “CSS 菜鸡”,我寻思着这玩意儿能用 CSS 实现不?于是,好奇心驱使下,我们捣鼓了一番,“优雅地”实现了这个效果。
image.png
我一开始冒出来的想法是,这可能是用 box-shadow 属性实现的,它的语法是这样的:

box-shadow: offset-x offset-y blur spread color position;

color 换成渐变色?试试...
image.png
年轻了,colorlinear-gradient 不是一个世界的,显然是 not ok 的,完全没有效果!

那难道背景是个高斯模糊(最底下是个渐变背景)?或者叠三层(底层纯色,中间一层渐变色,上层卡片),然后用定位处理?好像理论上是可以的。。。

但是总觉得这么实现有点不优雅,属于是莽夫行为 ~  有啥比较优雅点的实现吗?翻了一下 CSS 表,我找到了答案:是的,有!它就是伪元素 ::before 或者 ::after

image.png
来看效果:
image.png
直接上代码:

<body>
  <div class="card-wrapper">
    <div class="card">
      <h2>ian_kevin</h2>
      <p>"_你当像鸟飞往你的山"</p>
    </div>
  </div>
</body>

于是,我对这俩做了深入的了解。

2、伪元素 ::before 和 ::after

什么是伪元素?

我想很多经验丰富的 FEer 应该还记得清除浮动的几个技巧,以前比较常用的就是伪元素:

.clearFix::after,.clearFix::before {
  display: block;
  content: '';
  clear: both;
  visibility: hidden;
  height: 0;
}
.clearFix { zoom: 1;}

CSS中的::before::after伪元素允许你在页面上插入内容,而不需要出现在HTML的结构中。虽然最终的结果实际上并不在DOM中,但它在页面上的显示就像它在DOM中一样,基本上是这样的:

div::before {
  content: "before";
}
div::after {
  content: "after";
}

结果是:

<div>
  before
  <!-- ... -->
  after
</div>

需要注意的是,有些地方写法是单冒号::before 和 :after,实际上这是新旧写法,支持双冒号(::)CSS3语法的浏览器也都支持(:)语法,IE8 只支持单冒号,所以目前建议只使用单冒号以获得最佳的浏览器支持。:: 是较新的格式,旨在区分伪内容和伪选择器。如果你不需要 IE8 的支持,可以随意使用双冒号。

浏览器支持方面:

image.png我们通常会在如下场景下使用它:

  • 生成的内容在元素内容之前,但是又不想额外增加一层DOM。
  • ::after 的内容在源顺序上也是 "后" 的,所以如果自然堆叠在一起,它的位置会在 ::before 之上。

注意,内容仍然在它们所应用的元素里面。这个命名的感觉就像它们可能渲染在元素之前或之后,但实际上是在里面的其他内容之前或之后。

我想最重要的可能是它里面的 content 属性了,它可以放很多类型的值:

  1. 一个字符串content:"一个字符串"; - 特殊字符需要被特别编码为一个unicode entity
  2. 一张图片content:url(/path/to/image.jpg); - 图片会以它的精确尺寸插入,不能调整大小。因为像渐变这样的东西实际上是图像,一个伪元素可以是一个渐变。
  3. nothing: content:""; - 对 clearfixes 和插入图像作为背景图像很有用(设置宽度和高度,甚至可以用 background-size 调整大小)。
  4. countercontent:counter(li); - 对列表的样式非常有用(::marker 也用于此)。
  5. 一个断行符content:"Killing \A Me \A Softly"; - 有时候非常有用。

实际上你还可以插入html,只是没有任何效果。

image.png3、用伪元素实现彩虹渐变效果


image.png上代码:

<div class='db-cycle'></div>

学到了这个,以后一些常规的效果,实际上就不需要去找UI了,省得被骂是IKUN粉~
image.png
end~

相关文章
|
3月前
|
前端开发
CSS中的层级选择器&伪类选择器和伪元素选择器
CSS中的层级选择器&伪类选择器和伪元素选择器
|
5月前
|
前端开发 JavaScript
CSS进阶-CSS选择器高级:伪类与伪元素
【6月更文挑战第13天】本文探讨了CSS伪类与伪元素的核心概念,包括伪类表示元素状态,伪元素创造抽象内容。常见问题涉及二者区别、冒号使用、顺序优先级及`content`属性。实践技巧涵盖`:not()`选择器、`:hover`与子元素伪类结合及自定义形状。通过代码示例展示了高亮悬停行、添加图标、首行样式和链接颜色的应用。理解并熟练运用伪类和伪元素可提升CSS设计效率和灵活性。
166 2
CSS进阶-CSS选择器高级:伪类与伪元素
|
4月前
|
前端开发
css 巧用 ::after 和 ::before 实现竖排分类导航
css 巧用 ::after 和 ::before 实现竖排分类导航
47 1
|
5月前
|
前端开发
CSS基础之伪元素选择器(如果想知道CSS的伪元素选择器知识点,那么只看这一篇就足够了!)
CSS基础之伪元素选择器(如果想知道CSS的伪元素选择器知识点,那么只看这一篇就足够了!)
|
4月前
|
前端开发 JavaScript C++
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
177 0
|
4月前
|
前端开发
css 巧用 ::after 实现 tab 切换动效
css 巧用 ::after 实现 tab 切换动效
40 0
|
5月前
|
前端开发
CSS伪类与伪元素的区别
CSS伪类与伪元素的区别
37 0
|
前端开发
CSS_伪元素_伪类
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.
796 0
|
3月前
|
前端开发
2s 利用 HTML+css动画实现企业官网效果
2s 利用 HTML+css动画实现企业官网效果