内联样式不支持伪规则或 at 规则(例如,@media)。建议的范围从在 JavaScript 中针对 CSS 状态(例如 :hover 通过 onMouseEnter 和 onMouseLeave 重新实现 CSS 功能)到使用更多元素来重现伪元素(例如 :after 和 :before)到仅使用外部样式表。
个人不喜欢所有这些解决方案。通过 JavaScript 重新实现 CSS 功能并不能很好地扩展——添加多余的标记也不能。
想象一个大型团队,其中每个开发人员都在重新创建 CSS 功能,例如 :hover。随着团队规模的扩大,每个开发人员会做不同的事情,如果可以做到,就会做到。事实上,在 JavaScript 中,有大约 n 种方法可以重新实现 CSS 功能,随着时间的推移,您可以押注其中的每一种实现方式,最终结果都是意大利面条式代码。
那该怎么办?使用 CSS。当然,您询问内联样式会假设您可能在 CSS-in-JS 阵营(我也是!)。已经发现 HTML 和 CSS 与 JS 和 HTML 一样有价值,但很多人还没有意识到这一点(JS-HTML 并置一开始也有很多阻力)。
在这个空间中提出了一个名为 Style It 的解决方案,它可以让您在 React 组件中编写纯文本 CSS。无需浪费循环在 JS 中重新发明 CSS。适合工作的正确工具,这里是使用 :after 的示例:
npm install style-it --save
函数语法 (JSFIDDLE)
import React from 'react';
import Style from 'style-it';
class Intro extends React.Component {
render() {
return Style.it(`
#heart {
position: relative;
width: 100px;
height: 90px;
}
#heart:before,
#heart:after {
position: absolute;
content: "";
left: 50px;
top: 0;
width: 50px;
height: 80px;
background: red;
-moz-border-radius: 50px 50px 0 0;
border-radius: 50px 50px 0 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
-webkit-transform-origin: 0 100%;
-moz-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
-o-transform-origin: 0 100%;
transform-origin: 0 100%;
}
#heart:after {
left: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transform-origin: 100% 100%;
-moz-transform-origin: 100% 100%;
-ms-transform-origin: 100% 100%;
-o-transform-origin: 100% 100%;
transform-origin :100% 100%;
}
`,
<div id="heart" />
);
}
}
export default Intro;
JSX 语法 (JSFIDDLE)
import React from 'react';
import Style from 'style-it';
class Intro extends React.Component {
render() {
return (
<Style>
{`
#heart {
position: relative;
width: 100px;
height: 90px;
}
#heart:before,
#heart:after {
position: absolute;
content: "";
left: 50px;
top: 0;
width: 50px;
height: 80px;
background: red;
-moz-border-radius: 50px 50px 0 0;
border-radius: 50px 50px 0 0;
-webkit-transform: rotate(-45deg);
-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-o-transform: rotate(-45deg);
transform: rotate(-45deg);
-webkit-transform-origin: 0 100%;
-moz-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
-o-transform-origin: 0 100%;
transform-origin: 0 100%;
}
#heart:after {
left: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transform-origin: 100% 100%;
-moz-transform-origin: 100% 100%;
-ms-transform-origin: 100% 100%;
-o-transform-origin: 100% 100%;
transform-origin :100% 100%;
}
`}
<div id="heart" />
</Style>
}
}
export default Intro;
从CSS-Tricks提取的心脏示例