Rozciągnij menu do pełnej szerokości CSS. Jak zrobić elastyczne responsywne menu w css? Znaczniki HTML i podstawowe style menu poziomego
Dość powszechny układ menu witryny, gdy kontener z nim zajmuje całą szerokość dostępną na stronie. W tym przypadku pierwszy element przylega do lewej krawędzi, a ostatni do prawej, a odległość między wszystkimi elementami jest równa. Dzisiaj powiemy Ci, jak to się robi.
Oferujemy przykład, jak zaimplementować płynne menu za pomocą CSS dla Twojego zasobu. W tym menu pozycje będą znajdować się w jednej linii. Javascript nie będzie używany. Zawartość menu zostanie umieszczona na regularnej liście. Główną cechą takiego menu jest jego wszechstronność, która wyraża się w tym, że zarówno ilość, jak i długość elementów może być dowolna.
Jak to zrealizować?
Każdy programista może zaproponować własny sposób rozwiązania problemu. Wszystko zależy od jego wyobraźni, poziomu profesjonalizmu i umiejętności. Najczęstszym rozwiązaniem tego problemu jest użycie stołu. Ponadto wielu sugeruje użycie javascript. Ci, którzy sugerowaliby użycie właściwości display z wartością stół lub komórka stołowa- Spieszę się zdenerwować. Ta metoda nie jest wystarczająco kompatybilna z różnymi przeglądarkami.
Nasze rozwiązanie
Nasza propozycja zostanie zbudowana na solidnych podstawach wiedzy o HTML5 i CSS3.
Rdzeń procesu opiera się na właściwości text-align z wartością uzasadnienia. Dla tych, którzy zapomnieli - przypominam: ta właściwość orientuje wyrównanie tekstu na całej szerokości pojemnika.
Podczas korzystania z naszego rozwiązania obowiązują dwie podstawowe zasady. Po pierwsze, szerokość kontenera pozycji menu musi być mniejsza niż tekst. To znaczy nie w jednej linii. Drugą ważną zasadą jest to, że słowa są rozciągnięte równo, niezależnie od tego, czy należą do tego samego punktu, czy nie.
Poniżej znajduje się kod, który służy jako przykład tworzenia „gumowego” menu:
HTML
< ul> < li>< a href= "#" >główny a> li> < li>< a href= "#" >Blog a> li> < li>< a href= "#" >Aktualności a> li> < li>< a href= "#" >Popularny a> li> < li>< a href= "#" >Nowe przedmioty a> li> ul>
ul (text-align: justify; overflow: hidden; /* usuwa skutki uboczne metody */ wysokość: 20px; /* usuwa niepotrzebne zbyt * / kursor: domyślny; / * ustawia oryginalny kształt kursora * / margines: 50px 100px 0 100px; tło: #ee; wypełnienie: 5px; ) li (wyświetlacz: wbudowany; / * tworzy tekst z pozycji menu * /) li a (wyświetlacz: inline-block; / * napraw łamanie wyrazów w menu * / kolor: # 444; ) a: hover (kolor: # ff0000;) ul: po ( /* utworzenie drugiej linii do opracowania metody */ treść: „1”; margines lewy: 100%; wysokość: 1px; przelew: ukryty; wyświetlacz: wbudowany blok; )
Aby pracować w starym dobrym Internet Explowerze, musisz dodać następujący kod do CSS
ul (indeks z: wyrażenie (runtimeStyle. zIndex = 1, insertAdjacentHTML ("beforeEnd & apos,"< li class = "last" > li> "));) ul .last (margin-lewy: 100%;) * html ul (/ * wystarczy ie6 * / wysokość: 30px;)
Po zarejestrowaniu niezbędnych wartości właściwości i kodu otrzymujemy następujące gumowe menu:
Wady metody
- Kod zbiorczy
- Niemożność określenia aktywnego stanu elementu za pomocą selektora klasy. Wynika to z łamania słów w akapitach (jeśli takowe jest). Rozwiązaniem tego problemu jest dodanie kolejnego kontenera wewnątrz elementów listy.
- W przypadku menu rozwijanego musisz dostosować kod ze względu na negatywny wpływ przepełnienia.
W jakich przeglądarkach to działa?
6.0+ | 6.0+ | 10.5+ | 5.0+ | 3.6+ | - | - |
Menu poziome to lista sekcji witryny, więc bardziej logiczne jest oznaczenie jej wewnątrz elementu the
- a następnie zastosować style CSS do jego elementów. Taki układ menu jest najczęstszy ze względu na oczywiste zalety jego pozycjonowania na stronie internetowej.
- Pozycja w menu
- Pozycja w menu
- Pozycja w menu ...
Jak zrobić menu poziome: znaczniki i przykłady projektów
Znaczniki HTML i podstawowe style menu poziomego
Domyślnie wszystkie pozycje listy są pozycjonowane pionowo, zajmując całą szerokość elementu kontenera na szerokość, który z kolei zajmuje całą szerokość jego bloku kontenera.
Znaczniki HTML do nawigacji poziomej
Poziome menu wewnątrz tagu można opcjonalnie umieścić wewnątrz elementu i / lub
Istnieje kilka sposobów ich umieszczenia. poziomo... Najpierw musisz zresetować domyślne style przeglądarki dla elementów nawigacji:
Ul (list-style: none; / * usuń znaczniki listy * / margin: 0; / * usuń górny i dolny margines równy 1em * / padding-left: 0; / * usuń lewy margines równy 40px * /) a ( text-decoration: brak; / * usuń podkreślenie tekstu linku * /)
Metoda 1.li (wyświetlanie: inline;)
Pozycje listy zapisujemy małymi literami. W efekcie są one ustawione poziomo, po prawej stronie między nimi dodawana jest przerwa równa 0,4em (obliczona względem rozmiaru czcionki). Aby go usunąć, dodaj ujemny li prawy margines dla li (margin-right: -4px;). Następnie dostosujemy styl linków według własnego uznania.
Metoda 2.li (zmiennoprzecinkowa: lewa;)
Pływające elementy listy. W rezultacie są ustawione poziomo. Wysokość bloku kontenerowego ul wynosi zero. Aby rozwiązać ten problem, dodajemy (overflow: hidden;) do ul, rozszerzając go i tym samym pozwalając, by zawierał elementy pływające. Dla linków dodaj a (display: block;) i dostosuj je jak chcesz.
Metoda 3.li (wyświetlacz: inline-block;)
Wykonujemy elementy listy inline-block. Znajdują się poziomo, po prawej stronie powstaje szczelina, tak jak w pierwszym przypadku. Dla linków dodaj a (display: block;) i dostosuj je jak chcesz.
Metoda 4.ul (wyświetlacz: flex;)
Wykonanie z ul elastycznego pojemnika za pomocą modelu. W rezultacie elementy listy są ułożone poziomo. Dodaj (wyświetlaj: blok;) dla linków i stylizuj je tak, jak chcesz.
1. Responsywne menu z efektem podkreślenia po najechaniu na link
@import URL („https://fonts.googleapis.com/css?family=Ubuntu+Condensed”); .menu-main (list-style: brak; margines: 40px 0 5px; padding: 25px 0 5px; text-align: center; background: white;) .menu-main li (display: inline-block;) .menu- main li: after (treść: "|"; kolor: # 606060; display: inline-block; vertical-align: top;) .menu-main li: last-child: after (content: none;) .menu-main a (dekoracja tekstu: brak; rodzina czcionek: "Ubuntu Condensed", sans-serif; odstępy między literami: 2px; pozycja: względna; padding-bottom: 20px; margines: 0 34px 0 30px; rozmiar czcionki: 17px; transformacja tekstu: wielkie litery; wyświetlanie: blok liniowy; przejście: kolor .2s;) .menu-główne a, .menu-główne a: odwiedzone (kolor: # 9d999d;) .menu-główne a.bieżące, .menu- main a: hover (kolor: # feb386;) .menu-main a: przed, .menu-main a: po (treść: ""; pozycja: bezwzględna; wysokość: 4px; góra: auto; prawo: 50%; dół : -5px; lewy: 50%; tło: # feb386; przejście: .8s;) .menu-main a: hover: przed, .menu-main .current: przed (po lewej: 0;) .menu-main a: hover: after, .menu-main .current: after (po prawej: 0; ) @media (max-width: 550px) (.menu-main (padding-top: 0;) .menu-main li (wyświetlacz: blok;) .menu-main li: after (content: none;) .menu- główna a (dopełnienie: 25px 0 20px; margines: 0 30px; ))2. Responsywne menu dla strony weselnej
@import URL („https://fonts.googleapis.com/css?family=PT+Sans”); .top-menu (pozycja: względna; tło: #fff; box-shadow: wstawka 0 0 10px #ccc;) .top-menu: przed, .top-menu: po (treść: ""; wyświetlacz: blok; wysokość : 1px; border-top: 3px solid # 575350; border-bottom: 1px solid # 575350; margin-bottom: 2px;) .top-menu: after (border-bottom: 3px solid # 575350; border-top: 1px solid # 575350; box-shadow: 0 2px 7px #ccc; margin-top: 2px;) .menu-main (list-style: brak; padding: 0 30px; margin: 0; font-size: 18px; text-align: center; position: relatywne;) .menu-main: before, .menu-main: after (treść: "\ 25C8"; line-height: 1; pozycja: bezwzględna; top: 50%; transform: translateY (-50% );) .menu-main: przed (po lewej: 15px;) .menu-main: po (po prawej: 15px;) .menu-main li (wyświetlanie: inline-block; padding: 5px 0;) .menu-main a (dekoracja tekstu: brak; display: inline-block; margines: 2px 5px; padding: 6px 15px; rodzina czcionek: "PT Sans", sans-serif; rozmiar czcionki: 16px; kolor: # 777777; border-bottom : 1px stały przezroczysty; n: .3s liniowy; ) .menu-main .current, .menu-main a: hover (border-radius: 3px; background: # f3ece1; color: # 313131; text-shadow: 0 1px 0 #fff; border-color: # c6c6c6;) @media (max-width: 500px) (.menu-main li (wyświetlanie: blok;))3. Adaptacyjne menu z przegrzebkami
@import URL („https://fonts.googleapis.com/css?family=PT+Sans+Caption”); .menu-main (list-style: brak; padding: 0 30px; margin: 0; font-size: 18px; text-align: center; position: relatywne; background: white;) .menu-main: after (treść: ""; pozycja: bezwzględna; szerokość: 100%; wysokość: 20px; lewa: 0; dół: -20px; tło: gradient promieniowy (biały 0%, biały 70%, rgba (255,255,255,0) 70%, rgba ( 255,255,255,0) 100%) 0 -10px;background-size: 20px 20px;background-repeat: repeat-x;) .menu-main li (display: inline-block;) .menu-main a (tekst-dekoracja: none; display: inline-block; margines: 0 15px; padding: 10px 30px; rodzina czcionek: "PT Sans Caption", sans-serif; kolor: # 777777; przejście: .3s linear; pozycja: względna;) .menu -main a: przed, .menu-main a: po (treść: ""; pozycja: bezwzględna; góra: calc (50% - 3px); szerokość: 6px; wysokość: 6px; obramowanie-promień: 50%; tło: # F58262; krycie: 0; przejście: .5s złagodzenie;) .menu-main a: przed (po lewej: 5px;) .menu-main a: po (po prawej: 5px;) .menu-main a. aktualny: przed, .menu-main a.cur wynajem: po, .menu-main a: najechanie: przed, .menu-main a: najechanie: po (przezroczystość: 1;) .menu-main a.current, .menu-main a: najechanie (kolor: # F58262; ) @media (max-width: 680px) (.menu-main li (wyświetlanie: blok;))4. Responsywne 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 ; z-index: 2; lewy: 0; szerokość: 100%; wysokość: 3px;) .top-menu: przed (góra: 0; obramowanie-dół: 1px kreskowana rgba (255,255,255, .2);) .top- menu: after (dół: 0; border-top: 1px dashed rgba (255,255,255, .2);) .menu-main (styl listy: brak; dopełnienie: 0; margines: 0; wyrównanie tekstu: środek;). menu-main: przed, .menu-main: after (treść: ""; pozycja: bezwzględna; szerokość: 50px; wysokość: 0; góra: 8px; border-top: 18px solid # 5A394E; border-bottom: 18px solid # 5A394E; przekształcenie: obrót (360 stopni); indeks z: -1;) .menu-main: przed (po lewej: -30px; obramowanie po lewej: 12px solid rgba (255, 255, 255, 0);) .menu- main: after (po prawej: -30px; obramowanie po prawej: 12px stałe rgba (2 55, 255, 255, 0); ) .menu-main li (display: inline-block; margin-right: -4px;) .menu-main a (text-decoration: none; display: inline-block; padding: 15px 30px; font-family: "PT Sans Caption ", sans-serif; kolor: biały; przejście: .3s linear;) .menu-main a.current, .menu-main a: hover (tło: rgba (0,0,0, .2);) @media (max-width: 680px) (.top-menu (margin: 0;) .menu-main li (wyświetlanie: blok; margines-prawy: 0;) .menu-main: przed, .menu-main: po (treść: brak;) .menu-main a (wyświetlanie: blok;))5. Responsywne menu z logo pośrodku
@import URL („https://fonts.googleapis.com/css?family=Arimo”); .top-menu (pozycja: względne; tło: rgba (34,34,34, .2);) .menu-main (styl listy: brak; margines: 0; dopełnienie: 0;) .menu-main: po (treść: ""; display: table; clear: obie;) .left-item (float: left;) .right-item (float: right;) .navbar-logo (position: absolute; left: 50%; top : 50%; transform: translate (-50%, - 50%);) .menu-main a (dekoracja tekstu: brak; display: block; line-height: 80px; padding: 0 20px; font-size: 18px ; odstępy między literami: 2px; rodzina czcionek: "Arimo", sans-serif; grubość czcionki: pogrubiona; kolor: biały; przejście: .3s linear;) .menu-main a: hover (tło: rgba (0, 0,0, .3);) @media (max-width: 830px) (.menu-main (padding-top: 90px; text-align: center;) .navbar-logo (pozycja: bezwzględna; lewa: 50% ; top: 10px; transform: translateX (-50%);) .menu-main li (float: brak; display: inline-block;) .menu-main a (line-height: normal; padding: 20px 15px; font -size: 16px;)) @media (max-width: 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); padding: 20px;) .top-menu: after (treść: "" ; display: table; clear: oba;) .navbar-logo (display: inline-block;) .menu-main (list-style: none; margin: 0; padding: 0; float: right;) .menu-main li (wyświetlacz: inline-block;) .menu-main a (dekoracja tekstu: brak; wyświetlacz: blok; pozycja: względna; wysokość linii: 61px; padding-left: 20px; rozmiar czcionki: 18px; odstępy między literami : 2px; rodzina czcionek: "Arimo", sans-serif; grubość czcionki: pogrubiona; kolor: # F73E24; przejście: .3s linear;) .menu-main a: before (treść: ""; szerokość: 9px; wysokość: 9px; tło: # F73E24; pozycja: bezwzględna; po lewej: 50%; przekształcenie: obrót (45deg) translateX (6,5px); krycie: 0; przejście: .3s linear;) .menu-main a: hover: before (krycie: 1;) @media (max-width: 660px) (.menu-main (float: brak; padding-top: 20px;) .top-menu (text-align: center; padding: 20px 0 0 0; ) .menu-main a (dopełnienie: 0 10px;) .menu-main a: be fore (transform: rotate (45deg) translateX (-6px);)) @media (max-width: 600px) (.menu-main li (wyświetlanie: blok;))Kontynuujemy serię z samouczkiem na temat rozwijanych menu. Następnym krokiem jest poziome rozwijane menu w css własnymi rękami.
Jeśli trafiłeś tu przypadkiem lub szukałeś innej implementacji rozwijanego menu, radzę przejść do sekcji nadrzędnej.
Ta sekcja opisuje poziome menu rozwijane w CSS i HTML.
Nawigacja po stronie:
Więc, nasze zadanie:
utwórz poziome menu z rozwijanym css (na listach ul li) bez użycia jQuery i Javascript, a także bez użycia tabel