Ich fühle mich dumm, so lange ein Webprogrammierer gewesen zu sein und die Antwort auf diese Frage nicht zu kennen. Ich hoffe tatsächlich, dass es möglich ist und ich wusste nur nicht, was ich denke, ist die Antwort (was ist, dass es nicht möglich ist). .
Meine Frage ist, ob es möglich ist, eine CSS-Klasse zu erstellen, die von einer anderen CSS-Klasse (oder mehreren) "erbt".
Nehmen wir zum Beispiel an, wir hätten:
.something { display:inline }
.else { background:red }
Was ich gerne machen würde, ist ungefähr so:
.composite
{
.something;
.else
}
Dabei würde die Klasse ".composite" sowohl inline angezeigt als auch einen roten Hintergrund haben
Antworten:
Es gibt Tools wie WENIGER , mit denen Sie CSS auf einer höheren Abstraktionsebene erstellen können , ähnlich wie Sie es beschreiben.
Weniger nennt diese "Mixins"
Anstatt
Du könntest sagen
quelle
Sie können einem einzelnen DOM-Element mehrere Klassen hinzufügen, z
Regeln, die in späteren Klassen angegeben werden (oder die spezifischer sind), werden außer Kraft gesetzt. So
fourthclass
herrscht in diesem Beispiel die Art vor.Vererbung ist nicht Teil des CSS-Standards.
quelle
.firstClass {font-size:12px;} .secondClass {font-size:20px;}
dann endgültigfont-size
sein12px
oder20px
und das ist Cross - Browser sicher?Ja, aber nicht genau mit dieser Syntax.
quelle
Halten Sie Ihre gemeinsamen Attribute zusammen und weisen Sie bestimmte Attribute erneut zu (oder überschreiben Sie sie).
quelle
h1, h2, etc
, könnten Sie angeben.selector1, .selector2, .etc
Ein Element kann mehrere Klassen annehmen:
Und das ist ungefähr so nah, wie Sie es leider bekommen werden. Ich würde dieses Feature gerne zusammen mit Klassen-Aliasnamen eines Tages sehen.
quelle
Nein, so etwas kann man nicht machen
Dies sind keine "Klassennamen" im OO-Sinne.
.something
und.else
sind nur Selektoren nichts mehr.Sie können jedoch entweder zwei Klassen für ein Element angeben
oder Sie könnten eine andere Form der Vererbung untersuchen
Wo die Absätze Hintergrundfarbe und Farbe von den Einstellungen im umschließenden div geerbt werden, das
.foo
gestaltet ist. Möglicherweise müssen Sie die genaue W3C-Spezifikation überprüfen.inherit
ist ohnehin Standard für die meisten Eigenschaften, aber nicht für alle.quelle
Ich bin auf dasselbe Problem gestoßen und habe schließlich eine JQuery-Lösung verwendet, um den Eindruck zu erwecken, dass eine Klasse andere Klassen erben kann.
Dadurch werden alle Elemente mit der Klasse "zusammengesetzt" gefunden und die Klassen "etwas" und "sonst" zu den Elementen hinzugefügt. So etwas
<div class="composite">...</div>
wird so enden:<div class="composite something else">...</div>
quelle
Der SCSS- Weg für das gegebene Beispiel wäre ungefähr so:
Weitere Informationen finden Sie in den Sass-Grundlagen
quelle
.composite,.something { display:inline }
und.composite,.else { background:red }
.something
und.else
in anderen CSS-Definitionen wiederverwenden .Das Beste, was Sie tun können, ist dies
CSS
HTML
quelle
Vergiss nicht:
quelle
In der CSS-Datei:
quelle
font-size
?font-size: 16px
kann die niemals wirksam werden, oder?12px
.Mir ist klar, dass diese Frage jetzt sehr alt ist, aber hier geht nichts!
Wenn die Absicht besteht, eine einzelne Klasse hinzuzufügen, die die Eigenschaften mehrerer Klassen impliziert, würde ich als native Lösung die Verwendung von JavaScript / jQuery empfehlen (jQuery ist wirklich nicht erforderlich, aber sicherlich nützlich).
Wenn Sie zum Beispiel haben,
.umbrellaClass
dass "erbt" von.baseClass1
und.baseClass2
Sie könnten etwas JavaScript haben, das auf bereit ist.Jetzt haben alle Elemente von
.umbrellaClass
will alle Eigenschaften von beiden.baseClass
s. Beachten Sie, dass die Vererbung wie die OOP-Vererbung.umbrellaClass
möglicherweise eigene Eigenschaften hat oder nicht.Die einzige Einschränkung besteht darin, zu prüfen, ob dynamisch Elemente erstellt werden, die beim Auslösen dieses Codes nicht vorhanden sind. Es gibt jedoch auch einfache Möglichkeiten, dies zu umgehen.
Sucks CSS hat jedoch keine native Vererbung.
quelle
Perfektes Timing : Ich ging von dieser Frage zu meiner E-Mail, um einen Artikel über Less zu finden , eine Ruby-Bibliothek, die unter anderem Folgendes tut:
Da es
super
genauso aussiehtfooter
, aber mit einer anderen Schriftart, verwende ich die Klasseneinbeziehungstechnik von Less (sie nennen es ein Mixin), um anzuweisen, dass auch diese Deklarationen enthalten sein sollen:quelle
Leider bietet CSS keine "Vererbung" wie Programmiersprachen wie C ++, C # oder Java. Sie können eine CSS-Klasse nicht deklarieren und dann um eine andere CSS-Klasse erweitern.
Sie können jedoch mehr als eine einzelne Klasse auf ein Tag in Ihrem Markup anwenden. In diesem Fall gibt es ein ausgeklügeltes Regelwerk, das bestimmt, welche tatsächlichen Stile vom Browser angewendet werden.
CSS sucht nach allen Stilen, die basierend auf Ihrem Markup angewendet werden können, und kombiniert die CSS-Stile aus diesen mehreren Regeln miteinander.
Normalerweise werden die Stile zusammengeführt, aber wenn Konflikte auftreten, gewinnt der später deklarierte Stil im Allgemeinen (es sei denn, das Attribut! Important ist für einen der Stile angegeben. In diesem Fall gewinnt dieser). Stile, die direkt auf ein HTML-Element angewendet werden, haben Vorrang vor CSS-Klassenstilen.
quelle
Es gibt auch SASS, das Sie unter http://sass-lang.com/ finden . Es gibt ein @ extend-Tag sowie ein Mix-In-System. (Rubin)
Es ist eine Art Konkurrent von LESS.
quelle
Das ist in CSS nicht möglich.
Das einzige, was in CSS unterstützt wird, ist spezifischer als eine andere Regel:
Ein Bereich mit der Klasse "myclass" hat beide Eigenschaften.
Eine andere Möglichkeit besteht darin, zwei Klassen anzugeben:
Der Stil von "else" überschreibt (oder fügt) den Stil von "etwas" hinzu
quelle
Sie können mehr als eine CSS-Klasse auf ein Element anwenden, indem Sie diese Klasse = "etwas anderes" verwenden.
quelle
Wie andere bereits gesagt haben, können Sie einem Element mehrere Klassen hinzufügen.
Aber das ist nicht wirklich der Punkt. Ich bekomme Ihre Frage zur Vererbung. Der eigentliche Punkt ist, dass die Vererbung in CSS nicht über Klassen, sondern über Elementhierarchien erfolgt. Um geerbte Merkmale zu modellieren, müssen Sie sie auf verschiedene Elementebenen im DOM anwenden.
quelle
Ich habe das auch wie verrückt gesucht und es einfach herausgefunden, indem ich verschiedene Dinge ausprobiert habe: P ... Nun, so kannst du es machen:
Es hat plötzlich bei mir funktioniert :)
quelle
Unter bestimmten Umständen können Sie eine "weiche" Vererbung durchführen:
Dies funktioniert nur, wenn Sie die .composite-Klasse einem untergeordneten Element hinzufügen. Es handelt sich um eine "weiche" Vererbung, da alle in .composite nicht angegebenen Werte nicht offensichtlich vererbt werden. Denken Sie daran, es wären immer noch weniger Zeichen, einfach "Inline" und "Rot" anstelle von "Erben" zu schreiben.
Hier ist eine Liste der Eigenschaften und ob sie dies automatisch tun oder nicht: https://www.w3.org/TR/CSS21/propidx.html
quelle
Eine direkte Vererbung ist zwar nicht möglich.
Es ist möglich, eine Klasse (oder ID) für ein übergeordnetes Tag zu verwenden und dann CSS-Kombinatoren zu verwenden, um das Verhalten von untergeordneten Tags aus der Hierarchie zu ändern.
Ich würde nicht vorschlagen, so viele Bereiche wie im Beispiel zu verwenden, aber es ist nur ein Proof of Concept. Es gibt immer noch viele Fehler, die auftreten können, wenn Sie versuchen, CSS auf diese Weise anzuwenden. (Zum Beispiel Ändern von Textdekorationstypen).
quelle
Less und Sass sind CSS-Vorprozessoren, die die CSS-Sprache auf wertvolle Weise erweitern. Nur eine von vielen Verbesserungen, die sie anbieten, ist genau die Option, nach der Sie suchen. Es gibt einige sehr gute Antworten mit Less und ich werde die Sass-Lösung hinzufügen.
Sass verfügt über eine Erweiterungsoption, mit der eine Klasse vollständig auf eine andere erweitert werden kann. Weitere Informationen zu Extend finden Sie in diesem Artikel
quelle
Eigentlich gibt es das, wonach Sie fragen - es wird jedoch als Zusatzmodul ausgeführt. Schauen Sie sich diese Frage zu Better CSS in .NET an, um Beispiele zu finden.
Lesen Sie die Antwort von Larsenal zur Verwendung von LESS , um eine Vorstellung davon zu bekommen, was diese Add-Ons bewirken .
quelle
CSS macht nicht wirklich das, was Sie verlangen. Wenn Sie Regeln für diese zusammengesetzte Idee schreiben möchten, sollten Sie den Kompass überprüfen . Es ist ein Stylesheet-Framework, das dem bereits erwähnten Less ähnelt.
Damit können Sie Mixins und all das gute Geschäft machen.
quelle
Für diejenigen, die mit den genannten (ausgezeichneten) Beiträgen nicht zufrieden sind, können Sie Ihre Programmierkenntnisse nutzen, um eine Variable (PHP oder was auch immer) zu erstellen und die mehreren Klassennamen speichern zu lassen.
Das ist der beste Hack, den ich mir vorstellen kann.
Wenden Sie dann die globale Variable auf das gewünschte Element an und nicht auf die Klassennamen selbst
quelle
Schauen Sie sich CSS compose an : https://bambielli.com/til/2017-08-11-css-modules-composes/
nach ihnen:
Ich benutze es in meinem Reaktionsprojekt.
quelle
Stellen Sie sich CSS- Klassen nicht als objektorientierte Klassen vor, sondern als bloßes Werkzeug unter anderen Selektoren, um anzugeben, nach welchen Attributklassen ein HTML-Element gestaltet ist. Stellen Sie sich alles zwischen den geschweiften Klammern als Attributklasse vor , und Selektoren auf der linken Seite teilen den Elementen mit, dass sie Attribute von der Attributklasse erben sollen . Beispiel:
Wenn ein Element des Attribut gegeben ist
class="foo"
, ist es sinnvoll , daran zu denken nicht als Attribut von Klasse zu erben.foo
, sondern von Attributklasse A und Attributklasse B . Das heißt, der Vererbungsgraph ist eine Ebene tief, wobei Elemente aus Attributklassen stammen und die Selektoren angeben, wohin die Kanten gehen, und den Vorrang bestimmen, wenn konkurrierende Attribute vorhanden sind (ähnlich der Reihenfolge der Methodenauflösung).Die praktische Implikation für die Programmierung ist dies. Angenommen, Sie haben das oben angegebene Stylesheet und möchten eine neue Klasse hinzufügen
.baz
, in der sie dieselbe haben solltefont-size
wie.foo
. Die naive Lösung wäre folgende:Jedes Mal, wenn ich zweimal etwas tippen muss, werde ich so wütend! Ich muss es nicht nur zweimal schreiben, jetzt kann ich das nicht programmatisch anzeigen
.foo
und.baz
sollte es auch habenfont-size
, und ich habe eine versteckte Abhängigkeit geschaffen! Mein obiges Paradigma würde vorschlagen, dass ich dasfont-size
Attribut aus der Attributklasse A abstrahieren sollte :Die Hauptbeschwerde hier ist, dass ich jetzt jeden Selektor aus der Attributklasse A erneut eingeben muss, um anzugeben, dass die Elemente, die sie auswählen sollen, auch Attribute aus der Attributbasisklasse A erben sollen . Die Alternativen bestehen jedoch darin, sich daran zu erinnern, jede Attributklasse zu bearbeiten, in der bei jeder Änderung versteckte Abhängigkeiten bestehen, oder ein Drittanbieter-Tool zu verwenden. Die erste Option bringt Gott zum Lachen, die zweite bringt mich dazu, mich umzubringen.
quelle
Wenn Sie einen leistungsstärkeren Textvorprozessor als WENIGER wünschen, lesen Sie den PPWizard:
http://dennisbareis.com/ppwizard.htm
Die Warnung, dass die Website wirklich abscheulich ist und eine kleine Lernkurve aufweist, eignet sich jedoch perfekt zum Erstellen von CSS- und HTML-Code über Makros. Ich habe nie verstanden, warum mehr Webcodierer es nicht verwenden.
quelle
Sie können erreichen, was Sie wollen, wenn Sie Ihre .css-Dateien über PHP vorverarbeiten. ...
...
quelle