可以在媒体查询中删除 ::after 伪元素吗?

Posted

技术标签:

【中文标题】可以在媒体查询中删除 ::after 伪元素吗?【英文标题】:Can ::after pseudo elements be removed inside media queries? 【发布时间】:2017-07-08 06:01:19 【问题描述】:

有没有一种简单的方法可以删除媒体查询中的 ::after 伪元素?

例如,当浏览器宽度低于 980 像素时,我可以完全删除这个 ::after 伪元素吗?或者当浏览器宽度缩小到 980 像素以下时,我应该用老式的方式隐藏原始类并显示一个新类吗?专业人士将如何解决这个问题?

.navigation_unit > a::after 
    content: "";
    position: absolute;
    box-sizing: border-box;
    width: 100%;
    height: .0625rem;
    bottom: 0;
    left: 0;
    background-color: rgb(0,0,238);
    transform: scaleX(0);
    transition: all 0.3s ease-in-out 0s;

【问题讨论】:

【参考方案1】:

最简单的选择是在媒体查询中将伪元素的content property 值设置为none。这样做不会渲染伪元素。

@media (max-width: 600px) 
  .navigation_unit > a::after 
    content: none;
  

如相关规范所述,nonenormal 值将导致不生成伪元素。

12.2 The 'content' property

none - 没有生成伪元素。

normal - 对于 :before:after 伪元素,计算为 none

下面是一个基本示例:

p::before 
  content: 'Psuedo-element... ';
  color: #f00;


@media (max-width: 600px) 
  p::before 
    content: none;
  
<p>Resize this window to less than 600px</p>

【讨论】:

这真的有效吗?我以前从未见过content: none; content: none; "none 没有生成伪元素。"绝妙的解决方案! @JakeParis - 是的,它有效,请参阅 the example 我添加以供参考。 @JoshCrozier 我们使用 CSS3,但所有链接都指向 css2.1 或 css2.2 规范。我从来没有真正理解为什么会这样。 W3 发布的数字与我们使用的数字不匹配吗? @DR01D - 我通常会链接到 CSS2 规范,因为它们仍然相关,并且大多数时候更容易找到。一些规范肯定已经过时了,但是 CSS2 中的大多数核心概念仍然完全适用于 CSS3(否则它们会破坏向后兼容性)。通常,唯一的区别是添加了新的细节。 Here is a link 到相关的 CSS3 content 规范,如您所见,它更详细。【参考方案2】:

足够简单的移动优先解决方案:

.navigation_unit a:after 
   ...
   /* everything except content: '' */


@media (min-width:980px) 
    .navigation_unit > a:after 
        content: '';
    

【讨论】:

以上是关于可以在媒体查询中删除 ::after 伪元素吗?的主要内容,如果未能解决你的问题,请参考以下文章

:before 和 :after 伪元素可以从父元素继承高度吗?

可以使用带有 CSS ::after 和 ::before 标签的媒体查询吗?

我可以使用兄弟组合器定位 :before 或 :after 伪元素吗?

你可以对 :before/:after 伪元素 (content:url(image)) 应用宽度吗?

知道css有个content属性吗?有什么作用?有什么应用?可以伪类清除浮动

通用选择器 * 和伪元素