所有非输入字段的 CSS 选择器

标签 css sass css-selectors

我正在尝试在我的 CSS 中为正文下的所有非输入字段应用自定义字体(顺便说一句,我使用的是 SASS)。我怎么做?这不起作用:

body {
    &:not(input,select,textarea) { 
        font-family:'Roboto', sans-serif; 
    }
}

编辑

我最初发布这个问题是因为我怀疑(错误地)输入字段继承了主体的字体样式。一般情况并非如此。但是,我使用的是 Twitter Bootstrap框架,事实证明他们已经在输入字段上设置了 font-family:inherit;(这迫使他们继承在 body 元素上设置的字体)。

最佳答案

我可能应该在这个答案前加上一个注释,通常没有必要——而且不是一个好主意——将 font-family 样式应用于 body 的每个后代,因为大多数元素默认情况下都会继承字体属性(如果我没记错的话,表单元素和表格除外)。

通过将 font-family 强行应用到 body 的每个后代,即 body *,你有效地阻止了所有的继承后代,即使您尝试在其中一个上设置不同的字体系列以期望其后代继承。

应该font-family 样式应用于 body 并允许其后代有机地继承它(并且可能做与单独的选择器或规则集中的表元素相同)。正如我所提到的,您试图排除的表单元素,即 input,select,textarea,无论如何在大多数浏览器中都不会默认继承字体。

也就是说,您的 SCSS 不起作用的原因是 :not() 不接受 CSS 中的选择器列表。这是 jQuery 的一个特性。引用我自己对 this question 的回答:

First and foremost, to answer the question directly: you can't pass a comma-separated selector list. For example, while the given selector works in jQuery as demonstrated in the fiddle, it isn't valid CSS3:

/* If it's not in the Α, Β or Γ sectors, it's unassigned */
#sectors > div:not(.alpha, .beta, .gamma)

Is there a workaround for this if I really want to avoid relying on a script?

谢天谢地,在这种情况下,有。您只需要一个接一个地链接多个 :not() 选择器,以使其成为有效的 CSS3:

#sectors > div:not(.alpha):not(.beta):not(.gamma)

因此,您的问题的解决方案是链接多个 :not() 选择器:

body {
    :not(input):not(select):not(textarea) { 
        font-family:'Roboto', sans-serif; 
    }
}

请注意,我在这里没有使用 & 组合子。此 SCSS 将编译为以下 CSS,其中 body 后面的空格是后代组合符,:not() 表示除被排除元素之外的任何元素:

body :not(input):not(select):not(textarea) { 
    font-family: 'Roboto', sans-serif; 
}

使用 & 将导致 :not() 选择器直接附加到 body 上:

body:not(input):not(select):not(textarea) { 
    font-family: 'Roboto', sans-serif; 
}

这意味着您将匹配 body,而不是它的任何后代。它也是一个毫无用处的冗长选择器,因为 body 元素永远不能是 inputselect文本区域。但是,同样,您不妨继续将此声明应用于 body。除非绝对必要,否则应避免将继承的声明应用于所有元素。

关于所有非输入字段的 CSS 选择器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23187021/

相关文章:

javascript - 格式化下拉框中的文本

css - 针对具有两个不同父类的同一个 child

css - 如何覆盖scss文件中的宽度和高度值

python - 我应该使用哪个(对于基于 python 的站点)? sass、compass、switchcss...替代方案?

internet-explorer - CSS3 PIE 与 :first-child 冲突

javascript - 修复 CSS 定位和缩放

css - 当我添加视频标题 -chrome 时,背景不会保持固定

CSS 框悬停弹出窗口出现在其他框后面

python - 循环单击表中的 anchor 标记,但使用 css 选择器 python selenium

html - 第 n 个 child 没有按预期工作