Normalerweise habe ich eine CSS-Datei mit der folgenden Regel:
#my-window {
position: fixed;
z-index: 102;
display:none;
top:50%;
left:50%;
}
Wie kann ich vermeiden, eine solche statische CSS-Datei zu erstellen, indem ich die CSS-Informationen während der Laufzeitaktionen zum Body hinzufüge oder ähnliches? (nur mit jQuery)
Ich möchte es einmal definieren, aber mit jQuery und später viele Male verwenden. Deshalb möchte ich es nicht jedes Mal zu den spezifischen DOM-Elementen hinzufügen.
Ich kenne die einfachen Funktionen ( css("attr1", "value");
), aber wie kann ich eine vollständige wiederverwendbare CSS-Regel erstellen?
body
. dh$("<style>...</style>").appendTo("body");
Einfach
Haben Sie die Schrägstriche bemerkt? Sie werden verwendet, um Zeichenfolgen zu verbinden, die sich in neuen Zeilen befinden. Wenn Sie sie weglassen, wird ein Fehler generiert.
quelle
Sie können CSS auf ein Objekt anwenden. So können Sie Ihr Objekt in Ihrem Javascript folgendermaßen definieren:
Und wenden Sie es dann einfach auf alle gewünschten Elemente an
Es ist also wiederverwendbar. Zu welchem Zweck würden Sie dies tun?
quelle
Sie können insertRule verwenden, wenn Sie laut dottoro IE <9 nicht unterstützen müssen . Dort drüben gibt es auch ein bisschen browserübergreifenden Code.
quelle
Hier ist ein JQuery-Plugin, mit dem Sie CSS injizieren können:
https://github.com/kajic/jquery-injectCSS
Beispiel:
quelle
Dies ist nichts Neues im Vergleich zu einigen anderen Antworten, da das hier und hier beschriebene Konzept verwendet wird , aber ich wollte die Deklaration im JSON-Stil verwenden:
Verwendung:
Ich bin nicht sicher, ob es alle Funktionen von CSS abdeckt, aber bisher funktioniert es für mich. Wenn dies nicht der Fall ist, betrachten Sie es als Ausgangspunkt für Ihre eigenen Bedürfnisse. :) :)
quelle
Wenn Sie das CSS nicht fest in einen CSS-Block / eine CSS-Datei codieren möchten, können Sie mit jQuery HTML-Elementen, IDs und Klassen dynamisch CSS hinzufügen.
quelle
Das Hinzufügen benutzerdefinierter Regeln ist nützlich, wenn Sie ein jQuery-Widget erstellen, für das benutzerdefiniertes CSS erforderlich ist (z. B. das vorhandene jQueryUI-CSS-Framework für Ihr bestimmtes Widget erweitern). Diese Lösung baut auf Taras 'Antwort auf (die erste oben).
Angenommen, Ihr HTML-Markup verfügt über eine Schaltfläche mit der ID "addrule" und ein div mit der ID "target", die Text enthält:
jQuery-Code:
Der Vorteil dieses Ansatzes besteht darin, dass Sie variable cssrules in Ihrem Code wiederverwenden können, um Regeln nach Belieben hinzuzufügen oder zu entfernen. Wenn cssrules in ein persistentes Objekt wie ein jQuery-Widget eingebettet ist, können Sie mit einer persistenten lokalen Variablen arbeiten.
quelle
Beachten Sie, dass
jQuery().css()
die Stylesheet-Regeln nicht geändert werden, sondern nur der Stil jedes übereinstimmenden Elements.Stattdessen habe ich hier eine Javascript-Funktion geschrieben, um die Stylesheet-Regeln selbst zu ändern.
Vorteile:
<head>
Skript berechnet werden, bevor die DOM-Elemente erstellt werden, und daher vor dem ersten Rendern des Dokuments, wobei ein visuell störendes Rendern vermieden, dann berechnet und dann erneut gerendert wird. Mit jQuery müssen Sie warten, bis die DOM-Elemente erstellt wurden, und sie dann neu formatieren und neu rendern.jQuery(newElement).css()
Vorsichtsmaßnahmen:
s.cssRules
definiert, sodass sie aufs.rules
einige Besonderheiten zurückgreifen , wie z. B. merkwürdiges / fehlerhaftes Verhalten in Bezug auf durch Kommas getrennte Selektoren, wie z"body, p"
. Wenn Sie diese vermeiden, sind Sie in älteren IE-Versionen möglicherweise ohne Änderungen in Ordnung, aber ich habe es noch nicht getestet."first, second"
dh das Trennzeichen ist ein Komma, gefolgt von einem Leerzeichen.!important
Modifikator ohne allzu große Probleme hinzufügen .Wenn Sie diese Funktion verbessern möchten, finden Sie hier einige nützliche API-Dokumente: https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet
quelle
In (ungewöhnlichen) Fällen, in denen Sie Stile häufig dynamisch ändern möchten, z. B. in einer Theme Builder-App, führt das Hinzufügen von <style> -Tags oder das Aufrufen von CSSStyleSheet.insertRule () zu einem wachsenden Stylesheet, das Leistung und Design aufweisen kann Auswirkungen auf das Debuggen.
Mein Ansatz erlaubt nur eine einzige Regel pro Selektor / Eigenschaft-Kombination, wodurch alle beim Festlegen einer Regel vorhandenen Regeln gelöscht werden. Die API ist einfach und flexibel:
Verwendung:
quelle
Was ist, wenn Sie dynamisch einen <Skript> -Abschnitt auf Ihrer Seite geschrieben haben (mit Ihren dynamischen Regeln) und dann jQuerys .addClass (Klasse) verwendet haben, um diese dynamisch erstellten Regeln hinzuzufügen?
Ich habe dies nicht versucht, sondern nur eine Theorie angeboten, die funktionieren könnte.
quelle
Eine etwas faule Antwort darauf, aber der folgende Artikel kann helfen: http://www.javascriptkit.com/dhtmltutors/externalcss3.shtml
Versuchen Sie auch, "CSS-Regeln ändern" in Google einzugeben
Ich bin mir nicht sicher, was passieren würde, wenn Sie versuchen würden, ein document.styleSheets [0] mit jQuery () zu verpacken, obwohl Sie es versuchen könnten
quelle
Sie können das cssRule-Plug-In verwenden . Der Code war damals einfach:
In einem der bisherigen Kommentare wurde gefragt, warum man so etwas tun möchte. Erstellen Sie beispielsweise Stile für eine Liste, in der jedes Element eine bestimmte Hintergrundfarbe benötigt (z. B. die Kalenderliste von GCal), in der die Anzahl der Spalten erst zur Laufzeit bekannt ist.
quelle
div:before{content:'name: ';}
Hier ist ein Setup, das den Befehl über Farben mit diesem JSON-Objekt gibt
diese Funktion
um dieses Stilelement zu produzieren
quelle
Wenn Sie einer CSS-Klasse keine Anzeige zuweisen möchten: Keine, der richtige Ansatz zum Anhängen an den Stil, jQuery.Rule erledigt den Job.
In einigen Fällen möchten Sie Stile vor dem Anhängen von Ajax-Inhalten anwenden und Inhalte nach dem Anhängen verblassen, und das ist es!
quelle
Hier haben Sie eine Funktion, um die vollständige Definition einer CSS-Klasse zu erhalten:
quelle
Sie können diese Bibliothek namens cssobj verwenden
Sie können Ihre Regeln jederzeit wie folgt aktualisieren:
Dann hast du die Regel geändert. jQuery ist nicht die Bibliothek, die dies tut.
quelle
Ich habe in letzter Zeit mit einigen davon herumgespielt und beim Programmieren einer iPhone / iPod-Site zwei verschiedene Ansätze verwendet.
Der erste Weg, den ich bei der Suche nach Orientierungsänderungen gefunden habe, damit Sie sehen können, ob das Telefon im Hoch- oder Querformat ist, ist ein sehr statischer Weg, aber einfach und clever:
In CSS:
In der JS-Datei:
In PHP / HTML (Importieren Sie zuerst Ihre JS-Datei und dann in das Body-Tag):
Dies wählt grundsätzlich einen anderen voreingestellten CSS-Block aus, der ausgeführt werden soll, abhängig vom Ergebnis, das aus der JS-Datei zurückgegeben wird.
Die dynamischere Art, die ich bevorzugte, war auch eine sehr einfache Ergänzung zu einem Skript-Tag oder Ihrer JS-Datei:
Dies funktioniert für die meisten Browser, aber für IE ist es am besten, die Munition mit etwas Festerem wegzunehmen:
Oder Sie können
getElementByClass()
eine Reihe von Elementen verwenden und ändern.Hoffe das hilft!
Asche.
quelle
Vielleicht können Sie die Stilinformationen in eine separate Klasse in Ihrer CSS-Datei einfügen, z.
und dann jQuery an dem Punkt Ihrer Wahl verwenden, um diesen Klassennamen zum Element hinzuzufügen?
quelle
Sie könnten einfach eine CSS-Klasse erstellen, die so etwas wie .fixed-object heißt und alle Ihre CSS enthält ...
Dann in jquery, wann immer Sie möchten, dass etwas diesen Stil hat, fügen Sie einfach diese Klasse hinzu ...
Das scheint der einfachste Weg zu sein, es sei denn, ich verstehe falsch, was Sie tun müssen.
quelle
Durch die Verwendung von .addClass () in jquery können wir Elementen auf der Seite dynamisch Stil hinzufügen. z.B. Wir haben Stil
Jetzt können wir im Bereitschaftszustand von jquery CSS wie .addClass (myStyle) hinzufügen.
quelle