ReactJs StyledComponent и ClassName - PullRequest
0 голосов
/ 20 января 2020

Здравствуйте, у меня есть проблема. Я считаю, что мой код становится слишком большим для простых вещей.

В основном у меня есть обертка для сайта:

export const Wrapper = styled.div`
    min-height:100vh !important;
`;

, и мой заголовок таков:

    <Styled.WrapHeader>
        <DefaultContainer>
            <Styled.NavStickey />
        </DefaultContainer>
    </Styled.WrapHeader>

Я использовал 3 элемента div, чтобы сделать что-то простое, элемент div с шириной 100% и контейнер, в котором будет навигационная панель css:

const WrapHeader = styled.div`
    background: #1269DB;
    height: 130px;
    width:100%;
`;

const NavStickey = styled.div`
    width:100%;
    height: 60px;
    background: red;   
`;

И вот у меня есть мой контейнер :

export const DefaultContainer = styled.div`
    display: flex;
    flex-direction: row;
    -webkit-box-align: center;
    align-items: center;
    -webkit-box-pack: justify;
    justify-content: space-between;
    background: transparent !important;
`

То, что я считаю очень большим, я хотел разделить поля и отступы контейнера для класса и вызвать className в div, как бы я получил это в стиле?

вот так:

.divct{
        display: flex;
        flex-direction: row;
        -webkit-box-align: center;
        align-items: center;
        -webkit-box-pack: justify;
        justify-content: space-between;
        background: transparent !important;
}
.container {
        max-width: 1000px;
        padding: 0px 30px;
        margin: 0px auto;
}

div className = "divct container"

1 Ответ

0 голосов
/ 24 января 2020

Вы можете создавать фрагменты из css шаблонов, например, так:

import styled, { css } from 'styled-components'

// Not a styled component, just a css template.
const DivContainer = css`
  display: flex;
  flex-direction: row;
  -webkit-box-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  justify-content: space-between;
  background: transparent !important;
`

const Container = css`
  max-width: 1000px;
  padding: 0px 30px;
  margin: 0px auto;
`

Затем вы можете объединить их в стилизованный компонент, например, как вы бы объединили два classNames в обычный компонент:

const WrapHeader = styled.div`
  background: #1269DB;
  height: 130px;
  width:100%;
  ${DivContainer}
  ${Container}
`

Это работает так же, как любая другая строка шаблона (потому что это то, что они есть). Таким образом, в результате будут объединены все стили, например:

// This is what the result will look like internally.
const WrapHeader = styled.div`
  background: #1269DB;
  height: 130px;
  width:100%;
  display: flex;
  flex-direction: row;
  -webkit-box-align: center;
  align-items: center;
  -webkit-box-pack: justify;
  justify-content: space-between;
  background: transparent !important;
  max-width: 1000px;
  padding: 0px 30px;
  margin: 0px auto;
`
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...