上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

踩坑 ::after ::before CSS伪元素不起作用解决办法

[复制链接]
  • TA的每日心情
    慵懒
    11 小时前
  • 签到天数: 811 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1555

    积分

    荣誉开发者

    积分
    1555

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-11-11 01:04:54 | 显示全部楼层 | 阅读模式

    省流版

    问题

    这段CSS不起作用是为什么?

    div::after {
      margin-top: .5rem;
      margin-bottom: .25rem;
      border-color: #eee;
      border-top: 1px solid #dee2e6;
    }

    GPT4回答

    CSS中的伪元素 ::after 用于在元素的内容之后插入一些内容。然而,在你的代码中,伪元素 ::after 没有设置 content 属性,这是必需的。如果没有 content 属性,伪元素实际上是不会显示的。

    要让你的CSS起作用,你需要添加 content 属性,即使是一个空字符串。

    div::after {
      content: "";  /* 这是必需的 */
      margin-top: .5rem;
      margin-bottom: .25rem;
      border-color: #eee;
      border-top: 1px solid #dee2e6;
    }

    MDN翻译之坑

    中文版MDN(https://developer.mozilla.org/zh-CN/docs/Web/CSS/::after
    对于::after伪元素仅提到通常会配合content属性

    CSS伪元素::after用来创建一个伪元素,作为已选中元素的最后一个子元素。**通常**会配合content属性来为该元素添加装饰内容。这个虚拟元素默认是行内元素。

    而英文版MDN (https://developer.mozilla.org/en-US/docs/Web/CSS/::after
    对于::after伪元素虽然也提到often with content property

    In CSS, ::after creates a pseudo-element that is the last child of the selected element. It is often used to add cosmetic content to an element with the content property. It is inline by default.

    但在下方还提到::after伪元素如果没有content property 实际上会和display: none表现相同

    If the content property is not specified, has an invalid value, or has normal or none as a value, then the ::after pseudo-element is not rendered. It behaves as if display: none is set.

    真是踩了巨坑,为了省力对着中文版MDN查了半天,还以为::after伪元素有什么特殊规则,会忽略某些CSS,结果查了半天也没查出个所以然。
    然后一开始去问了GPT3.5,GPT3.5也乱答一通说什么有可能是CSS被覆盖了、选择器样式没写对之类的
    【实际上没写content属性,DOM中根本不出现::after伪元素】。
    感觉GPT3.5明显在乱说,于是再去问GPT4,便得到了开头省流版的回答。
    尝试一番,果真如此(GPT4 NB)
    然后再回看中文MDN,再次仔细阅读还是没发现必须使用content属性。再次查阅英文版发现提了一句不用content就相当于display:none……
    真是卧了个大槽。
    (不知是翻译的锅,还是一开始英文版也没提,勘误后没来得及翻译从而造成中英文差异)

    结语

    GPT4 NB,大大提升debug效率、学习效率,要是放在以前遇到这种问题真的不敢想象不知要多久才能得到准确答案……
    (写代码真不建议用GPT3.5,纯粹浪费时间)
    有条件还是查阅英文文档吧,毕竟英文是原生语言【

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4188

    回帖

    4055

    积分

    管理员

    积分
    4055

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-11-11 10:14:22 | 显示全部楼层
    yiba有英文文档还是看英文文档好一点,我也踩过很多这坑,一般看完中文要再看下英文,简单的就直接看英文

    中文的文档,好多项目都是老的
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    11 小时前
  • 签到天数: 811 天

    [LV.10]以坛为家III

    31

    主题

    552

    回帖

    1555

    积分

    荣誉开发者

    积分
    1555

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2023-11-11 12:11:07 | 显示全部楼层
    王一之 发表于 2023-11-11 10:14
    yiba有英文文档还是看英文文档好一点,我也踩过很多这坑,一般看完中文要再看下英文,简单的就直接看英文

    ...

    话说哥哥 这md排版样式是不是越改越丑了……
    回复

    使用道具 举报

  • TA的每日心情
    开心
    3 小时前
  • 签到天数: 213 天

    [LV.7]常住居民III

    305

    主题

    4188

    回帖

    4055

    积分

    管理员

    积分
    4055

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2023-11-11 18:03:35 | 显示全部楼层
    steven026 发表于 2023-11-11 12:11
    话说哥哥 这md排版样式是不是越改越丑了……

    啊?怎么说,没改过啊
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表