【问题标题】:sass nesting doesn't work as I thought it didsass 嵌套不像我想象的那样工作
【发布时间】:2020-09-16 13:39:56
【问题描述】:

我正在尝试学习如何使用 Sass,但我似乎无法嵌套。有人可以向我解释我做错了什么。我知道这是一个真正的初学者问题,但我不明白我做错了什么。任何帮助将不胜感激。

.header {
  display: flex;
  height: 10vh;
  background-color: #131921;
  position: sticky;
  top: 0;
  z-index: 100;
  align-items: center;

  header__logo {
    width: 100px;
  }
} 
<div className="header">
  <img
    className="header__logo"
    src="https://pngimg.com/uploads/amazon/amazon_PNG11.png"
    alt="amazon_logo"
   />

  <div className="header__search">
    <input className="header__searchInput" type="text" />
    <SearchIcon />
  </div>
  <div className="header__nav">
    <div className="header__boxes">
      <span className="header__boxesFirstLine">hello</span>
      <span className="header__boxesSecondLine">sign in</span>
    </div>
    <div className="header__boxes">
      <span className="header__boxesFirstLine">returns</span>
      <span className="header__boxesSecondLine">& orders</span>
    </div>
    <div className="header__boxes">
      <span className="header__boxesFirstLine">your</span>
      <span className="header__boxesSecondLine">prime</span>
    </div>
  </div>
</div>

我的印象是,为了设置标题 img 的样式,它有一个 header__logo 类,我可以将它嵌套在我的 sass 文件中的 .header 括号中,但这显然是错误的,因为它没有出现在生成的 App.css 文件,并且不在开发人员工具中。

对不起,我知道这是一个菜鸟问题。

【问题讨论】:

  • 你在 header__logo (.header__logo ) 之前错过了 .
  • 打错了,你忘了加上.来表示类名header__logo { width: 100px; }应该是.header__logo { ]
  • 投票结束,因为这是一个错字。

标签: css reactjs sass material-ui


【解决方案1】:

我正在添加一个快速答案,尽管这是一个拼写错误(缺少 . 作为类名),但因为您正在学习。

由于您的所有子元素都使用 BEM 样式作为类名,您可以使用 &amp; 引用父元素:

.header {
  
  /* set the parent as a variable to reference for grandchildren */  
  $p : &;
    
  display: flex;
  height: 10vh;
  background-color: #131921;
  position: sticky;
  top: 0;
  z-index: 100;
  align-items: center;

  &__nav {
      /* styles */
      
      #{$p}__boxes {
          /* styles */
      }
  } 

  &__logo {
    width: 100px;
  }

  &__search {
      /* styles*/
 
  }

  &__boxes {
      /* styles*/
 }

}

这将编译为:

.header {
  display: flex;
  height: 10vh;
  background-color: #131921;
  position: sticky;
  top: 0;
  z-index: 100;
  align-items: center;
}
.header__nav {
  /* styles */
}
.header__nav .header__boxes {
  /* styles */
}
.header__logo {
  width: 100px;
}
.header__search {
  /* styles*/
}
.header__boxes {
  /* styles*/
}

【讨论】:

  • 该死的......是的,现在我想起来了。感谢您不投票,我知道这非常简单。感谢您的帮助
  • @MarkScholes 我稍微更新了 SCSS 以包含一个变量来保存父元素,以便您可以在孙元素上使用它,例如 header__boxes,因为它们是 nav 类的子元素。
  • 我不知道你所说的“/* 将父级设置为孙辈引用的变量 */ $p : &;”是什么意思
  • 基本上,&amp; 指的是直接父级。因此,&amp;__element 将编译为.parentclass__element,但是,对于&amp;__element 的子代,如果您使用&amp;__child,它将编译为.parentclass__element__child,但在您的标记中,您使用的是header__element 的孙子代。因此,您所做的是将&amp; 设置为一个变量以始终引用顶级元素。因此,无论您如何嵌套 #{$p},都将始终引用 .header
  • 查看代码的__nav__boxes 部分以查看。
猜你喜欢
  • 2019-04-19
  • 1970-01-01
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2016-02-27
  • 2015-05-16
相关资源
最近更新 更多