如何在样式组件中使用关节选择器

时间:2019-02-14 07:06:58

标签: css reactjs css3 styled-components

我有旧式CSS,如下所示:

.btn_1 {
    color: #fff;
    background: #004dda;
    display: inline-block;
}
.btn_1:hover {
  background-color: #FFC107;
  color: #222 !important;
}
.btn_1.full-width {
  display: block;
  width: 100%;
}

我想迁移到React中使用样式化组件(CSS-in-JS样式)。

这是我到目前为止的迁移:

.btn_1 {
    color: #fff;
    background: #004dda;
    display: inline-block;
    :hover {
        background-color: #FFC107;
        color: #222 !important;
    }
}

但是在样式组件中是否有诸如.btn_1.full-width这样的选择器的解决方案,还是我应该为此创建另一个CSS块?


我认为做这样的事情(或更好)是很酷的:

.btn_1 {
    ${this}.full-width {
        display: block;
        width: 100%;
   }
}

但是我似乎无法在文档中找到解决方案。您是否知道这怎么可能?或者甚至是个好主意?

2 个答案:

答案 0 :(得分:2)

来自official styled components documentation

对于复杂的选择器模式,可使用&符号(&)来引用主组件。这里是其潜在用途的更多示例:

const Thing = styled.div.attrs({ tabIndex: 0 })`
  color: blue;

  &:hover {
    color: red; // <Thing> when hovered
  }

  & ~ & {
    background: tomato; // <Thing> as a sibling of <Thing>, but maybe not directly next to it
  }

  & + & {
    background: lime; // <Thing> next to <Thing>
  }

  &.something {
    background: orange; // <Thing> tagged with an additional CSS class ".something"
  }

  .something-else & {
    border: 1px solid; // <Thing> inside another element labeled ".something-else"
  }
`

答案 1 :(得分:0)

您可以使用&符号来链接嵌套的选择器。

.btn_1 {
    &.full-width {
        display: block;
        width: 100%;
   }
}