Как реализовать css-миксы в стилизованных компонентах?

#css #reactjs #styled-components

#css #reactjs #стилизованные компоненты

Вопрос:

Я использовал в своих проектах некоторые базовые классы, такие как text-lg, text-md …, .container и т.д. И обычно я писал классы таким образом :

 <div class="article text-lg container">some content</div>
  

Как я могу сделать что-то подобное, используя styled-components? Создайте миксины для этих классов или просто смешайте использование стилизованных компонентов и классов css?

Ответ №1:

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

 const container = css`
  padding: 20px;
`;
const article = css`
  max-width: 1920px;
`;
const textLg = css`
  font-size: 3rem;
`;

const CustomDiv = styled.div`
  ${container   article   textLg}

  /* other styles here */
  background: black; 
  color: white;
`;
  

Или, если у вас уже есть существующая таблица стилей (например, библиотека CSS, такая как Bootstrap), вы можете просто объединить их с помощью attrs . Это экономит ваше время на переписывание вашего CSS в JS. Официальные документы читайте здесь: https://styled-components.com/docs/faqs#can-i-use-css-frameworks

 const CustomDiv = styled.div.attrs(props => ({
  className: "article text-lg container",
}))`
  /* other styles here */
  background: black; 
  color: white;
`;
  

По сути, результатом будет ваш пользовательский класс со background color свойствами amp; CSS в дополнении article к , text-lg , и container классам, который определен в вашей таблице стилей

HTML-коды

CSS-коды

Комментарии:

1. является ли нормальной практикой комбинировать эти моменты? Или лучший способ -> создать стилизованные миксины для каждого класса, например: export const textLg = css font-size: 3rem; export const container = css max-width: 1920px; и вставить их в стилизованные компоненты?

2. Это 1 способ сделать это, если вы делаете все с нуля. Общее преимущество предоставленной мной информации заключается в том, что если у вас уже есть существующая таблица стилей, которую вы не можете позволить себе переписывать в JavaScript. В этом отношении это полностью зависит от вашей интерфейсной архитектуры, которая была бы лучшей реализацией / практикой.