Я хотел бы иметь компонент, оформленный с помощью Emotion, который использует свойства, которые в конечном итоге контролируют стиль. . Например, рассмотрим компонент GridCol
, у которого есть различные свойства, которые изменяют заполнение и ширину (ширину можно изменять в зависимости от ширины области просмотра).
Я бы хотел использовать такой API:
<GridCol gutter size="2>
// or alternatively, like this:
<GridCol gutter size={{
m: 2,
l: 4
}}>
Здесь происходят три вещи:
gutter
- это логическая опора, которая добавляет горизонтальный отступ к столбцуsize
опора может быть строкой или объектом. Если это строка, мы просто добавляем несколько строк CSS, и у нас все хорошо, однако, если это объект, нам нужно вставить некоторые медиа-запросы на основе объекта точки останова, который установлен в другом месте.
В документации Emotion неясно, как обрабатывать такие стили, по крайней мере Я этого не видел, поэтому надеялся, что можно будет найти общее решение.
Для опоры gutter
это тривиально:
const GridCol = props => styled('div')`
display: block;
box-sizing: border-box;
flex: 1 0 0;
min-width: 0;
padding: ${props.gutter ? `0 10px` : '0'};
`
Для опоры size
это становится более сложным, я бы хотел, чтобы результирующий CSS выглядел примерно так:
const GridCol = props => styled('div')`
display: block;
box-sizing: border-box;
flex: 1 0 0;
min-width: 0;
padding: ${props.gutter ? `0 10px` : '0'};
/* styles here if `size` is a string */
width: 10%;
/* styles here if `size` is an object */
@media screen and (min-width: 500px) {
width: 20%;
}
@media screen and (min-width: 800px) {
width: 30%;
}
@media screen and (min-width: 1100px) {
width: 40%;
}
`
Значения width
будут определяться ключом опоры, который соответствует значению в объекте breakpoints
, эта часть нетривиальна, но я не знаю, как динамически генерировать необходимый css.
Я уверен, что я мог бы добавить больше информации, я предпринял несколько попыток, но ни одна из них в данный момент не работает. Мне кажется, что я должен создать функциональный компонент без сохранения состояния, который генерирует CSS для каждого условия, а затем присоединяется к CSS в конце ..