我正在构建React组件。我已经按照React的一位开发人员在this brilliant presentation中提出的建议,在组件中内联添加了CSS。我整晚都在尝试找到一种内联添加CSS伪类的方法,就像演示文稿中标题为“::after”的幻灯片所示。不幸的是,我不仅需要添加content:"";
属性,还需要添加position:absolute; -webkit-filter: blur(10px) saturate(2);
。幻灯片显示了如何通过{/* … */}
添加内容,但如何添加其他属性呢?
8条答案
按热度按时间wvmv3b1j1#
收到React团队@Vjeux的回复:
普通HTML/CSS:
与内联样式React:
诀窍在于,不要在CSS中使用
::after
来创建新元素,而是应该通过React创建新元素。如果不想在任何地方添加该元素,那么就创建一个组件来为您做这件事。对于像
-webkit-filter
这样的特殊属性,编码的方法是去掉破折号,并将下一个字母大写,这样它就变成了WebkitFilter
,注意{'-webkit-filter': ...}
也应该可以。xwmevbvl2#
内联样式不能用于定位伪类或伪元素。您需要使用样式表。
如果您想动态生成CSS,那么最简单的方法是创建一个DOM元素
<style>
。xiozqbni3#
如果你只需要几个属性被内联样式化,你可以做类似于这个解决方案的事情(这样你就不必安装一个特殊的包或者创建一个额外的元素):
https://stackoverflow.com/a/42000085
请注意,
datacustomattribute
必须以data
开头,并且必须全部小写才能满足React。iugsix8n4#
内联样式不支持pseudos或at-rules(例如@media)。建议的范围从在JavaScript中为CSS状态(如
:hover
、onMouseEnter
和onMouseLeave
)重新实现CSS特性,到使用更多元素重新生成伪元素(如:after
和:before
),再到只使用外部样式表。我个人不喜欢所有这些解决方案。通过JavaScript重新实现CSS特性不能很好地扩展--添加多余的标记也不能。
想象一个大团队,其中每个开发人员都在重新创建
:hover
这样的CSS特性。随着团队规模的增长,每个开发人员 * 会 * 以不同的方式去做,如果能做到,就一定会做到。事实上,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)
JSX语法(JSFIDDLE)
从CSS-Tricks提取的心脏示例
kqqjbcuj5#
可以使用样式化构件。
使用
npm i styled-components
安装jogvjijk6#
我不知道这是否会被认为是黑客,但它肯定工作(使用CSS变量):
然后在导入的CSS文件中:
vkc1a9a27#
最简单的技巧是在伪元素的
content
属性中添加'""'
而不是''
。n53p2ov08#
这不是问题的直接答案,但这可能会帮助那些在使用Typescript创建
style
信息时遇到困难的人。我收到一个错误,告诉我以下内容不正确:
错误告诉我“属性”位置“的类型不兼容”。我不知道为什么。
我通过添加一个严格的Typescript声明修复了这个问题,如下所示:
这个管用。