使用对象定义样式
使用对象来定义样式是Emotion与Styled Components不同的一点,对象可以使样式的定义更具有表现力,也便于Lint工具检查。使用对象来定义样式的时候,只需要将使用连词符-
分隔单词的kebab-case样式属性改为camelCase形式书写即可。
例如以下就是一个使用对象来定义样式的示例。
import { jsx } from '@emotion/react';
function App() {
return (
<div
css={{
color: 'blue',
backgroundColor: 'gray'
}}>
Some text.
</div>
);
}
对象样式也可以与styled
结合使用,用于样式组件的定义。
import styled from '@emotion/styled';
const Button = styled.button(
{
color: 'darkorchid'
},
props => ({
fontSize: props.fontSize
})
);
function App() {
return <Button fontSize={16}>Action!</Button>;
}
在对象样式中可以直接书写数字,数字值一般都会采用px
作为单位。对于类似于fontWeight
之类的属性,数字将会自动选择其对应的单位。
有些样式属性是不被一些浏览器支持的,这时可以使用数组来定义回退值。例如以下示例。
function App() {
return (
<div
css={{
background: ['red', 'linear-gradient(#000, #fff)'],
lineHeight: 30
}}>
Some text.
</div>
);
}
借助于css
函数,还可以把对象样式定义成可以在多个位置直接复用的形式,而且还可以支持样式的组合。具体使用可以参考以下示例。
import { jsx, css } from '@emotion/react';
const redText = css({
color: 'red'
});
const redOnHover = css({
'&.hover,&.focus': redText
});
const redTextOnBlack = css(
{
backgroundColor: 'black',
color: 'green'
},
redText
);
function App() {
return (
<div>
<p css={redText}>Red text on white.</p>
<button css={redOnHover}>Color changes on hover</button>
<p css={redTextOnBlack}>Red Ttext on black.</p>
</div>
);
}