Autor Zpráva
Marťass
Profil *
Ahoj, jak můžu nastavit css styl pouze odkazům když jsou takto vnořeny. Děkuji
<div class="menu">
  <h2>MENU-1</h2>
  <ul>
    <li><a href=""></a></li>
    <li><a href=""></a></li>
    <li><a href=""></a></li>        
  </ul>
  <h2>MENU-2</h2>
  <ul>
    <li><a href=""></a></li>
    <li><a href=""></a></li>
    <li><a href=""></a></li>        
    <li><a href=""></a></li>        
    <li><a href=""></a></li>        
    <li><a href=""></a></li>                    
  </ul>
</div>
Mlocik97
Profil
div.menu > ul > li > a {
    //
}

znak > znázorňuje hierarchiu že ako musia byť elementy vnorené aby sa na nich aplikovala css vlastnosť. To znamená že ak vložíte odkaz priamo do div.menu a nie konkrétne do ul li. Tak sa naň daná css vlastnosť neaplikuje. Ake je ten odkaz ale práve v elemente li, ktorý je v elemente ul, ktorý je v elemente div.menu tak sa aplikuje...

.menu > ul > li > a {
    //
}
je to isté ale aplikuje sa na akýkoľvek odkaz v li v ul v akomkoľvek elemente s triedov menu.


viac info: Child combinator - CSS: Cascading Style Sheets | MDN
Tomášeek
Profil
Marťass:
Zde bohatě postačí .menu a
Keeehi
Profil
Mlocik97:
znak > znázorňuje hierarchiu že ako musia byť elementy vnorené aby sa na nich aplikovala css vlastnosť.
To není pravda. To co popisuješ se dá vyjádřit div.menu ul li a. Znak > určuje, že u toho zanořeného elementu musí jít o přímého potomka. Tedy že potomek musí být přímo v rodiči a ne až někde hlouběji ve struktuře. O čemž se ale vůbec nezmiňuješ.
Trejpa
Profil
Mlocik97:
Poučíš mě prosím, co ve tvém příkladě CSS znamenají dvě lomítka za sebou?
Marťass
Profil *
Tak že to má být takto? Jenže to nefunguje:(

document.getElementsByClassName('.menu a').style.backgroundColor = 'orange';
Keeehi
Profil
Metoda getElementsByClassName předně vrací pole objektů. Takže to pole pak musíš projít prvek po prvku a každému nastavit tu barvu zvlášť.
Za druhé má mít jako argument jméno třídy a ne css selektor . To o co se snažíš dělá metoda querySelectirAll.

Nicméně, proč to děláš v javascriptu a ne v css. Pokud to má být obarvené jen občas, tak v některých případech jdou použít psoudo-třídy (:hover a jiné) a kdyby to bylo něco speciálního, tak to udeláš tak, že tomu rodičovské elementu (div s třídou menu) pridáš javascriptem nějakou třídu, třeba active a v css to definuješ takto:

div.menu.active a {
    background-color: orange;
}
Trejpa
Profil
Marťass:
Když pominu, že '.menu a' není className, tak takhle odkazy neobarvíš. Výsledkem getElementsByClassName je pole elementů. Nemůžeš obarvit pole. Vyhledáním odkazů v tomto poli bude také polem (getElementsByTagName), kterému opět nemůžeš přímo přiřadit barvu. Řešením je projít pole cyklem a obarvit položky každou zvlášť. Pokud bude ve tvém kódů <div class="menu"> pouze jednou, stačí projít cyklem jen odkazy v něm (v prvním):

<script>
var a=document.getElementsByClassName('menu')[0].getElementsByTagName('a');
for(i=0;i<a.length;i++){a[i].style.backgroundColor = 'orange';}
</script>

Bude-li elementů s třídou menu více, je třeba projít dalším cyklem i všechny jejich výskyty.

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0