如何使用 styled-components 添加基于 属性 的多个样式?
How to add multiple styles based on property with styled-components?
在 CSS/LESS 我会这样做:
.button {
&:active, .active {
background-color: #393939;
border-color: #2F2F2F;
box-shadow: inset 0 0 0 1px #3D3D3D,
inset 0 2px 0 #323232;
}
}
其中 :active
是我的按钮被单击时的样式,.active
是 class 我会 添加 按钮处于活动状态时(对于可切换按钮)。
有了 styled-components
我现在有这个:
import styled from 'styled-components';
export default styled.button`
width: 32px;
height: 32px;
border-radius: 5px;
background-color: #535353;
border: 1px solid transparent;
cursor: pointer;
outline: none;
padding: 4px;
&:active, /* what to do here?? */ {
background-color: #393939;
border-color: #2F2F2F;
box-shadow: inset 0 0 0 1px #3D3D3D,
inset 0 2px 0 #323232;
}
`
但我不知道如何根据某些 属性 重新使用所有这些 :active
样式。我知道我可以使用 ${props => prop.active}
访问道具,但我不知道如何在不重复所有这些样式的情况下重新使用该样式块。
我该怎么做?
如果您想共享一些样式,只需将其移动到您在两个地方都使用的变量中即可:
import styled, { css } from 'styled-components'
const activeStyles = `
background-color: #393939;
border-color: #2F2F2F;
box-shadow: inset 0 0 0 1px #3D3D3D,
inset 0 2px 0 #323232;
`
export default styled.button`
width: 32px;
height: 32px;
border-radius: 5px;
background-color: #535353;
border: 1px solid transparent;
cursor: pointer;
outline: none;
padding: 4px;
&:active {
${activeStyles}
}
${props => props.active ? css`${activeStyles}` : ''}
`
您可以这样做,而不是使用模板文字:
const Heading = styled.div([], props => ({
backgroundColor: 'red',
...(props.isOpen && {
backgroundColor: 'blue',
color: 'white',
// ...some other styles
})
}));
在 CSS/LESS 我会这样做:
.button {
&:active, .active {
background-color: #393939;
border-color: #2F2F2F;
box-shadow: inset 0 0 0 1px #3D3D3D,
inset 0 2px 0 #323232;
}
}
其中 :active
是我的按钮被单击时的样式,.active
是 class 我会 添加 按钮处于活动状态时(对于可切换按钮)。
有了 styled-components
我现在有这个:
import styled from 'styled-components';
export default styled.button`
width: 32px;
height: 32px;
border-radius: 5px;
background-color: #535353;
border: 1px solid transparent;
cursor: pointer;
outline: none;
padding: 4px;
&:active, /* what to do here?? */ {
background-color: #393939;
border-color: #2F2F2F;
box-shadow: inset 0 0 0 1px #3D3D3D,
inset 0 2px 0 #323232;
}
`
但我不知道如何根据某些 属性 重新使用所有这些 :active
样式。我知道我可以使用 ${props => prop.active}
访问道具,但我不知道如何在不重复所有这些样式的情况下重新使用该样式块。
我该怎么做?
如果您想共享一些样式,只需将其移动到您在两个地方都使用的变量中即可:
import styled, { css } from 'styled-components'
const activeStyles = `
background-color: #393939;
border-color: #2F2F2F;
box-shadow: inset 0 0 0 1px #3D3D3D,
inset 0 2px 0 #323232;
`
export default styled.button`
width: 32px;
height: 32px;
border-radius: 5px;
background-color: #535353;
border: 1px solid transparent;
cursor: pointer;
outline: none;
padding: 4px;
&:active {
${activeStyles}
}
${props => props.active ? css`${activeStyles}` : ''}
`
您可以这样做,而不是使用模板文字:
const Heading = styled.div([], props => ({
backgroundColor: 'red',
...(props.isOpen && {
backgroundColor: 'blue',
color: 'white',
// ...some other styles
})
}));