如何将媒体查询添加到样式组件中的非组件变量?
How to add media query to non component variable in styled components?
我正在开发一个 React JS 项目,我在其中使用 styled-components
来设置网页样式。
我在项目中使用 reactstrap
个组件。
我正在设计 reactstrap
的 Button
组件并尝试添加媒体查询。
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 次,然后添加 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;
`}
`;
我正在开发一个 React JS 项目,我在其中使用 styled-components
来设置网页样式。
我在项目中使用 reactstrap
个组件。
我正在设计 reactstrap
的 Button
组件并尝试添加媒体查询。
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 次,然后添加 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;
`}
`;