CSS 中的 :before 和 :after 的一点小知识点

html-css019

CSS 中的 :before 和 :after 的一点小知识点,第1张

:before 选择器在被选元素的内容前面插入内容。

定义中提到,是在被选元素的 内容 前面插入内容,如下图,div 是一个容器,div 中的内容是 testDiv元素 ,css 中的 :before 和 after 都显示在 div 内部,二者分别位于 testDiv元素 内容的前后。

所以可以看到,伪元素也是被选元素的内容,只是会插入到被选元素原本内容的前后。

插入的伪元素默认是 display 属性,如果想要为伪元素设置宽高等,需要修改伪元素的 display 属性为 inline-block 或者 block 。

伪元素插入的位置是被选元素的 内容 的前或者后,因此本质上伪元素也是被选元素的子元素。所以定位时,被选元素就是伪元素的父元素。

如图,被选元素 test-div 设置了 position: relative ,外部元素 test-wrapper 也设置了 position: relative ,然后对被选元素的伪元素 :after 设置定位,可以看到,伪元素的位置是根据 test-div 来定位的,因此,可以验证 被选元素就是伪元素的父元素 这句话。

方法和详细的操作步骤如下:

1、第一步,打开软件并创建一些默认复选框,见下图,转到下面的步骤。

2、第二步,执行完上面的操作之后,在顶部样式标签上设置输入样式,将输入的显示属性设置为none,删除默认的单选框,然后设置每个单选框的边距,见下图,转到下面的步骤。

3、第三步,执行完上面的操作之后,继续设置下面的样式,设置“label”标签的伪元素before和after,然后将原始复选框更改为状态属性,“

 checked + label”设置为红色的实心框,并取消选中状态,“ label :: after”为白色空心框,见下图,转到下面的步骤。

4、第四步,执行完上面的操作之后,打开浏览器,可以看到设置的样式,去掉了默认样式,见下图。这样,就解决了这个问题了。

使用vant的步进器,同时页面又使用了rem作为度量单位,浏览器一直展示没问题,直到某天测试突然拿出一部安卓手机,说这里展示的不对

正常的展示应该是这样的

肯定是什么样式兼容性出问题了

通过chrome开发者工具,看到步进器的dom结构如下

对应的css如下:

网上查了一下before、after的相关兼容性问题,果然有人遇到过,某些机型某些安卓系统下,before、after中的0.01rem不展示的问题

那么改成0.011rem试一下,果然就解决了!

踩过的坑发出来给大家参考一下,少走弯路