Начиная
Стилизованные компоненты помогают разделять вопросы стиля и архитектуры элементов и делают компоненты более читабельными. Кроме того, когда у вас есть компоненты, стили которых зависят от JavaScript, стилизованные компоненты возвращают управление этими состояниями обратно в CSS вместо использования множества условных имен классов.
Он используется большими командами и огромным количеством разработчиков по всему миру, чтобы приблизить свои компоненты React к их стилям.
Нам просто нужно установить его в наш проект React (я использую приложение create-react-app)
npm install styled-components --save
You don’t need more configuration just installing it will make it work on any React project.
Your First Styled Component
Create a button/ folder under components/ and put index.jsx as the entry point of the component.
import React from "react";
import styled from "styled-components";
//styled will return a React Component with applied style
const ButtonWrapper = styled.button`
border: 0;
background-color: #fff;
color: #000;
font-size: 18px;
border-radius: 4px;
box-shadow: 0px 0px 8px 2px rgba(15, 15, 15, 0.2);
&:hover {
color: rgba(50, 25, 150);
}
`;
export default function Button(props) {
return <ButtonWrapper {...props}>{props.children}</ButtonWrapper>;
}
Мы импортируем styled из styled-components, который экспортирует все стандартные элементы HTML, которые вы можете использовать в качестве базового компонента, а затем добавляете к нему свой собственный стиль CSS.
все — это функция, которая принимает помеченный строковый литерал и анализирует для применения CSS, вам не нужно ставить фигурные скобки, поскольку ES6 и более поздние версии распознают строковые литералы, которые идут после имени функции и должны быть внутри (обратная галочка ``) вместо обычных одинарных или двойных кавычек.
Вы можете поместить обычный CSS между стартовой и закрытой обратной галочкой, а также styled-components использует Stylus CSS Pre-Processor, который знаком с SASS или LESS, который может легко позволить вам использовать предопределенные функции, миксины или иметь вложенные дочерние элементы с другими многими разные вещи, которые вы обычно делаете в обычных файлах стилей.
Стилизованная функция перенесет и применит код CSS к базовому компоненту, который затем вернет новый компонент React, к которому применен указанный стиль, чтобы вы могли использовать новый возвращенный компонент для рендеринга кнопки с определенными вами пользовательскими стилями.
Вы можете визуализировать компонент кнопки в своем компоненте приложения, и к нему будет применен указанный стиль.
Если вы хотите получить CSS Intellisense и цвета кода для ваших стилизованных компонентов, обязательно установите VSCode Style-Components.
Стилизованные компоненты с реквизитами
Если вы когда-либо были в ситуации, когда вам нужно применить пользовательский стиль к определенному элементу в определенном событии, например, при щелчке или вводе мышью или любом другом событии DOM, вы бы заметили, насколько сложно манипулировать стилем элемента. что делает ваш код уродливым, менее удобным в сопровождении и трудным для манипулирования.
С помощью styled-components вы можете передавать реквизиты, как и любой другой компонент React, где вы можете переключаться между стилями или использовать пользовательские значения реквизита для установки стиля. Таким образом, ваши компоненты становятся более читабельными и с ними проще работать в проекте.
Давайте добавим пользовательский стиль к кнопке, которой мы можем управлять из реквизита.
//We can easily use expressions inside tagged string literals
const ButtonWrapper = styled.button`
border: 0;
background-color: #fff;
color: ${props => (props.clicked ? "blue" : "#000")};
font-size: ${props => (props.fontSize ? props.fontSize : "18px")};
border-radius: 4px;
box-shadow: 0px 0px 8px 2px rgba(15, 15, 15, 0.2);
&:hover {
color: rgba(50, 25, 150);
}
`;
Если clicked будет true, что означает, что пользователь уже нажал кнопку, тогда мы можем изменить цвет на синий, в противном случае мы ставим черный цвет текста по умолчанию.
Тегированные строковые литералы позволяют вам поместить выражение внутри строки, которое оценивает код javascript, в этом случае styled-components позволяет нам передать обратный вызов (функцию), которая принимает переданные реквизиты в качестве аргумента и возвращает строку с примененным значением стиля, это Таким образом, вы можете манипулировать стилями так, как хотите, вы даже можете выполнить некоторые предварительные расчеты для позиции.
Кроме того, вы использовали селектор & для ссылки на текущий элемент и указания стиля наведения, поскольку styled-components использует препроцессор CSS Stylus.
Стилизация существующих компонентов
В некоторых случаях вам нужно применить свои собственные стили к стороннему компоненту или уже существующему вашему компоненту.
Стилизованные компоненты принимают все виды компонентов React. Вы просто передаете компонент, ссылающийся на стилизованную функцию, и определяете собственный стиль, который применяется к новому элементу-оболочке, который вы получаете для рендеринга для пользовательского стиля.
Одна вещь, которую вам нужно сделать, это передать свойство имени класса существующему элементу в основном контейнере (Wrapper), поскольку движок styled-components использует поколения имен классов для применения стилей CSS.
В этом случае у меня есть простой компонент Link, который отображает гиперссылку с реквизитом (to) для ссылки на внешний ресурс.
import React from "react";
export default function Link(props) {
return (
<a className={props.className} href={props.to}>
{props.children}
</a>
);
}
Обязательно передайте props.classname в props имени класса элемента, иначе Styled не сможет применить ваши пользовательские стили.
Теперь давайте импортируем этот компонент в App.jsx и применим к нему собственный стиль.
import Link from "./components/link";
import styled from "styled-components";
//Pass component reference to styled function
const CustomLink = styled(Link)`
transition: color 250ms ease-in-out;
&:hover {
color: rgba(50, 25, 150);
}
cursor: pointer;
`;
Затем вы просто можете использовать CustomLink для рендеринга Link с вашими пользовательскими стилями.
Глобальные стили CSS
Иногда вам нужно применить глобальные стили ко всем компонентам и просто применить обычные стили CSS к DOM.
К счастью, стили позволяют нам сделать это с помощью очень простого и минимального API через функцию createGlobalStyle.
Создайте файл global-styles.jsx в папке src/, чтобы он содержал ваши глобальные стили приложения.
/* global-styles.jsx */
import { createGlobalStyle } from "styled-components";
//Make sure to export the returned component from createGlobalStyle function
export default createGlobalStyle`
html, body {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
background-color: magenta;
}
`;
Затем вы просто визуализируете возвращенный компонент из функции createGlobalStyle в основной точке входа вашей иерархии компонентов, чтобы убедиться, что он применяется глобально.
/* App.js */
function App() {
return (
<div className="App">
<h3>Hello World</h3>
<Button clicked={true} fontSize={13}>
Press Me!
</Button>
<Link>Normal Link</Link>
<CustomLink>Link</CustomLink>
<GlobalStyles />
</div>
);
}