Псевдоклассы до и после, используемые со стилями-компонентами

Как правильно применять псевдоклассы :before и :after к стилизованным компонентам?

Я знаю что ты можешь использовать

&:hover {}

для применения псевдокласса :hover к стилизованному компоненту.

Работает ли это для всех псевдоэлементов, таких как до и после?

Я пробовал использовать стратегию &:before и &:after с некоторыми довольно сложными примерами, и я не уверен, что мои попытки не работают, потому что у меня что-то не так с моим примером, или он просто так не работает.

Есть ли у кого-нибудь представление об этом? Спасибо.


person archae0pteryx    schedule 24.08.2017    source источник
comment
Это была твоя проблема? stackoverflow.com/a/46373741/5515589   -  person shlgug    schedule 08.03.2020
comment
Уже так давно не припомню!   -  person archae0pteryx    schedule 08.03.2020


Ответы (4)


Псевдоселекторы в styled-components работают так же, как и в CSS. (или, скорее, Sass). Все, что не работает, скорее всего, является проблемой в вашем конкретном коде, но это трудно отладить, не видя фактического кода!

Вот пример использования простого :after:

const UnicornAfter = styled.div`
  &:after {
    content: " ????";
  }
`;

<UnicornAfter>I am a</UnicornAfter> // renders: "I am a ????"

Если вы опубликуете свой код, я, скорее всего, смогу помочь отладить вашу конкретную проблему!

person mxstbr    schedule 24.08.2017
comment
В этом нет необходимости. Спасибо за разъяснения! Мне просто нужно было точно знать, что это что-то с моей стороны ... =) Я не был уверен, что &:before и &:after работают. Я не смог найти точного ответа через Google ... так что ... Спасибо! - person archae0pteryx; 25.08.2017
comment
Не беспокойтесь, рады помочь! - person mxstbr; 26.08.2017
comment
@mxstbr Привет, mxstbr! У меня проблема с динамической рендерингом содержимого Pseudo-before. я делаю не так? или это то, что не поддерживает стилизованные компоненты. stackoverflow.com/questions/46339034/ - person ; 22.09.2017
comment
Можем ли мы подать заявку после и до любого конкретного ребенка (например, первенца)? - person Sanjay Joshi; 22.05.2018

Это напечатает треугольник в середине div.

const LoginBackground = styled.div`
  & {
    width: 30%;
    height: 75%;
    padding: 0.5em;
    background-color: #f8d05d;
    margin: 0 auto;
    position: relative;
  }
  &:after {
    border-right: solid 20px transparent;
    border-left: solid 20px transparent;
    border-top: solid 20px #f8d05d;
    transform: translateX(-50%);
    position: absolute;
    z-index: -1;
    content: "";
    top: 100%;
    left: 50%;
    height: 0;
    width: 0;
  }
`;
person Nalan Madheswaran    schedule 30.06.2018

Это хороший и простой ответ:

https://stackoverflow.com/a/45871869/4499788 от mxstbr

но для элементов, требующих более сложной логики, я предпочитаю такой подход:

const Figure = styled.div`
  ${Square}:before, 
  ${Square}:after,
  ${Square} div:before, 
  ${Square} div:after {
    background-color: white;
    position: absolute;
    content: "";
    display: block;
    -webkit-transition: all 0.4s ease-in-out;
    transition: all 0.4s ease-in-out;
  }
`;
person Adam Kochanski    schedule 07.10.2020
comment
я не могу заставить это работать с @ эмоции / babel-plugin 11.3.0 github. ru / Emotion-JS / Emotion / issues / 2354 - person Daniel Lizik; 19.04.2021

person    schedule
comment
Вопрос касался стилизованных компонентов, и вы отвечаете, используя простой javascript. Более того, ваше решение вообще не является хорошей практикой (с использованием jquery, добавлением к dom и т. Д.). Также подумайте об улучшении формата вашего ответа: вы помещаете все в раздел кода. - person Julien Sanchez; 19.08.2019