Jak rozciągnąć menu poziome do szerokości strony. Poziome menu rozwijane „zrób to sam” przy użyciu CSS i HTML
Kontynuujemy serię lekcją na temat menu rozwijanych. Następne w kolejności jest poziome menu rozwijane, które można wykonać samodzielnie, korzystając z CSS.
Jeśli trafiłeś tu przez przypadek lub poszukiwałeś innej implementacji rozwijanego menu, radzę przejść do sekcji nadrzędnej.
W tej sekcji opisano poziome menu rozwijane w CSS i HTML.
Nawigacja strony:
Więc, nasze zadanie:
Do menu poziome z rozwijaniem lista CSS(na listach ul li) bez użycia jQuery i JavaScript, a także bez użycia tabel
6.0+ | 6.0+ | 10.5+ | 5.0+ | 3.6+ | - | - |
Cześć. Już dawno nie pisałem postów na temat pracy z HTML/CSS. Niedawno zacząłem składać nowy układ i przy okazji natknąłem się na ciekawy trik, który pozwala na uelastycznienie menu (możesz dodawać do niego nowe pozycje, a jego rozmiar nie będzie się zwiększał, ale zawsze będzie w 100% blok nadrzędny). Zatem dzisiaj zaimplementujemy gumowe menu za pomocą CSS.
Jeśli jesteś zbyt leniwy, aby przeczytać artykuł, możesz obejrzeć ten film. Autor również wszystko bardzo dobrze wyjaśnia:
Pierwszym krokiem jest zawsze znacznik HTML. Gdzie bylibyśmy bez niego? Ale w naszym przypadku wszystko będzie proste:
Wszystko jest jasne, oto mój kod znaczników:
Wszystko wygląda standardowo, tak:
Teraz wszystko wprowadzimy właściwy typ, CSS zaczyna działać.
Krok 2 – Podstawowe styleNastępnie dodam style do bloku opakowania. Mianowicie ustawię maksymalną szerokość na 600 pikseli (żeby ułatwić wykonanie zrzutu ekranu, aby menu się zmieściło), a także wyśrodkuję blok.
Zawinąć(
tło: #fff;
maksymalna szerokość: 600px;
margines: 0 auto;
}
Zajmijmy się teraz samym menu. Usunę z niego znaczniki (tag ul), zrobię liniowy gradient tła i, co najważniejsze, użyję właściwości display: table-row, aby kontener menu zachowywał się jak wiersz tabeli. Jest to ważne w przypadku dalszych manipulacji.
Menu R(
tło: gradient liniowy (w prawo, #b0d4e3 0%, #88bacf 100%);
wyświetlacz: wiersz tabeli;
styl listy: brak;
}
Jak widać, powyższy kod właśnie rozwiązał wszystko, o czym pisałem. Nawiasem mówiąc, wygodnie jest generować gradienty za pomocą narzędzia generatora gradientów Ultimate CSS. Kiedyś jeszcze o nim napiszę.
Menu R(
wyrównanie w pionie: dół;
wyświetlacz: komórka-tabela;
szerokość: automatyczna;
wyrównanie tekstu: do środka;
wysokość: 50px;
obramowanie po prawej: 1px bryła #222;
}
- pionowo-align: dół - ta właściwość jest konieczna, aby tekst w pozycji menu zajmujący 2 linie był wyświetlany równomiernie. Kiedy tworzymy menu, możesz usunąć tę właściwość, powiększyć tak, aby elementy zostały skompresowane, a tekst został przeniesiony do dwóch linii, co spowoduje problem z wyświetlaniem. Zwróć nieruchomość i wszystko będzie dobrze.
- display: table-cell - ponieważ samo menu wyświetlania ustawiamy jako wiersz tabeli, logiczne byłoby ustawienie jego elementów tak, aby były wyświetlane jako komórki w tabeli. To konieczność.
- szerokość: auto — szerokość zostanie obliczona automatycznie w zależności od długości tekstu w akapicie
- text-align: center - służy do wyśrodkowania tekstu wewnątrz
- wysokość: 50px — ustaw wysokość na 50 pikseli
- cóż, border-right to po prostu obramowanie po prawej stronie, separator elementów
Na razie menu wygląda nieestetycznie, ale to nic, czas sobie o tym przypomnieć.
Ostatnią rzeczą do zrobienia jest nadanie stylu linkom wewnątrz elementów. Tutaj mam ten kod:
Menu R li a(
dekoracja tekstu: brak;
szerokość: 1000px;
wysokość: 50px;
wyrównanie w pionie: środek;
wyświetlacz: komórka-tabela;
kolor: #fff;
czcionka: normalna 14px Verdana;
}
A tak wygląda teraz menu:
Jeszcze raz wyjaśnię kilka linijek:
- właściwość tekst-dekoracja zastępuje domyślne podkreślenie łączy
- szerokość: 1000 pikseli jest prawdopodobnie najważniejszą linią. Musisz ustawić linki na mniej więcej tę szerokość, może mniejszą, ale zdecydowanie większą niż najszerszy możliwy element menu. Linki nie będą miały szerokości 1000 pikseli, ponieważ szerokość będzie ograniczona przez pozycję menu li, której szerokość jest ustawiona na auto, ale dzięki temu będzie można mieć pewność, że dla dowolnej liczby pozycji w menu będzie ona zawsze wynosić 100 procent szerokości.
- Vertical-align: Middle i Display: table-cell - pierwszy wyrówna tekst pionowo do środka, a drugi wyświetli także linki jako komórki. Obie właściwości są potrzebne.
- czcionka - cóż, to tylko zestaw ustawień czcionki. Przeczytaj o właściwości CSS dla czcionek w tym artykule.
Na przykład, aby kolor elementu menu zmieniał się po najechaniu kursorem. Można to zaimplementować po prostu, używając pseudoklasy hover:
Menu R li:hover(
kolor tła: #6bba70;
}
Świetnie, menu gotowe, ale nie sprawdziliśmy najważniejszego – jak bardzo jest gumowate, tak jak obiecałem. Cóż, dodam jeszcze 2 pozycje do menu:
Menu ma szerokość 600 pikseli. Pozostałe elementy zostały po prostu nieco zmniejszone, aby pomieścić 2 nowe.
Dodam jeszcze jeden długi punkt:
Jak widać menu nieco się skurczyło i długa pozycja wyświetla się całkiem normalnie. A gdyby nie właściwość Vertical-align: Bottom, o której Ci mówiłem, menu wyglądałoby gorzej.
Ograniczę menu do trzech pozycji.
Pozycje stały się znacznie bardziej swobodne, ale samo menu nie zmieniło się pod względem szerokości. Stworzyliśmy więc menu w 100% gumowe!
W zasadzie, jeśli nadasz blokowi owijającemu maksymalną szerokość, a nie stałą, nie trzeba go nawet dostosowywać. W moim przypadku mam właściwość max-width: 600px i gdy szerokość spadnie poniżej 600 pikseli, blok po prostu zmniejszy się wraz z ekranem, bez tworzenia poziomego przewijania.
Cóż, jeśli chcesz w jakiś sposób zmienić lub poprawić menu urządzenia mobilne lub szerokie ekrany, wtedy zapytania o media Ci pomogą! Powodzenia w tworzeniu strony internetowej!
Menu poziome to lista sekcji witryny, dlatego bardziej logiczne jest umieszczenie go wewnątrz elementu
- , a następnie zastosuj style CSS do jego elementów. Ten układ menu jest najczęstszy ze względu na oczywiste zalety jego pozycjonowania na stronie internetowej. Jak zrobić menu poziome: przykłady układu i projektu
Znaczniki HTML i podstawowe style menu poziomego
- Pozycja menu
- Pozycja menu
- Pozycja menu ...
Domyślnie wszystkie elementy listy są ułożone pionowo, zajmując całą szerokość elementu kontenera, który z kolei zajmuje całą szerokość jego bloku kontenera.
Znaczniki HTML do nawigacji poziomej
Poziome menu znajdujące się wewnątrz tagu można dodatkowo umieścić wewnątrz elementu ... i/lub .... Dzięki temu znacznikowi HTML nadawane jest i pojawia się również znaczenie semantyczne dodatkowa szansa aby sformatować blok menu.
Istnieje kilka sposobów ułożenia ich poziomo. Najpierw musisz zresetować domyślne style przeglądarki dla elementów nawigacyjnych:
Ul ( styl listy: brak; /*usuń znaczniki listy*/ margines: 0; /*usuń górny i dolny margines równy 1em*/ padding-left: 0; /*usuń lewe wypełnienie równe 40px*/ ) a (dekoracja tekstu: brak; /*usuń podkreślenie tekstu linku*/)
Metoda 1. li (wyświetlacz: inline;)Tworzenie elementów listy małymi literami. W rezultacie są one umieszczone poziomo, z prawa strona między nimi dodaje się odstęp 0,4 em (obliczony w stosunku do rozmiaru czcionki). Aby go usunąć, dodaj ujemny prawy margines dla li li (margines-right: -4px;) . Następnie stylizujemy linki według własnego uznania.
Metoda 2. li (pływak: w lewo;)Tworzenie ruchomych elementów listy. W rezultacie są one ustawione poziomo. Wysokość bloku kontenerowego ul staje się zerowa. Aby rozwiązać ten problem dodajemy (przepełnienie: ukryte;) do ul, rozszerzając ją i pozwalając tym samym na umieszczenie w niej elementów pływających. W przypadku linków dodaj (display: block;) i nadaj im styl według własnego uznania.
Metoda 3. li (wyświetlacz: blok inline;)Tworzenie elementów listy w bloku inline. Są one umieszczone poziomo, po prawej stronie tworzy się szczelina, jak w pierwszym przypadku. W przypadku linków dodaj (display: block;) i nadaj im styl według własnego uznania.
Metoda 4. ul (wyświetlacz: flex;)Uczynienie listy ul elastycznym kontenerem przy użyciu . W rezultacie elementy listy są ułożone poziomo. Do linków dodajemy (display: block;) i stylizujemy je według potrzeb.
1. Menu adaptacyjne z efektem podkreślenia po najechaniu kursorem na link @import url("https://fonts.googleapis.com/css?family=Ubuntu+Condensed"); .menu-main ( styl listy: brak; margines: 40px 0 5px; dopełnienie: 25px 0 5px; wyrównanie tekstu: środek; tło: biały; ) .menu-main li (display: inline-block;).menu- main li:after (treść: "|"; kolor: #606060; wyświetlacz: inline-block; Vertical-align:top; ) .menu-main li:last-child:after (treść: brak;) .menu-main a (dekoracja tekstu: brak; rodzina czcionek: „Ubuntu Condensed”, bezszeryfowa; odstępy między literami: 2px; pozycja: względna; dopełnienie-dół: 20px; margines: 0 34px 0 30px; rozmiar czcionki: 17px; transformacja tekstu: wielkie litery; wyświetlacz: blok inline; przejście: kolor .2s; .menu-main a, .menu-main a:odwiedzone (kolor: #9d999d;). ) .menu-main a:before, .menu-main a:after (treść: ""; pozycja: bezwzględna; wysokość: 4px; góra: auto; prawa: 50%; dół: -5px; lewa: 50%; tło : #feb386; przejście: .8s; ) .menu-main a:hover:przed, .menu-main .current:przed (po lewej: 0; najechanie kursorem:po, .menu-main .current:po (po prawej:). 0;) @media (max-width: 550px) ( .menu-main (padding-top: 0;).menu-main li (display: block; ) .menu-main li:after (treść: brak;) . menu-main a ( dopełnienie: 25px 0 20px; @import url("https://fonts.googleapis.com/css?family=PT+Sans"); .top-menu ( pozycja: względna; tło: #fff; box-shadow: inset 0 0 10px #ccc; ) .top-menu:before, .top-menu:after ( treść: ""; display: block; wysokość : 1px; górne obramowanie: 3 piksele ciągłe #575350; obramowanie dolne: 1 piksele ciągłe #575350; margines-dół: 2 piksele; górne menu: po ( obramowanie dolne: 3 piksele ciągłe #575350; górne obramowanie: 1 piksele # 575350; cień ramki: 0 2px 7px #ccc; górny margines: 2px; .menu-main (styl listy: brak; dopełnienie: 0 30px; margines: 0; rozmiar czcionki: 18px; wyrównanie tekstu: do środka; pozycja: względna; ) .menu-main:przed, .menu-main:po ( treść: "\25C8"; wysokość linii: 1; pozycja: bezwzględna; góra: 50%; transformacja: tłumaczenieY(-50% ); (dekoracja tekstu: brak; wyświetlacz: blok inline; margines: 2px 5px; dopełnienie: 6px 15px; rodzina czcionek: „PT Sans”, bezszeryfowa; rozmiar czcionki: 16px; kolor: #777777; border-bottom : 1px stałe przezroczyste; przejście: 0,3 s liniowe; ) .menu-main .current, .menu-main a:hover ( promień obramowania: 3px; tło: #f3ece1; kolor: #313131; cień tekstu: 0 1px 0 #fff; kolor obramowania: #c6c6c6; ) @media (max-width: 500px) ( .menu-main li (display: block;) ) 3. Responsywne menu ząbkowane @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .menu-main ( styl listy: brak; dopełnienie: 0 30 pikseli; margines: 0; rozmiar czcionki: 18 pikseli; wyrównanie tekstu: do środka; pozycja: względna; tło: biały; ) .menu-main: after ( treść: ""; pozycja: bezwzględna; wysokość: 20 pikseli; dół: -20 pikseli; tło: biały 0%, biały 70%, rgba(255,255,255,0) 255,255,255,0) 100%) 0 -10 pikseli; powtórzenie tła: powtórz-x; ) .menu-main li (display: inline-block;) .menu-main a ( dekoracja tekstu: brak; display: inline-block; padding: 10px 30px; rodzina czcionek: " PT Bez podpisu”, bezszeryfowy; przejście: .3s liniowe; -main a:before, .menu-main a:after (treść: ""; pozycja: bezwzględna; góra: calc(50% - 3px); szerokość: 6 pikseli; wysokość: 6 pikseli; promień obramowania: 50%; tło: #F58262; przejście: 0,5 sekundy; .menu-main a:before (po lewej: 5px;) .menu-main a :po (po prawej: 5px;) .menu-main a. bieżąca:przed, .menu-main a.bieżący:po, .menu-main a:hover:przed, .menu-main a:hover:po (opacity: 1;) .menu-main a.current, .menu-main a:hover (color: #F58262;) @media(max-width:680px) ( .menu-main li (display: block;) ) 4. Adaptacyjny menu na wstążce @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .top-menu ( margines: 0 60px; pozycja: względna; tło: #5A394E; box-shadow: wstawka 1px 0 0 rgba(255,255,255,.1), wstawka -1px 0 0 rgba(255,255,255,.1), wstawka 150px 0 150px -150px rgba(255,255,255,.12), wstawka -150px 0 150px -150px rgba(255,255,255,.12); .top-menu:przed, .top-menu:po (treść: ""; pozycja: bezwzględna) ; ; indeks Z: 2; szerokość: 100%; wysokość: 3 piksele; ) .menu-main ( lista -styl: brak; dopełnienie: 0; margines: 0; wyrównanie tekstu: środek; ) .menu-main:po (treść: ""; pozycja: bezwzględna; szerokość: 50px; wysokość: 0 ; góra: 8 pikseli; obramowanie u góry: 18 pikseli ciągłe #5A394E; obramowanie u dołu: 18 pikseli ciągłe # 5A394E; transformacja: obrót (360 stopni); indeks z: -1; obramowanie po lewej: 12 pikseli stałego rgba (255, 255, 255, 0); .menu-main: after ( po prawej: -30 pikseli; obramowanie po prawej: 12 pikseli stałego rgba (255, 255, 255, 0); ) .menu-main li ( display: inline-block; margines-prawy: -4px; ) .menu-main a ( dekoracja tekstu: brak; display: inline-block; padding: 15px 30px; rodzina czcionek: "PT Bez podpisu", bezszeryfowy; kolor: biały; przejście: .3s liniowe; ) .menu-main a.current, .menu-main a:hover (tło: rgba(0,0,0,.2);) @media (max-width: 680px) ( .top-menu (margines: 0;) .menu-main li ( display: block; margines-right: 0; ) .menu-main:before, .menu-main:after (treść: brak;) .menu-main a (display: block;) ) 5. Menu responsywne z logo w środku @import url("https://fonts.googleapis.com/css?family=Arimo"); .top-menu ( pozycja: względna; tło: rgba(34,34,34,.2); ) .menu-main ( styl listy: brak; margines: 0; dopełnienie: 0; ) .menu-main: after ( treść: ""; display: table; clear: oba; ) .left-item (float: left;) .right-item (float: prawo;).navbar-logo ( pozycja: bezwzględna; lewa: 50%; góra : 50%; transformacja: tłumaczenie (-50%, -50%); .menu-main a ( dekoracja tekstu: brak; wyświetlacz: blok; wysokość linii: 80 pikseli; dopełnienie: 0 20 pikseli; rozmiar czcionki: 18 pikseli; odstępy między literami: 2px; rodzina czcionek: „Arimo”, bezszeryfowa; kolor: biały; przejście: .3s liniowe; 0,0,.3);) @media (maks. szerokość: 830 pikseli) ( .menu- main ( góra dopełnienia: 90 pikseli; wyrównanie tekstu: środek; ) .navbar-logo ( pozycja: bezwzględna; lewa: 50% ; góra: 10 pikseli; transformacja: tłumaczX(-50%) ) .menu-main li ( float: brak; wyświetlacz: blok inline; ) .menu-main a ( wysokość linii: normalna; dopełnienie: 20px 15px; rozmiar czcionki: 16px; ) ) @media (maks. szerokość: 630px) ( .menu-main li ( wyświetlacz: blok;) ) 6. Responsywne menu z logo po lewej stronie @import url("https://fonts.googleapis.com/css?family=Arimo"); .top-menu ( tło: rgba(255,255,255,.5); box-shadow: 3px 0 7px rgba(0,0,0,.3); dopełnienie: 20px; ) .top-menu:after ( treść: "" ; wyświetlanie: tabela; wyczyść: oba; ) .navbar-logo (wyświetlanie: blok inline;) .menu-main ( styl listy: brak; margines: 0; dopełnienie: 0; float: prawo; ) .menu-main li (wyświetlacz: blok inline;).menu-main a (dekoracja tekstu: brak; wyświetlacz: blok; pozycja: względna; wysokość linii: 61 pikseli; lewe dopełnienie: 20 pikseli; rozmiar czcionki: 18 pikseli; odstępy między literami : 2 piksele; rodzina czcionek: „Arimo”, bezszeryfowa; kolor: #F73E24; przejście: .3s liniowe; .menu-main a:before (treść: „”; szerokość: 9 pikseli; wysokość: 9 pikseli; pozycja: bezwzględna po lewej: 50%; transformacja (45 stopni) tłumaczX (6,5 piksela); przejście: 0,3 s liniowe (krycie: 1;) @media (maksymalna szerokość: 660 pikseli) ( .menu-main ( float: brak; dopełnienie: 20px; ) .top-menu ( wyrównanie tekstu: do środka; dopełnienie: 20px 0 0 0; ) .menu-main a (dopełnienie: 0 10px;) .menu-main a:przed (transformacja: obrót (45 stopni) tłumaczX( -6px);) ) @media (max-width: 600px) ( .menu-main li (display: block;) )