Я работаю над проектом React JS, в котором я использую styled-components для стилизации веб-страниц.
Я использую в проекте компоненты reactstrap.
Я стилизую компонент Button из reactstrap и пытаюсь добавить медиа-запрос.
Компонент ButtonX
import styled, {css} from 'styled-components';
import { Button } from 'reactstrap';
import media from '../media';
const orange = `
background-color: #E4572E;
border: 1px solid #E4572E;
color: #fff;
&:hover,
&:focus {
background-color: #e97857;
border: 1px solid #e97857;
color: #fff;
}
`;
const inline = `
position: absolute;
top: 1rem;
right: 1rem;
`;
const ButtonX = styled(Button)`
padding: 0.5rem 1.5rem;
font-weight: 500;
font-size: 0.8rem;
transition: all 0.4s linear;
border-radius: 0.2rem;
${props => props.orange ? css`${orange}` : ''};
${props => props.inline ? css`${inline}`: ''}
${props => props.inline ?
(media.smalldevice`
top: 4rem;
right: 5rem;
`)
: ''}
`;
export {
ButtonX
}
Я пишу компонент ButtonX вот так
<ButtonX orange = "true" inline = "true">Sign Up</ButtonX>
Так как в компоненте ButtonX я проверяю, установлен ли inline, затем добавляю код css, а также медиа-запрос для css.
${props => props.inline ? css`${inline}`: ''}
${props => props.inline ?
(media.smalldevice`
top: 4rem;
right: 5rem;
`)
: ''}
Я проверяю условие 2 раза, если inline истинно, затем добавляю css и медиа-запрос.
1) Вышеупомянутое работает, но я хочу добавить оба запроса в одном условии, которое не работает.
2) Кроме того, я хотел бы знать, как я могу написать этот медиа-запрос в переменной inline, указанной выше.
const inline = `
position: absolute;
top: 1rem;
right: 1rem;
${
media.smalldevice`
top: 4rem;
right: 5rem;
`
}
`;
Я попробовал второй, но он не работает, поскольку я уверен, что мы можем записать медиа-запрос в переменную.






Добавляя что-то вроде медиа-запроса в строку шаблона, вы интерполируете функцию. Они не могут работать внутри обычных шаблонных литералов, как вы предоставили inline.
styled-components предоставляет помощник под названием css, который можно использовать для интерполяции функций. В вашем случае это можно использовать:
import { css } from "styled-components";
const inline = css`
position: absolute;
top: 1rem;
right: 1rem;
${media.smalldevice`
top: 4rem;
right: 5rem;
`}
`;