【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~

相关文章
|
1月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
伪类:伪类这个叫法源自于它们跟类相似,但实际上并没有类会附加到标记中的标签上。 伪类分为两种(以及新增的伪类选择器): UI伪类:会在HTML元素处于某种状态时(例如:鼠标指针位于连接上),为该元素应用CSS样式。 :hover 结构化伪类:会在标记中存在某种结构上的关系时 例如: 某元素是一组元素中的第一个或最后一个,为该元素应用CSS样式。 :not和:target(CSS3新增的两个特殊的伪类选择器)
145 1
|
前端开发
CSS中的层级选择器&伪类选择器和伪元素选择器
CSS中的层级选择器&伪类选择器和伪元素选择器
|
前端开发
CSS基础之伪元素选择器(如果想知道CSS的伪元素选择器知识点,那么只看这一篇就足够了!)
CSS基础之伪元素选择器(如果想知道CSS的伪元素选择器知识点,那么只看这一篇就足够了!)
|
前端开发
css 巧用 ::after 和 ::before 实现竖排分类导航
css 巧用 ::after 和 ::before 实现竖排分类导航
119 1
|
前端开发 JavaScript C++
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)
2777 0
|
前端开发
css 巧用 ::after 实现 tab 切换动效
css 巧用 ::after 实现 tab 切换动效
145 0
|
前端开发
CSS伪类与伪元素的区别
CSS伪类与伪元素的区别
168 0
|
5月前
|
存储 自然语言处理 前端开发
抖音快手小红书虚拟评论截图生成器,模拟对话制作工具,html+js+css
这是一款纯前端实现的多平台虚拟评论生成器,支持抖音、快手、小红书风格,适用于产品演示与UI设计。采用Vanilla JS与Flexbox布局,利用IndexedDB存储数据,CSS Variables切换主题。
|
5月前
|
存储 前端开发 安全
病历单生成器在线制作,病历单生成器app,HTML+CSS+JS恶搞工具
本项目为医疗病历模拟生成器,旨在为医学教学和软件开发测试提供数据支持,严格遵守《医疗机构病历管理规定》。
|
5月前
|
存储 前端开发 JavaScript
仿真银行app下载安装, 银行卡虚拟余额制作app,用html+css+js实现逼真娱乐工具
这是一个简单的银行账户模拟器项目,用于学习前端开发基础。用户可进行存款、取款操作,所有数据存储于浏览器内存中
下一篇
oss云网关配置