Inline-Styling unterstützt keine Pseudos oder At-Rules (z. B. @media). Die Empfehlungen reichen von der Neuimplementierung von CSS-Funktionen in JavaScript für CSS-Zustände wie :hover
via onMouseEnter
und onMouseLeave
der Verwendung weiterer Elemente zur Reproduktion von Pseudoelementen wie :after
und :before
der Verwendung eines externen Stylesheets.
Ich persönlich mag all diese Lösungen nicht. Die Neuimplementierung von CSS-Funktionen über JavaScript lässt sich nicht gut skalieren, ebenso wenig wie das Hinzufügen überflüssiger Markups.
Stellen Sie sich ein großes Team vor, in dem jeder Entwickler CSS-Funktionen wie neu erstellt :hover
. Jeder Entwickler wird es anders machen, wenn die Größe der Teams zunimmt. Wenn es möglich ist, wird es getan. Tatsache ist, dass es mit JavaScript ungefähr n Möglichkeiten gibt, CSS-Funktionen neu zu implementieren, und im Laufe der Zeit können Sie darauf wetten, dass jede dieser Möglichkeiten implementiert wird, wobei das Endergebnis Spaghetti-Code ist.
Was tun? Verwenden Sie CSS. Zugegeben, Sie haben nach Inline-Styling gefragt, vorausgesetzt, Sie befinden sich wahrscheinlich im CSS-in-JS-Camp (ich auch!). Ich habe festgestellt, dass das Colocieren von HTML und CSS genauso wertvoll ist wie das Colocieren von JS und HTML. Viele Leute wissen es einfach noch nicht (JS-HTML-Colocation hatte anfangs auch viel Widerstand).
In diesem Bereich wurde eine Lösung namens Style It erstellt , mit der Sie einfach Klartext-CSS in Ihre React-Komponenten schreiben können. Es ist nicht erforderlich, Zyklen zu verschwenden, in denen CSS in JS neu erfunden wird. Das richtige Werkzeug für den richtigen Job. Hier ein Beispiel mit :after
:
npm install style-it --save
Funktionssyntax ( 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-Syntax ( 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;
Herzbeispiel aus CSS-Tricks