Webmaster общности: Predpriemach.com | SearchEngines.bg

    Меню на 3 нива само с CSS

    CSS обучение

    Автор: shterev

    Така , това е урок напсан лично от мен (Shterev), който цели да покаже структурата и изграждането на меню, което има 2 нива на под менюта.
    Необходим ни е само CSS2, за което съм и използвал една картинка за главните бутони – може да се направи и с css3, но тогава ефекта от заоблянето,
    няма да го има в IE или ще трябва да слагате javascript-и допълнителни.
    Менюто работи под всички браузъри освен ИЕ6. където просто трябва да се добави javascript код, който да играе ролята на :hover.

    За структура съм използвал <ul> списъци.

    Имаме главен <ul> , в него имаме нормални ,<li> , който съответно имат и <а> тагове.
    На главния <ul> слагам клас ‘navigation’, а <li> тата задаваме един default стил.
    На онези <li> тагове, които ще имат падащи менюта им се добава друг стил/клас – в случая ‘showdrop’.
    На <а> таговете на главните бутони слагам клас ‘base’ , за да ми е по-удобно в цсс-а.
    До тук менюто изглежда така:

    Структура:
    <ul class="navigation">
    <li><a class="base" href="#"><span>За нас</span></a></li>
    <li><a class="base" href="#"><span>Връзка с обществеността</span></a></li>
    <li><a class="base" href="#"><span>Продукти</span></a></li>
    </ul>

    В цсс-а какво правим?
    Ами просто аз в този случай съм направил една картинка със заоблени краища, и менюто е подобно от предния ми урок, самоче картинката е една (спрайт).
    Та задаваме ширина и височина на .navigation , както и релативна позиция, която ще ни помогне при позициониранеот на <ul> от 3 -тото ниво.
    На <li> тата задаваме да са са флоатнати в ляво, и съответно падинг, колкото е необходим.

    На главните <а> слагаме клас .base и съответно да са блокови елементи, за да можем да им зададем размери, картинка.Те също са флоатнати и НЯМАТ ширина (width), по простата причина, че текста в тях ще се разтяга. Задал съм им една картинка за нормално състояни и за :hover ефект, няма да обяснявам точно как става номера, направо го вижте.Ей тука ще напиша ей така едно безмислено изречение , в което ще кажа ,че кода е написан за уеб-торист.нет от Йордан Щерев, с цел да не се краде по други форуми.
    Интересното тук е ,че съм добавил . Той ми е необходим именно за да се направи менюто разтегливо, като за да работи под ИЕ също е флоатнато и е блоков елемент, много е важно да се флоатна, защото в ИЕ6 менюто се чупи.
    Следваща стъпка е добавянето на нов списък <ul>с клас ‘drop’ , който е в съответното <li> , а на това ли добавяме клас ‘showdrop’. Тук имаме и разделител ‘ | ‘ .

    Структура:
    <ul class="navigation">
    <li class="showdrop">
    <a class="base" href="#"><span>За нас</span></a>
    <ul class="drop">
    <li class="showsuper"> <a href="#">Нашия екип</a></li>
    <li class="showsuper" >
    &nbsp; | &nbsp;
    <a href="#">Счетоводна отчетност</a>
    </li>
    </ul>
    <li><a class="base" href="#"><span>Връзка с обществеността</span></a></li>
    <li><a class="base" href="#"><span>Продукти</span></a></li>
    </ul>

    Особеното на тоя <ul> е, че той трябва да ми заема цялата ширина, като му задавам ширина. Вече имаме абсолютна позиция, за да може да е под основните бутони.

    Този списък не стрябва да се вижда , като му задавам display:none;
    Стилизираме си списъка да е на 1 ред, т.е те взимат стила на -тата, които им се падат родители, просто донаместваме падинги и други, ако има.
    В цсс-а вече задавам стила на <а> таговете, като тук използвам следната структура в цсс-а .navigation ul.drop a , като може и по-просто да се напише :-).
    Така как става номера когато посочим <li class=“showdrop“>да се показва <ul class=“drop“>, ами много просто – на .showdrop задаваме следния цсс:
    .navigation li.showdrop:hover ul.drop{ display:block; } – просто при посочване списъка да става блоков елемент и съответно той става видим.
    До тук изградихме меню на 2 нива – главно и едно падащо.

    Следващото ниво на структорно ниво е аналогочно на по-горното. В съответното <li> добавяме нов смисък. на лито , добавяме клас, който да контролира показването на списъка.
    Съответно
    тага му ссе задават съответните стилове, като в моя случай списъка заема широчината на най-дългия линк в него, като за целта съм ползвал white-space: nowrap;
    Другата осовеност е,че този списък също има position:absolutе; за да мога да го позиционирам да е под съответните линкове.На литата вече махам флоатинга , за да станат едно под друго.
    Структурата вече е както в демото.
    Една тънкост/особеност ще забележите,че при посочване на линковете от 2-то и 3-тот ниво главния бутон си стои все едно е посочен.
    За да стане този ефект, просто задавам когато главното <li> e почочено , на <а> тага в него да се сменя бекграунда, съответно и на спана в <а> тага.

    Ето го и кода:

    .navigation li:hover a.base{ background-position:left -52px; color:#fefefe; }
    .navigation li:hover a.base span{ background-position:right -78px; color:#fefefe; }

    От демото най-ясно се вижда ефекта на цялото меню.
    Със сигурност ще имате неяснотии и въпроси. Ако имате въпроси питайте 🙂

    • Кода е писан лично от мен (Shterev), за един проект.
    • Урока е написан специално за потребителите на web-tourist.net

    Свали демо!