Стилизация с помощью Styled Components в React

В предыдущих уроках мы рассмотрели приемы стилизации с использованием глобального CSS и инлайновой стилизации. В этом уроке мы поработаем с более эффективным для больших приложений подходом - использованием библиотеки styled-components.

Итак, возьмем наш компонент без CSS стилей, который мы использовали в прошлых уроках:

function App() { return ( <div> <p>text</p> <p>text</p> <p>text</p> </div> ); }

Для начала установим библиотеку Styled Components:

npm install --save styled-components

Затем импортируем необходимый нам пакет в компонент App:

import styled from 'styled-components';

Теперь мы можем оборачивать теги в стили и применять их как React компоненты, но уже с прикрепленными прямо в JS стилями. Такой подход еще называют CSS в JS.

Давайте стилизуем первый абзац. Для этого перед функцией App после строк импорта создадим компонент Text1. В объекте styled из библиотеки нам нужен абзац, поэтому мы пишем styled.p. Затем, в шаблонной строке перечисляем необходимые нам CSS стили - как в обычном CSS:

const Text1 = styled.p` color: orangered; font-weight: bold; `;

Как видите, мы используем здесь чистый CSS в виде шаблонных строк, что очень удобно. Подобным образом мы можем использовать медиа-запросы, псевдоэлементы, селекторы и другой функционал CSS.

Теперь внутри функции компонентa App заменим тег p на созданный нами компонент Text1 с CSS стилями:

<Text1>text</Text1>

Подобным образом стилизуем второй и третий абзацы. Для этого создадим компоненты Text2 и Text3:

const Text2 = styled.p` font-style: italic; color: brown; `; const Text3 = styled.p` background-color: orange; font-weight: bold; color: white; `;

И, наконец, стилизуем наш див. Для этого создадим компонент и назовем его Container:

const Container = styled.div` width: 200px; border: 2px solid brown; padding: 10px; text-align: center; `;

Заменим все наши теги созданными компонентами:

import styled from "styled-components"; const Container = styled.div` width: 200px; border: 2px solid brown; padding: 10px; text-align: center; `; const Text1 = styled.p` color: orangered; font-weight: bold; `; const Text2 = styled.p` font-style: italic; color: brown; `; const Text3 = styled.p` background-color: orange; font-weight: bold; color: white; `; function App() { return ( <Container> <Text1>text</Text1> <Text2>text</Text2> <Text3>text</Text3> </Container> ); }

Благодаря такому подходу можно создавать многократно используемые компоненты со стилями.

Если вы откроете сгенерированную верстку в панели разработчика в браузере, то вы увидите, что у каждого компонента сгенерированы свои уникальные классы. Таким образом, нам не нужно больше беспокоиться о конфликтах между классами отдельных компонентов.

Подобным образом можно стилизовать компоненты, используя, к примеру, библиотеку Emotion.

Возьмите React компонент, который вы делали в задаче к прошлому уроку, стилизуйте его, использовав библиотеку Styled Components.



Чат с GPT Компилятор