Ich baue React- Komponenten. Ich habe CSS inline in die Komponenten eingefügt, wie in dieser brillanten Präsentation von einem der Leute hinter React vorgeschlagen. Ich habe die ganze Nacht versucht, einen Weg zu finden, um CSS-Pseudoklassen inline hinzuzufügen, wie auf der Folie mit dem Titel ":: after" in der Präsentation. Leider muss ich nicht nur die content:"";
Eigenschaft hinzufügen , sondern auch position:absolute; -webkit-filter: blur(10px) saturate(2);
. Die Folien zeigen, wie Sie Inhalte hinzufügen {/* … */}
, aber wie würden Sie andere Eigenschaften hinzufügen?
quelle
::after
-Element kopieren , um einen benutzerdefinierten Schatten zu erstellen, wäre ich nur zu Stylingzwecken nicht im DOM, wenn Google es sieht, aber mit diesem Ansatz wird Google es sehen ... Bedeutung Sie werden zwei Überschriften haben.Inline-Stile können nicht für Pseudoklassen oder Pseudoelemente verwendet werden. Sie müssen ein Stylesheet verwenden.
Wenn Sie CSS dynamisch generieren möchten, ist es am einfachsten, ein DOM-Element zu erstellen
<style>
.<style dangerouslySetInnerHTML={{ __html: [ '.my-special-div:after {', ' content: "Hello";', ' position: absolute', '}' ].join('\n') }}> </style> <div className='my-special-div'></div>
quelle
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
viaonMouseEnter
undonMouseLeave
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
quelle
Sie können gestaltete Komponenten verwenden.
Installieren Sie es mit
npm i styled-components
import React from 'react'; import styled from 'styled-components'; const YourEffect = styled.div` height: 50px; position: relative; &:after { // whatever you want with normal CSS syntax. Here, a custom orange line as example content: ''; width: 60px; height: 4px; background: orange position: absolute; bottom: 0; left: 0; }, const YourComponent = props => { return ( <YourEffect>...</YourEffect> ) } export default YourComponent
quelle
Abhängig davon, ob Sie nur einige Attribute benötigen, um sie inline zu gestalten, können Sie so etwas wie diese Lösung ausführen (und ersparen sich die Installation eines speziellen Pakets oder das Erstellen eines zusätzlichen Elements):
https://stackoverflow.com/a/42000085
<span class="something" datacustomattribute="👋"> Hello </span>
.something::before { content: attr(datascustomattribute); position: absolute; }
Beachten Sie, dass das
datacustomattribute
mitdata
Kleinbuchstaben beginnen und vollständig sein muss , um React zu erfüllen.quelle
Keine direkte Antwort auf die Frage, aber dies kann denjenigen helfen, die Probleme beim Erstellen von
style
Informationen mit Typescript haben.Ich habe eine Fehlermeldung erhalten, dass Folgendes falsch war:
let iconStyle = { position: 'relative', maxHeight: '90px', top: '25%', }
Der Fehler sagte mir, dass "Arten von Eigenschaften 'Position' nicht kompatibel sind". Ich habe keine Idee warum.
Ich habe dies behoben, indem ich eine strenge Typescript-Deklaration hinzugefügt habe, wie folgt:
let iconStyle: CSSProperties = { position: 'relative', maxHeight: '90px', top: '25%', }
Das funktioniert.
quelle