在 SASS 嵌套中使用 ":not" 伪类

Posted

技术标签:

【中文标题】在 SASS 嵌套中使用 ":not" 伪类【英文标题】:Use ":not" pseudoclass within SASS nesting 【发布时间】:2022-01-15 14:57:17 【问题描述】:

我正在尝试将一些纯 CSS 转换为 SCSS,以便我可以利用嵌套。下面的代码是我想为一堆表单字段输入类型定义样式的示例。在下面的纯 CSS 中,我设置了默认值以及字段的 :focus 状态。除了一个特定的表单字段(我的全局标题中的一个搜索字段),我使用的是:not 否定伪类选择器。

input.text, 
input.title, 
input[type=email], 
input[type=password], 
input[type=tel], 
input[type=text], 
select, 
textarea 
    border: 2px solid #c3cbd6;


input.text:focus, 
input.title:focus, 
input[type=email]:focus, 
input[type=password]:focus, 
input[type=tel]:focus, 
input[type=text]:not(div.global-search > form > div > input.et_pb_s):focus, 
select:focus, 
textarea:focus 
    border: 2px solid #008ed4;

这是我对第一个块的嵌套 SCSS 的转换:

input.text, 
input.title, 
input[type=email], 
input[type=password], 
input[type=tel], 
input[type=text], 
select, 
textarea 
    border: 2px solid #c3cbd6;
    
    &:focus 
        border: 2px solid #008ed4;
    

但是第二个 CSS 块转换为 SCSS 比较棘手,因为我使用 :not 选择器来排除搜索字段与所有其他表单一样具有焦点状态。

如何在 SCSS 中做到这一点?

【问题讨论】:

【参考方案1】:

为 input[type=text] 分离 SCSS,并用 :not 选择器编写它

input.text, 
input.title, 
input[type=email], 
input[type=password], 
input[type=tel], 
select, 
textarea 
    border: 2px solid #c3cbd6;
    
    &:focus 
        border: 2px solid #008ed4;
    


input[type=text] 
 &:not(div.global-search > form > div > input.et_pb_s) 
 &:focus 
        border: 2px solid #008ed4;
 


【讨论】:

谢谢。看起来它应该可以工作,但我收到一个解析错误:在 & 符号上的 &(div.global-search > form > div > input.et_pb_s) 上失败。 @user3169905 对此感到抱歉。我不应该分开 :not 和 (div),我的错。我已经编辑了我的答案。 感谢您的编辑。这样可行! :) 别担心,很高兴我能帮上忙 :)

以上是关于在 SASS 嵌套中使用 ":not" 伪类的主要内容,如果未能解决你的问题,请参考以下文章

在嵌套的 mixin 中使用 SASS @each 变量

使用 SASS 嵌套的优点

sass的嵌套

Sass 嵌套规则

SASS 中的嵌套 mixins 或函数

如何使用媒体查询或运算符使 SASS 嵌套嵌套媒体查询工作