css - Sass 符号和父样式

标签 css sass

我的 HTML:

<div id="form" class="special">
    <div class="header">My special form</div>
<div>

还有下面的sass代码:

#form {
  .header {
    padding: 20px 10px;
    .special & {
      background: $special-color;
    }
  }
}

产生:

#form .header {
  padding: 20px 10px;
}

.special #form .header {
  background: #7cc52c;
}

然而,这并没有给我想要的结果。我想要的不是上面的 CSS:.special#form .header (元素 form 具有special ,而不是元素 .special 具有 form )

最佳答案

您可以通过这种方式实现您想要的 css。

#form {
  .header {
    padding: 20px 10px;
    @at-root #{selector-replace(&, '#form', '.special#form')} {
      background: blue;
    }
  }
}

此 scss 编译为以下 css

#form .header {
  padding: 20px 10px;
}

.special#form .header {
  background: blue;
}

使用selector-replace 函数,您可以轻松更改复合选择器中需要更改的部分。在此示例中,将用 .special#form 替换 #form@at-root 指令确保选择器位于顶层,而不是嵌套在任何选择器中。

当父选择器像您在问题中所做的那样附加和嵌套时,它反转选择器。在某些情况下这可能会有用,其中一种情况是使用 Modernizr 时,如 here 上的一张幻灯片所示。

希望这对您有所帮助。

关于css - Sass 符号和父样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41672906/

相关文章:

jquery - 使用 translateX 100% 转换一个 div,然后将它推回到 View 中 x 个像素

sass - Primeflex 变量 $lg

css -::after 伪元素宽度与内容不同

javascript - 我的 jQuery 链接不正确

javascript - 最小化 Firefox 和 Chrome 中的浏览器窗口会在页面右侧添加空白

css - 具有多个属性的 SCSS rem mixin

sass - Gulp 内联源映射不起作用

javascript - 如何将每个 scss 文件编译到其自己的文件夹中而不将它们合并为一个?

html - 侧边栏和内容但没有内容隐藏在侧边栏内容下

javascript - 使用 Javascript 的移动重定向 URL