2013-06-06 3 views
5

Ich arbeitete auf einer Website, und ich dachte daran, wie lustig es wäre, wenn ich die CSS-Regeln auf der Seite als einen Witz vollständig randomisiert. (Nicht nur die Stile der Elemente, sondern auch die CSS-Regeln selbst, da die Website viele dynamisch erstellte Elemente enthält.) Jedes Mal, wenn Sie die Seite laden, wäre das Ergebnis völlig anders, und die meisten würden schrecklich aussehen. Also meine Frage hat zwei Teile:Randomize CSS Regeln

Verwenden von JavaScript/JQuery, Wie erhalten Sie programmgesteuert eine Liste aller CSS-Regeln? Als eine Art Wörterbuch, in dem die Regeln mit den Selektoren gepaart sind.

Nachdem Sie die Liste aufgeteilt und jede Regel nach dem Zufallsprinzip einer anderen Auswahl zugewiesen haben, wie löscht man die vorherigen Regeln und ersetzt sie durch eigene?

HINWEIS: Ich meine, mit JavaScript/JQuery, wie Sie die Regeln auf der Clientseite randomisieren, nicht nur eine einzelne CSS-Datei.

+2

und wie überzeugen Sie den Benutzer, F5 zu drücken, um ohne Cache neu zu laden. Sie müssen wahrscheinlich auch den Namen der CSS-Datei ändern oder ein? v = random_number – Pleun

+0

Nun, ich dachte, dass Sie es mit JavaScript/jQuery randomisieren würden, anstatt tatsächlich die CSS-Dateien zu ändern. Auf diese Weise gibt es viel weniger Risiko, und es ist sowieso eine vollständigere Randomisierung. – aboveyou00

+0

Sie meinen, bestehende Regeln in Ihrer CSS-Datei neu zu verteilen? – Pleun

Antwort

1

Beachten Sie, dass dies ein bisschen pseudo-ey ist, auch, dass Sie dies mit reinem JS tun können.

foreach (var e in document.getElementsByTagName("*")) { 
    foreach (var p in el.style) { 
    var r = Math.random(0, 255); 
    e.style[p] = r; 
    } 
} 

beachten Sie auch, dass nicht alle CSS-Eigenschaften nehmen 0-255 so können Sie Ihren eigenen Algorithmus erstellen müssen, aber diese werden sicher erhalten Sie begonnen haben.

+0

Dies ändert nur die Stile der Elemente, nicht die Regeln selbst - es wird nichts für dynamisch erstellten Inhalt tun. – aboveyou00

+0

Wenn Sie wollen, dass es nur mit Ihrer Seite passiert, dann beantwortet dies die 1 Frage, die ich beantworte. Wenn Sie es global als Witz wollen, dann müssen Sie ein Browser-Plugin haben, um über alle Websites zu erstrecken. Wäre es kein passiver Witz mehr: P – sircapsalot

+0

Sie könnten Klassen einfach nach Elementen sortieren und diese nach Themen sortieren. –

2

Sie können auf alle Stylesheets mit document.styleSheets zugreifen und diese durchlaufen. Siehe API-Dokumentation unter MDN

+0

Dieser Link kann nützlich sein: http://stackoverflow.com/questions/324486/how-do-you-read-css-rule-values-with-javascript – Johnny5

0

Das Durchlaufen aller Elemente auf der Seite wäre trivial (document.getElementsByTagName('*')).

Das Durchlaufen aller verfügbaren Stile für jedes Element wäre trivial (element.style).

Das Festlegen zufälliger Werte für einen bestimmten Stil wäre schwieriger.

Sie müssten hart codierte Listen von Stilen und möglichen Werten für jede von ihnen haben, weil die Werte, die eingestellt werden können, so wild variieren. Einige können in verschiedenen Einheiten (px, em,%) stehen. Einige von ihnen haben vordefinierte Schlüsselwörter als mögliche Werte.

Und ein zufälliger Wert ist überhaupt nicht gut, wenn Sie keine Grenzen haben. Eine zufällige Einstellung width klingt einfach, aber Sie müssen wissen, in welchen Bereichen Sie arbeiten werden. width:5743731px wird nicht einmal für eine randomisierte Seite sehr nützlich sein.

Und dann haben Sie die Eigenschaften, die externe Ressourcen abrufen können. Ein CSS-Hintergrundbild wird praktisch unmöglich zu randomisieren sein, und Schriften müssten in einer separaten @font-face Deklaration geladen werden, so dass Sie nur in der Lage sein würden, Schriften, die Sie wissen, geladen sind.

Und dann müssen Sie darüber nachdenken, wie randomisiert Sie sein werden. Werden Sie jeden möglichen Stil auf jedem Element randomisieren? (verrückt, aber hey, das Ganze ist verrückt, also warum nicht) Oder nur ein Stil pro Element?

Vergessen Sie nicht, dass viele Stile in Verbindung miteinander arbeiten. So text-overflow:ellipsis tut nichts, wenn Sie auch white-space:nowrap und overflow:hidden haben. Die Einstellung border-color ist sinnlos, wenn Sie nicht auch die anderen Rahmenattribute festgelegt haben.

Also ja, ich denke, Ihre erste Aufgabe wäre hier, die Liste der CSS-Stile durchzugehen und herauszufinden, welche davon randomisiert werden könnten und wie die möglichen Zufallswerte für sie aussehen könnten. Das ist das Schwierige. Sobald Sie das haben, schreiben Sie es in Ihr Programm, und der Rest sollte ziemlich einfach sein.