Целевые компоненты стиля первого ребенка css

Я использую стилизованные компоненты и хочу настроить таргетинг на первого потомка Text, но не могу этого сделать.

const Text = styled.p`
    font-size: 12px;
    &:first-child {
        margin-bottom: 20px;
    }
`;

... component

return(
   <div>
      <p>I am just regular text</p>
      <p>Me too</p>
      <Text>Hello Joe</Text> // this should have the margin bottom
      <Text>Goodbye</Text >
   </div>
)
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
15
0
56 014
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Между & и :first-child не должно быть пробелов.

&:first-child {
    margin-bottom: 20px;
}

это то, что я тоже думал, и тоже пробовал это, но это не работает

peter flanagan 02.01.2019 16:25

Странный. Правильно ли применяется свойство font-size?

dan 02.01.2019 16:30

Я немного обновил свой вопрос, в теге span есть p, это как-то связано с тем, что он не работает? Извините за то, что не включил ранее.

peter flanagan 02.01.2019 16:37

@dan прав, это было пустое место. Посмотрите эту демонстрацию: Все работает: codeandbox.io/s/8882z34y19

dschu 02.01.2019 17:26

Вы можете проверить обновленный вопрос - поэтому он выключен

peter flanagan 03.01.2019 00:18
Ответ принят как подходящий

Наконец-то я понял вашу проблему. Стилизованный компонент путает с первыми двумя собственными тегами p (с моей точки зрения), и поэтому CSS не применяется.

Я буду использовать такой обходной путь:

const Text = styled.p`
    font-size: 12px;
    color: blue;
    &:nth-child(3) {
        margin-bottom: 20px;
        color: red !important;
    }
`;

Делая это, вы выбираете третьего дочернего элемента (который включает первые два тега p) для CSS

ИЛИ, вы можете сделать что-то вроде этого: добавить имя класса для тега и указать CSS для этого класса.

const Text = styled.p`
  font-size: 12px;
  color: blue;
  &.colors {
    margin-bottom: 20px;
    color: red !important;
  }
`;

 <div>
    <p>I am just regular text</p>
    <p>Me too</p>
    <Text className = "colors">Hello Joe</Text>
    <Text>Goodbye</Text>
</div>

Вот демонстрация

Надеюсь, поможет :)

Я немного обновил свой вопрос, в теге span есть p, это как-то связано с тем, что он не работает? Извините за то, что не включил ранее. Кроме того, когда я использую ваш код, он весь синий, поэтому по какой-то причине первый ребенок не работает

peter flanagan 02.01.2019 16:36

так странно, все еще не работает для меня здесь. В любом случае даст вам оба голоса за

peter flanagan 02.01.2019 16:45

@Thinker lol Я написал почти те же самые слова, а также предоставил демонстрацию, используя два разных цвета. Я думаю, мы могли бы быть css-соулмейтами, .. шучу ..: D

dschu 02.01.2019 17:27

Вы можете проверить обновленный вопрос - поэтому он выключен

peter flanagan 03.01.2019 00:18

@peterflanagan, вы правы. Теперь у меня проблема. Это из-за первых двух тегов p. Я обновил свои решения. Надеюсь, поможет :)

Thinker 03.01.2019 01:07

лучше использовать: last-of-type для определенного стилизованного компонента вместо использования: nth-child, и он отлично работает

export default styled.div`
    :last-of-type {
        background: red;
    }`

const Text = styled.p`
    font-size: 12px;
    color: blue;
    &:nth-child(3) {
        margin-bottom: 20px;
        color: red !important;
    }
`;

Используйте как это

const Text = styled.p`
   font-size: 12px;
    > * {
      &:first-child {
         margin-bottom: 20px;
      }
    }
`;

Это работает хорошо, однако было бы очень полезно обновить ответ, чтобы указать, почему это работает.

Dan 01.09.2021 13:54

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