为啥 SASS 不能像 `&::not(:first-child)` 那样编译 pseudo_expr?

Posted

技术标签:

【中文标题】为啥 SASS 不能像 `&::not(:first-child)` 那样编译 pseudo_expr?【英文标题】:Why can't SASS compile pseudo_expr like `&::not(:first-child)`?为什么 SASS 不能像 `&::not(:first-child)` 那样编译 pseudo_expr? 【发布时间】:2015-02-23 00:05:55 【问题描述】:

我得到了css2sass的以下sn-p(转换为SCSS)

.floating-label-form-group 
  position: relative;
  margin-bottom: 0;
  padding-bottom: .5em;
  border-bottom: 1px solid #e1e1e1;
  input, textarea 
    z-index: 1;
    position: relative;
    padding-right: 0;
    padding-left: 0;
    border: 0;
    border-radius: 0;
    font-size: 1.5em;
    background: 0 0;
    box-shadow: none!important;
    resize: none;
  
  label 
    display: block;
    z-index: 0;
    position: relative;
    top: 2em;
    margin: 0;
    font-size: .85em;
    line-height: 1.764705882em;
    vertical-align: middle;
    vertical-align: baseline;
    opacity: 0;
    -webkit-transition: top .5s ease,opacity .5s ease;
    -moz-transition: top .5s ease,opacity .5s ease;
    -ms-transition: top .5s ease,opacity .5s ease;
    transition: top .5s ease,opacity .5s ease;
  
  &::not(:first-child) 
    padding-left: 14px;
    border-left: 1px solid #e1e1e1;
  

当我使用 SASS 3.4.9 编译它时,它会抱怨:

Error: Invalid CSS after "&::not(": expected pseudo_expr, was ":first-child)"

预期的 CSS 代码应如下所示:

.floating-label-form-group::not(:first-child)
     padding-left:14px;border-left:1px solid #e1e1e1

但是,SASS 似乎不知道如何将&::not( 编译成 CSS。有没有人知道如何解决这个问题?

【问题讨论】:

【参考方案1】:

其实,Sass 是对的:那确实是无效的 CSS。 :not() 是伪类,不是伪元素,所以应该只有一个冒号:

  &:not(:first-child) 
    padding-left: 14px;
    border-left: 1px solid #e1e1e1;
  

【讨论】:

【参考方案2】:

在 :first-child 周围加上引号,以下代码在 Rais 4 中对我有用

.floating-label-form-group::not(':first-child') 
    padding-left: 14px;
    border-left: 1px solid #eee;

【讨论】:

这会生成无效的 CSS。 .floating-label-form-group:not(:first-child) padding-left: 14px;左边框:1px 实心#eee; 这是一个正确的代码。

以上是关于为啥 SASS 不能像 `&::not(:first-child)` 那样编译 pseudo_expr?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 NPMInstall 不能构建这个 node-sass 依赖?

为啥 Go 有一个“bit clear (AND NOT)”运算符?

SASS中的链接选择器[重复]

在 npm 脚本中运行 2 个命令(nodemon && sass --watch)

使用SASS除了要安装Koala以外,为啥要安装Ruby

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