Как использовать совместные селекторы в styled-component

У меня есть устаревший 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%;
}

Я хочу перейти на использование стилизованных компонентов (стиль CSS-in-JS) в React.

Это моя миграция до сих пор:

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

но есть ли решение в styled-components для таких селекторов, как .btn_1.full-width, или я должен просто создать для этого еще один блок CSS?


Я думаю, было бы здорово сделать что-то вроде этого (или лучше):

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

но я не могу найти решение в документах. У вас есть идеи, как это возможно, или это даже хорошая идея?

Для селекторов соединение перейдите по этой ссылке stackoverflow.com/questions/3772290/…. Обратите внимание, что нет необходимости ${this}

Mulli 14.02.2019 08:10

Пробовали ли вы использовать амперсанд &, это обычный способ для большинства препроцессоров CSS.

Ginger CSS Wizard 14.02.2019 08:11

@Mulli Спасибо, но я ищу решение styled-components. Я четко знаю, как это сделать в css3.

Mehrad77 14.02.2019 08:14

@GingerCSSWizard Чувак, &.full-width сработало просто отлично! Интересно, почему никто не говорит об этом в документации styled-components. Не могли бы вы написать ответ для будущих посетителей?

Mehrad77 14.02.2019 08:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
3
4
6 368
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать амперсанд для объединения вложенных селекторов.

.btn_1 {
    &.full-width {
        display: block;
        width: 100%;
   }
}
Ответ принят как подходящий

от официальная документация по стилизованным компонентам

Для сложных шаблонов селектора можно использовать амперсанд (&) для возврата к основному компоненту. Вот еще несколько примеров его потенциального использования:

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"
  }
`

@Mehrad77 Верно! :-)

Mulli 14.02.2019 09:21

Другие вопросы по теме