CSS Eigenschaft mit Javascript ändern

Gast #7053383
Lesenswert?

Hallo zusammen,

ich suche nach der Lösung für ein bestimmtes Problem mit CSS und 
Javascript.
Ich möchte abh. von diversen (HIER IRELEVANTEN) User-Vorgaben eine bzw. 
mehrere CSS-Eigenschaft(en) mittels Javascript ändern und komme aktuell 
nicht drauf, wie es gehen könnte.
Im Anhang mal ein AUSZUG aus meinen einzelnen Dateien.

Was ich suche, ist die Javascript Methode zur Anpassung des <hr> Tags, 
hier speziell die Eigenschaft "width" und das auch nur innerhalb der 
"submain" div. Ich möchte nicht jedem hr-Tag eine ID geben! Das muss 
doch auch anders gehen? Beispielhaft habe ich die Änderung von "width" 
der "submain" div mal im Javascript dargestellt. Das geht ja wegen der 
vergebenen ID.

Die HTML-Datei(en) möchte ich nicht ändern.
Kann mir jemand helfen?

Gruß
TK
Angehängte Dateien:
#7053391
Lesenswert?

TK schrieb:
> Die HTML-Datei(en) möchte ich nicht ändern.

Tja, damit gings am schönsten....

neue Klasse "submain_breit" erstellen, darin die width: 420px; 
unterbringen, im JS-Code statt
document.getElementById("submain").style.width="420px";
einfach die Klasse setzen.

Und schon kannst du auf die HRs unterhalb der breiten Klasse automatisch 
eine eigene Breite anwenden.
(Firma: egal) #7053404
Lesenswert?

TK schrieb:
> Die HTML-Datei(en) möchte ich nicht ändern.

Wenn du die .js in einer eigenen Datei drin hast, kommst du aus ohne die 
.html. Wenn der js Anteil allerdings direkt in der html Antwort 
eingebunden ist, musst du da natürlich dran.

Die Eigenschaften aus der css werden quasi nur einmal am Anfang auf die 
html-tag angewendet, danach kannst du dann mit js die einzelnen 
Eigenschaften von jedem html-tag jederzeit überschreiben.
Gast #7053421
Lesenswert?

Hallo Ernst,

die Breite (und später auch noch andere Eigenschaften wie Farbe, 
Position usw) soll auch noch dynamisch sein! Dann macht eine eigene 
Klasse nicht wirklich Sinn.
Könnte man evtl. mittels getElementsByTagName("hr") speziell auf die 
Tags innerhalb der submain zugreifen? Diese Methode gibt ja alle HR-Tags 
zurück - und ich kenne dann den/die Indexbereich(e) nicht, zumal es 
andere HTML-Dateien mit gleichem Aufbau, jedoch andere Anzahlen von 
LI-Elementen gibt. Dann wäre der Indexbereich ebenso dynamisch.

Gruß
TK
Gast #7053431
Lesenswert?

@Irgend W.
Die speziellen Abfragen für die geänderte Darstellung innerhalb der HTML 
Datei(en) erfolgen durch die "body onload=..." Aufrufe. In der 
JS-Funktion soll dann die Änderung der CSS Eigenschaft(en) erfolgen 
(daher können die HTML Dateien so bleiben, wie sie sind - hoffentlich)

@Oliver:
mit JQuery hab ich noch nichts gemacht - werd mich mal in einer ruhigen 
Minute einlesen - Danke

Gruß
TK
#7053435
Lesenswert?

TK schrieb:
> mit JQuery hab ich noch nichts gemacht - werd mich mal in einer ruhigen
> Minute einlesen - Danke

Brauchts auch nicht wirklich. Vieles was Früher™ umständlich war und per 
jQuery erleichtert wurde, ist inzwischen direkt in die Browser 
gewandert.

TK schrieb:
> getElementsByTagName("hr") speziell auf die
> Tags innerhalb der submain zugreifen?

du suchst document.querySelectorAll(".submain hr")

Edit:
du hast eine id, also:

document.querySelectorAll("#submain hr")

(wie im CSS)
Gast #7053445
Lesenswert?

Bei einem style Element gibt es: 
https://developer.mozilla.org/en-US/docs/Web/API/CSSStyleSheet#methods

Das funktioniert auch: 
style.innerText='';style.appendChild(document.createTextNode(css));

Ist aber meistens eher murks. Wenn es einfach überall sein muss, könnest 
du sowas machen:
1
// css
2
.fancystate div hr {
3
  width: 123px;
4
}
5
// js: auf <html> die klasse setzen
6
document.documentElement.classList.add("fancystate");
7
document.documentElement.classList.remove("fancystate");

Oder eventuell wären auch CSS Custom Properties was:
1
// CSS
2
:root {
3
  --bla-hr-width: initial;
4
}
5

6
div hr {
7
  width: var(--bla-hr-width);
8
}
9

10
// JS
11
document.documentElement.style.setProperty('--bla-hr-width', '123px');

Wenn es aus irgendwelchen gründen wirklich auf dem hr selbst gesetzt 
werden muss, musst du halt über alle drüber gehen:
1
for(let hr of document.querySelectorAll('div > hr')){
2
  hr.style.width = '123px';
3
}

Und ja, vergiss jQuery, das macht heute nur noch Probleme.
Gast #7053468
Lesenswert?

Noch was. Oft braucht man JS gar nicht, wenn es nur um 
Darstellungssachen geht. Mit %, calc, var, glex, grid. etc. ist das 
alles recht flexibel, und mit :hover, :active, :focus und checkboxen, 
kann man auch ein paar stateful sachen machen.

Als Beispiel, was so alles möglich ist, ohne JS:
Was man mit css & checkboxen so anstellen kann: 
https://tic-tac-toe-s.s.abrecht.li/
Berechnen und Zusammensetzen von css Properties mit var & calc bei sehr 
complexen exacten layouts: https://togn-s.s.abrecht.li/build/togn.xhtml 
(All die Linien sind per CSS gemacht, das HTML ist rein semantisch)
Animierte 3d umgebungen: https://keithclark.co.uk/labs/css-fps/nojs/
Komplexe grid layouts: 
https://developer.mozilla.org/de/docs/Web/CSS/CSS_Grid_Layout
Responsive Layoutänderungen: 
https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design 
(und in zukunft irgendwann mal 
https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Container_Queries)
Animierte Übergänge: 
https://developer.mozilla.org/de/docs/Web/CSS/transition

Also bei layout Sachen immer 2mal überlegen, ob es JS wirklich dafür 
braucht.
Gast #7053525
Lesenswert?

So, auf die Schnelle hat das Beispiel für das Forum von Ernst die Lösung 
gebracht. Damit kann ich die HR-Tags dynamisch anpassen - SUPER!
(den document.querySelectorAll kannte ich bisher noch nicht, bin 
wahrscheinlich bei CSS1.0 hängen geblieben)

Gruß
TK

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren