Poradnik programisty front-endu: rodzaje poziomych paneli nawigacyjnych. Menu wyśrodkowane poziomo przy użyciu wyłącznie CSS. Co to jest układ menu

Wyśrodkowanie poziomego menu może być trudne, szczególnie dla osób, które dopiero zaczynają przygodę z CSS. Poszukiwanie rozwiązań prowadzi do bardzo ograniczonej listy metod, z których większość opiera się na trikach CSS, JavaScript lub zastosowaniu niestandardowych reguł, które nie są obsługiwane przez wszystkie przeglądarki. W tym samouczku omówimy metodę centrowania poziomego menu, która wykorzystuje tylko standardowe reguły CSS i działa we wszystkich przeglądarkach.

Przykład menu wyśrodkowanego

Poniżej znajduje się poziome menu wyśrodkowane w tej kolumnie, w którym aktywowana jest druga zakładka. Możesz spróbować zmienić rozmiar okna przeglądarki lub strony, aby mieć pewność, że menu będzie zawsze wyśrodkowane i funkcjonalne.

Na stronie demonstracyjnej możesz zobaczyć kilka opcji projektowania menu wyśrodkowanego poziomo. Każdy z nich możesz wykorzystać w swoich projektach.

znaczniki HTML

Wszystkie menu pokazane w tym samouczku mają prostą strukturę. Jest to zwykła nieuporządkowana lista linków umieszczonych w elemencie div.

  • Pierwsza zakładka
  • Druga zakładka
  • Trzecia zakładka
  • Czwarta zakładka

Wyśrodkowany kod CSS menu

Poniżej znajduje się pełny kod CSS użyty do wyśrodkowania menu. Wyjaśnienie zasady działania podane jest w dalszej części lekcji.

#centeredmenu ( float:lewy; szerokość:100%; tło:#fff; border-bottom:4px solid #000; przepełnienie:ukryty; pozycja:względna; ) #centeredmenu ul ( Clear:lewy; float:lewy; styl listy :brak; margines:0; dopełnienie:0; pozycja:względna; lewo:50%; wyrównanie tekstu:środek; ) #centeredmenu ul li ( display:block; float:left; styl listy:brak; margines:0; dopełnienie: 0; pozycja: względna; prawa: 50%; ) #centeredmenu ul li a ( display:block; margines: 0 0 0 1px; dopełnienie: 3px 10px; tło:#ddd; kolor:#000; dekoracja tekstu: brak; line-height:1.3em; ) #centeredmenu ul li a:hover ( tło:#369; kolor:#fff; ) #centeredmenu ul li a.active, #centeredmenu ul li a.active:hover ( color:# fff; tło: #000; waga czcionki: pogrubiona; )

Jak działa metoda centrowania?

Działanie metody opiera się na względnym pozycjonowaniu pływających elementów blokowych jeden w drugim. Najpierw przyjrzyjmy się, jak zmienia się rozmiar elementów wraz z przemieszczeniem.

Element div(blok) bez przemieszczenia jest rozciągany na całą dostępną mu szerokość.

Ale jeśli przesuniemy element div w lewo, automatycznie zmniejszy się on, aby dopasować się do zawartości. Kompresja jest kluczem do wdrożenia tej metody centrowania menu. Pomaga przenieść menu do właściwej pozycji.

Standardowe menu wyrównane do lewej

Weźmy standardowe menu wyrównane do lewej strony i przeróbmy je krok po kroku. Dla przejrzystości elementy są pokolorowane na różne kolory, dzięki czemu od razu wiadomo, co gdzie trafia.

Proszę zwrócić uwagę na następujące punkty:

  • Element wyśrodkowanymenu div(niebieski prostokąt) jest przesunięty w lewo, ale ma szerokość 100%, więc pozostaje rozciągnięty na całej stronie.
  • Element ul(różowy prostokąt) znajduje się wewnątrz elementu menu wyśrodkowane div i przesuwa się w lewo. Oznacza to, że zostanie skompresowany do szerokości swojej zawartości, czyli do całkowitej szerokości wszystkich zakładek.
  • Wszystkie elementy li (zielone prostokąty) znajdują się wewnątrz elementu ul i przesuń się w lewo. W ten sposób są one skompresowane do rozmiaru znajdujących się w nich ogniw i ułożone w jedną poziomą linię.
  • Wewnątrz każdego łącza (pomarańczowe prostokąty) wyświetlany jest tekst zakładki: Zakładka 1, Zakładka 2 i tak dalej.
Zmiana pozycji listy nieuporządkowanej


Następnie odsuwamy element ul w prawo o 50%, używając pozycji:relative; . Kiedy element jest przesunięty procentowo w tych warunkach, należy pamiętać, że całkowita szerokość elementów w nim zawartych nie jest jego szerokością. W naszym przypadku przesunięcie następuje o połowę okna przeglądarki (czyli o przestrzeń dostępną do wyświetlenia), w efekcie nasze menu zaczyna się na środku okna i częściowo wychodzi poza jego granice. I przejdźmy do następnego kroku.

Zmień położenie wszystkich elementów menu


Pozostaje tylko przesunąć wszystkie elementy li pozostało 50%. Jest to 50% szerokości naszego elementu ul (kontenera zawierającego menu). W ten sposób zakładki są przesunięte dokładnie na środek okna.

Kilka ważnych uwag

Korzystając z tej metody centrowania, należy pamiętać o kilku ważnych kwestiach:

  • Od elementu ul częściowo wystaje poza okno, powoduje to wyświetlenie pasków przewijania. Dlatego musisz użyć reguły overflow:hidden;. dla elementu wyśrodkowanymenu div. Zatem wystająca część elementu div zostanie odcięty.
  • Od elementu ul nie jest wyrównany do zakładek, nie można zastosować dla niego żadnych stylów wizualnych. Pozostaw element ul bez koloru tła i bez obramowania, aby stał się całkowicie niewidoczny. A style zakładek powinny być używane tylko dla elementów li.
  • Jeśli chcesz ustawić specjalne style dla pierwszej i ostatniej zakładki, musisz dodać klasę dla pierwszego i ostatniego elementu li, dzięki czemu możesz nadać im indywidualny styl.
Wniosek

Proponowane rozwiązanie jest kompatybilne ze wszystkimi przeglądarkami, nie wykorzystuje JavaScript i obsługuje możliwość zmiany rozmiaru tekstu.

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:

utwórz poziome menu z rozwijaną listą css (na listach ul li) bez użycia jQuery i JavaScript, a także bez użycia tabel

w kodzie.

Rozwijane menu poziome HTML

Przede wszystkim zanim zaczniemy pisać kod, musimy stworzyć szablon HTML dla menu.

Ze względu na to, że tworzymy menu uniwersalne, chcę je maksymalnie upodobnić do wyjścia menu WordPress. Moim zdaniem jest to jeden z najprostszych i najbardziej uniwersalnych kodów menu HTML. To wygląda tak:

  • dom
  • O nas
  • Nasze Usługi
    • Nasz serwis nr 1
    • Nasz serwis nr 2
    • Nasz serwis nr 3
    • Nasz serwis nr 4
    • Usługa 5
  • Aktualności
  • Łączność

Jak widać z kodu, nasze menu rozwijane zostanie zaimplementowane na listach ul i li. Tak wygląda menu bez stylów CSS:

Spójrzmy prawdzie w oczy, wygląda brzydko, jak zwykła lista. Następnie musimy udekorować to menu za pomocą stylów CSS.

Poziome menu rozwijane w CSS

Style CSS dla menu rozwijanych i nie tylko są niezbędne jak powietrze. Przecież zakładka rozwijana jest tworzona w oparciu o pseudoklasę:hover.

W przypadku poziomego menu rozwijanego potrzebujemy następujących stylów:

#menu1( pozycja: względna; wyświetlacz: blok; szerokość: 100%; wysokość: auto; z-index: 10; ) #menu1 ul( pozycja: względna; wyświetlacz: blok; margines: 0 pikseli; dopełnienie: 0 pikseli; szerokość: 100 %; wysokość: auto; styl listy: brak; tło: #F3A601; ) #menu1 > ul:: after( display:block; szerokość: 100%; wysokość: 0px; clear:obie; treść:" "; ) # menu1 ul li( pozycja: względna; wyświetlacz: blok; pływak: lewo; szerokość: auto; wysokość: auto; ) #menu1 ul li a ( wyświetlacz: blok; dopełnienie: 9px 25px 0px 25px; rozmiar czcionki: 14px; czcionka- rodzina: Arial, bezszeryfowa; kolor: #ffffef; wysokość linii: 1,3 em; dekoracja tekstu: brak; waga czcionki: pogrubiona; transformacja tekstu: wielkie litery; wysokość: 36 pikseli; rozmiar pudełka: obramowanie; ) #menu1 ul li > a:hover, #menu1 ul li:hover > a( tło:#EBBD5B; kolor:#2B45E0; )

To jeszcze nie koniec, to tylko część CSS dla głównego menu poziomego. Następnie napiszemy style dla listy rozwijanej menu:

#menu1 ul li ul(pozycja:absolutna; góra:36px; lewa:0px; wyświetlacz:brak; szerokość:200px; tło:#EBBD5B; ) #menu1 ul li:hover ul(display:block;)/*ta linia implementuje mechanizm opuszczania*/ #menu1 ul li ul li( float:brak; szerokość:100%; ) #menu1 ul li ul li a(display:block;text-transform:brak; wysokość:auto; padding:7px 25px; szerokość: 100%; rozmiar pudełka:border-box; border-top:1px solid #ffffff; ) #menu1 ul li ul li:pierwsze-dziecko a(border-top:0px;) #menu1 ul li ul li a: najedź(tło:#FDDC96; kolor:#6572BC; )

To tyle. Sam mechanizm drop-out jest realizowany w jednej linii.

Zobacz skórkę z tym menu:

Ryż. 2 (poziome menu rozwijane)

Poniżej znajduje się demonstracja działania menu rozwijanego, a także link do pobrania źródeł. (Demo zostanie otwarte z menu rozwijanego u góry tej strony, nie trzeba klikać Otwórz w nowym oknie 🙂 ani kółkiem myszy)

Poziome menu rozwijane o pełnej szerokości

Większość z Was może mi zarzucić, że takie menu, jakie pokazałem powyżej, to przywitanie z przeszłością i po części ma rację, chociaż widziałem ostatnio układy z takimi menu.

Mam nadzieję, że pobrałeś powyższy przykład. Nasz HTML pozostaje taki sam, ale całkowicie zmienimy CSS. Możesz po prostu pobrać stąd kod CSS i wkleić go do pobranego przykładu lub obejrzeć w trybie demonstracyjnym, jak to działa.

#container( szerokość: 1000 pikseli; wysokość: auto; margines: 0 pikseli auto; dopełnienie-top: 10 pikseli; ) #menu1 ( pozycja: względna; wyświetlacz: blok; szerokość: 100%; wysokość: auto; z-index: 10; ) #menu1 ul( pozycja: względna; wyświetlacz: blok; margines: 0 pikseli; dopełnienie: 0 pikseli; szerokość: 100%; wysokość: auto; styl listy: brak; tło: # F3A601; ) #menu1 > ul ( wyrównanie tekstu: justify; rozmiar czcionki:1px; wysokość linii:1px; ) #menu1 > ul::after( display:inline-block; szerokość:100%; wysokość:0px; treść:" "; ) #menu1 ul li(pozycja :relative; display:inline-block; szerokość:auto; wysokość:auto; Vertical-align:top; text-align:left; ) #menu1 ul li a( display:block; padding:9px 35px 0px 35px; Font-size :14px; rodzina czcionek: Arial, bezszeryfowa; kolor: #ffffef; wysokość linii: 1,3 em; dekoracja tekstu: brak; waga czcionki: pogrubiona; transformacja tekstu: wielkie litery; wysokość: 36 pikseli; rozmiar pudełka :border-box; ) #menu1 ul li > a:hover, #menu1 ul li:hover > a( tło:#EBBD5B; kolor:#2B45E0; ) #menu1 ul li ul( pozycja:absolutna; góra:36px; lewa :0px; Nie wyświetla się; szerokość:automatyczna; tło:#EBBD5B; białe znaki:nowrap; ) #menu1 ul li:last-child ul(/*ostatni element zostanie dołączony do prawej krawędzi*/ left:auto; Right:0px; ) #menu1 ul li:hover ul(display:block;)/*this linia implementuje mechanizm dropouts*/ #menu1 ul li ul li( display:block; szerokość:auto; ) #menu1 ul li ul li a( display:block; text-transform:none; height:auto; padding:7px 35px; szerokość:100% ; rozmiar pudełka:border-box; border-top:1px solid #ffffff; ) #menu1 ul li ul li:pierwsze-dziecko a(border-top:0px;) #menu1 ul li ul li a: najedź(tło: #FDDC96; kolor:#6572BC; )

Ten przykład różni się od pierwszego tym, że menu rozwijane, czyli samo menu rozwijane, rozciąga się w zależności od szerokości wszystkich pozycji menu.

W przypadku bardzo długich pozycji menu ta opcja może nie być zbyt wygodna, ponieważ wykraczają poza limity. Aby wyłączyć tę właściwość, po prostu znajdź właściwość „white-space:nowrap;” w selektorze #menu1 ul li ul i usuń go.

Poniżej możesz obejrzeć demo lub pobrać źródła poziomego menu rozwijanego:

Bez separatorów to menu wygląda tak sobie. Separatory można dodać do HTML ręcznie, ale jeśli masz CMS, taki jak WordPress, to ręczne dodanie ich nie jest zbyt wygodne.

Poziome menu rozwijane z przekładkami

Istnieje kilkadziesiąt opcji dodawania paska (separatora) pomiędzy pozycjami menu przy użyciu czystego CSS. Nie będę powielać opcji, które używają::before lub::after lub znacznie prostszych border-left, border-right.

Są sytuacje, gdy układ jest zbudowany tak wspaniale, że nie da się obejść bez jquery.

Nasz kod HTML pozostaje taki sam, dodajemy jedynie bibliotekę jQuery i plik, który z niej korzysta:

Zaraz po .

Jak rozumiesz, musisz utworzyć plik menu skryptu-3.js i dodaj tam ten mały kod:

$(dokument).ready(function())( $("#menu1 > ul > li:not(:last-child)").after(" "); ));

Style CSS dla takiego menu należy pozostawić bez zmian, + dodać na końcu ten fragment:

#menu1 ul li.razd(wysokość:28px; szerokość:1px; tło:#ffffff; górny margines:4px; )

Poziome menu rozwijane z ogranicznikami w jQuery będzie wyglądać następująco:

Możesz obejrzeć w trybie demonstracyjnym lub pobrać szablon menu poziomego poniżej:

Zalety tego rozwiązania to:

  • menu będzie rysowane dynamicznie;
  • wcięcia od separatora do akapitu są wszędzie takie same;
  • piękniejszy i bardziej elastyczny projekt.
Poziome, wielopoziomowe menu rozwijane CSS+HTML

Skoro mowa o wielopoziomowych rozwijanych menu po najechaniu myszką, to chyba warto podzielić je na podgrupy:

  • z podkładką vip, gdy wskazujesz na bok
  • z wyskakującym menu rozwijanym trzeciego poziomu
  • W moich przykładach pokażę wielopoziomowe menu CSS z 3 poziomami, wtedy myślę, że nie będzie trudno zgadnąć, co należy zrobić.

    Wielopoziomowe menu rozwijane z paskiem bocznym po najechaniu myszką

    Na początek musimy nieco poprawić nasz kod HTML. Zostanie tam dodanych kilka linii dla poziomu 3:

    • dom
    • O nas
    • Nasze Usługi
      • Nasz serwis nr 1
        • Dodatek do usługi 1
        • Dodatek do usługi 2
      • Nasz serwis nr 2
        • Dodatek do usługi 3
        • Dodatek do usługi 4
      • Nasz serwis nr 3
      • Nasz serwis nr 4
      • Usługa 5
    • Aktualności
    • Łączność
      • Mapa drogowa
        • Dodatek do mapy
        • Dodatek do mapy 2
      • Formularz zwrotny

    #container( szerokość: 1000 pikseli; wysokość: auto; margines: 0 pikseli auto; dopełnienie-top: 10 pikseli; ) #menu1 ( pozycja: względna; wyświetlacz: blok; szerokość: 100%; wysokość: auto; z-index: 10; ) #menu1 ul( pozycja: względna; wyświetlacz: blok; margines: 0 pikseli; dopełnienie: 0 pikseli; szerokość: 100%; wysokość: auto; styl listy: brak; tło: # F3A601; ) #menu1 > ul ( wyrównanie tekstu: justify; rozmiar czcionki:1px; wysokość linii:1px; ) #menu1 > ul::after( display:inline-block; szerokość:100%; wysokość:0px; treść:" "; ) #menu1 ul li(pozycja :relative; display:inline-block; szerokość:auto; wysokość:auto; wyrównanie do pionu:góra; wyrównanie tekstu:do lewej; ) #menu1 ul li.razd( wysokość:28px; szerokość:1px; tło:#ffffff; margines-top:4px; ) #menu1 ul li a(display:block; padding:9px 45px 0px 45px; rozmiar czcionki:14px; rodzina czcionek:Arial, bezszeryfowa; kolor:#ffffef; wysokość linii:1,3 em; dekoracja tekstu: brak; waga czcionki: pogrubiona; transformacja tekstu: wielkie litery; wysokość: 36 pikseli; box-sizing: border-box; ) #menu1 ul li > a:hover, #menu1 ul li:hover > a (tło:#EBBD5B; kolor:#2B45E0; ) #menu1 ul li ul(pozycja:absolutna; góra:36px; lewa:0px; wyświetlacz:brak; szerokość:auto; tło:#EBBD5B; biała spacja:nowrap; ) #menu1 > ul > li:last-child > ul(/*ostatni element zostanie dołączony do prawej krawędzi*/ left:auto; Right:0px; ) #menu1 ul li:hover > ul(display:block;)/*ta linia implementuje mechanizm drop-out* / #menu1 ul li ul li(wyświetlanie:blok; szerokość:auto; ) #menu1 ul li ul li a(wyświetlanie:blok; transformacja tekstu:brak; wysokość:auto; dopełnienie:7px 45px; szerokość:100%; pudełko -sizing:border-box ; border-top:1px solid #ffffff; ) #menu1 ul li ul li:first-child > a(border-top:0px;) #menu1 ul li ul li a:hover, #menu1 ul li ul li:hover > a( tło:#FDDC96; kolor:#6572BC; ) #menu1 ul li ul li ul( góra:0px; lewa:100%; wyświetlacz:brak; tło:#fddc96; ) #menu1 > ul > li:last-child > ul ul(lewy:auto; prawy:100%;) #menu1 ul li ul li ul a(color:#F38A01;)

    Kopiujemy pliki dla jQuery tak jak w poprzednim przykładzie. Postanowiłam zrezygnować z przegródek, aby menu wyglądało choć trochę lepiej. Oczywiście, że da się to zrobić bez nich.

    Oto jak to się stało:
    Zrobiłem 2 skórki w jednej, żeby pokazać jak wygląda kropla po prawej i pośrodku.

    Poniżej możesz obejrzeć demo i pobrać przykład:

    Wielopoziomowe menu rozwijane z wyskakującym panelem po najechaniu myszką

    W tytule jest trochę oleju, ale zadziała, najważniejsze jest kod.

    Istotą tego przykładu jest utworzenie poziomego menu rozwijanego o pełnej szerokości z menu rozwijanego o pełnej szerokości i wielu poziomów.

    Nie będę zmieniać kodu HTML, można go zaczerpnąć z poprzedniego przykładu. Separatory pozostawiamy również w jQuery.

    Tylko CSS zmieni się całkowicie:

    #container( szerokość: 1000 pikseli; wysokość: auto; margines: 0 pikseli auto; dopełnienie-top: 10 pikseli; ) #menu1 ( pozycja: względna; wyświetlacz: blok; szerokość: 100%; wysokość: auto; z-index: 10; ) #menu1 ul( pozycja: względna; wyświetlacz: blok; margines: 0 pikseli; dopełnienie: 0 pikseli; szerokość: 100%; wysokość: auto; styl listy: brak; tło: # F3A601; ) #menu1 > ul ( wyrównanie tekstu: justify; rozmiar czcionki:1px; wysokość linii:1px; ) #menu1 > ul::after( display:inline-block; szerokość:100%; wysokość:0px; treść:" "; ) #menu1 ul li(pozycja :relative; display:inline-block; szerokość:auto; wysokość:auto; wyrównanie do pionu: góra; wyrównanie tekstu: do lewej; ) #menu1 > ul > li(pozycja:statyczny;) #menu1 ul li.razd(wysokość :28px; szerokość:1px; tło:#ffffff; margines-top:4px; ) #menu1 ul li a(display:block; padding:9px 45px 0px 45px; rozmiar czcionki:14px; rodzina czcionek:Arial, sans- serif; kolor: #ffffef; wysokość linii: 1,3 em; dekoracja tekstu: brak; waga czcionki: pogrubiona; transformacja tekstu: wielkie litery; wysokość: 36 pikseli; rozmiar pudełka: obramowanie; ) #menu1 ul li > a:hover, #menu1 ul li:hover > a(tło:#EBBD5B; kolor:#2B45E0; ) #menu1 ul li ul( pozycja:absolutna; góra:36px; lewa:0px; wyświetlacz:brak; szerokość:100%; tło:#EBBD5B; ) #menu1 > ul > li > ul::po( clear:both; float:none; szerokość:100%; wysokość:0px; treść:" "; ) #menu1 ul li:hover > ul(display:block;)/*ta linia implementuje mechanizm drop-out*/ #menu1 ul li ul li(wyświetlanie:blok; szerokość:30%; pływak:lewy; ) #menu1 ul li ul li a(wyświetlanie:blok; transformacja tekstu:brak; wysokość:automatyczna; dopełnienie:7px 45px; szerokość:100%; pudełko- sizing:border -box; ) #menu1 ul li ul li:pierwsze-dziecko > a(border-top:0px;) #menu1 ul li ul li a:hover, #menu1 ul li ul li:hover > a(tło: #FDDC96; kolor: #6572BC; ) #menu1 ul li ul li ul( góra: 0px; lewa: 100%; wyświetlacz: brak; tło: #fddc96; z-index:15; ) #menu1 ul li ul li ul li (wyświetlanie: blok; pływak: brak; szerokość: 100%;) #menu1 ul li ul li ul a( kolor: #F38A01; górna granica: 1px solidna #ffffff; )

    Oto jak będzie wyglądać menu: Jedynym punktem jest to, że witryna musi mieć wystarczająco dużo miejsca, ponieważ ostatnia pozycja po prawej stronie nie ma miejsca na menu rozwijane. Ten problem można rozwiązać poprzez:nth-child, ale nie zawracałem sobie tym głowy.

    Zobacz demonstrację poziomego, wielopoziomowego menu rozwijanego:

    Jak zapewne zauważyłeś: dolna matryca ma również pełną szerokość. W ten sposób powstają krople w kilku blokach.

    To wszystko dla mnie, mam nadzieję, że przynajmniej jeden z moich przykładów Ci odpowiada. Dziękuję za uwagę.

    będzie to z pożytkiem zarówno dla nich, jak i dla mnie :)

    Jeśli przeczytałeś cały post, ale nie znalazłeś sposobu na utworzenie własnego poziomego menu rozwijanego w css, zadaj pytanie w komentarzach lub skorzystaj z wyszukiwarki w witrynie.

    Radzę również odwiedzić stronę nadrzędną https://site/vypadayushhee-menu/, tam znajdują się wszystkie przykłady i typy menu rozwijanych.

    Dzień dobry wszystkim, którzy teraz czytają tę publikację. Dzisiaj chcę opowiedzieć o jednym z narzędzi do tworzenia stron internetowych, bez którego nie obejdzie się żaden zasób sieciowy. To jest menu witryny lub, jak to się mówi, mapa witryny. Obecnie istnieje nieograniczona liczba typów i podtypów menu.

    Twórcy sklepów internetowych, blogów, usług edukacyjnych i innych zasobów eksperymentują i tworzą coraz więcej nowych i nietypowych map. Po przeczytaniu artykułu dowiesz się, na jakie główne grupy podzielone są wszystkie typy paneli nawigacyjnych, będziesz mógł wypróbować każdy z nich, a także dowiesz się, jak napisać kod menu dla witryny HTML. A teraz przejdźmy do rzeczy!

    Narzędzia do tworzenia paska nawigacyjnego

    Istnieje kilka sposobów tworzenia menu w języku znaczników. Ich podstawową koncepcją jest użycie listy nienumerowanej. Dlatego w znanym nam HTML 4 programiści piszą tagi na stronie

      I
    • .

      Jak stwierdzono w poprzednich publikacjach, element sparowany

        tworzy listę punktowaną i
      • - jeden element listy. Dla przejrzystości napiszmy kod prostego menu:

        Nawigacja

        Nawigacja witryny

        • dom
        • Wiadomości tygodnia
        • Postęp technologiczny
        • Czat

        Jednak wraz z pojawieniem się platformy język znaczników został uzupełniony o dodatkowe tagi. Dlatego menu nowoczesnych stron internetowych tworzone jest za pomocą specjalnego tagu< menu>. W użyciu element ten nie różni się od list punktowanych.

        Zamiast jednego< ul>jest przepisane< menu>. Jednakże znaczące różnice pojawiają się, gdy ocenia się je od strony pracy. Zatem drugi przykład przyspiesza pracę programów wyszukujących i robotów w . Analizując strukturę witryny, od razu rozumieją, że ten fragment kodu odpowiada za mapę witryny.

        Dostępne są menu poziome, pionowe i rozwijane. Czasami pasek nawigacyjny jest zaprojektowany jako obraz. Ponieważ segment technologii się rozwinął, usługi internetowe stają się adaptacyjne, tj. Struktura strony automatycznie dopasowuje się do wielkości ekranu urządzenia. Spójrzmy na wymienione grupy menu.

        Stwórzmy poziomy model nawigacji

        Ten rodzaj nawigacji jest najbardziej popularny. Gdy panel jest zaprojektowany poziomo, wszystkie pozycje menu znajdują się w nagłówku strony lub w „stopce” (czasami elementy nawigacyjne są zduplikowane, pojawiają się jednocześnie na górze i na dole).

        Jako przykład stworzymy poziomy panel, którego pozycje menu zostaną zaprojektowane przy użyciu CSS (kaskadowe arkusze stylów), a raczej przekształcone. Tak więc każdy pojedynczy element będzie umieszczony w ściętym prostokącie. Zaintrygowany?

        Do transformacji używamy właściwości CSS o nazwie transform. Do określenia transformacji wykorzystywana jest wbudowana funkcja skewX, która określa kąt skosu w stopniach.

        Niestety każda przeglądarka działa z tą właściwością na swój sposób, pomimo określonych standardów. Dlatego stworzono specjalne przedrostki, aby to wskazać:

        • -ms- (Internet Explorer)
        • -o- (Opera)
        • -webkit- (Chrome, Safari)
        • -moz- (Firefox)

        Teraz zastosujmy zdobytą wiedzę do napisania przykładu.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 Panel poziomy
  • dom
  • O firmie
  • Produkty
  • Łączność
  • Panel poziomy li (wyświetlanie: blok inline; prawy margines: 6 pikseli; tło: #FF8C00; transformacja: skewX(-45deg); -webkit-transform: skewX(-45deg); -o-transform: skewX(-45deg) ; -ms-transform: skewX(-45deg); -moz-transform: skewX(-45deg); ) a (wyświetlanie: blok; dopełnienie: 18px 35px; kolor: #fff; transformacja: skewX(40deg); -webkit- transformacja: skewX (40 stopni); -o-transform: skewX (40 stopni); -ms-transform: skewX (40 stopni); -moz-transform: skewX (40 stopni); ) li:hover ( tło: #1C1C1C; )

  • dom
  • O firmie
  • Produkty
  • Łączność
  • A teraz pionowo. Powiedziałem pionowo!

    W przypadku drugiego programu opieramy się na poprzednim kodzie. Chciałem, aby moje pionowe pozycje menu miały zaokrąglone rogi, a nie ścięte.

    Aby to zrobić, użyłem innej właściwości CSS border-radius.

    W poprzednich artykułach pracowałem już z tym parametrem, więc myślę, że nie będzie żadnych trudności w zrozumieniu jego funkcjonowania.

    Panel pionowy li (wyświetlanie: blok; margines: 13 pikseli; dopełnienie: 13 pikseli; tło: #FF8C00; szerokość: 20%; wyrównanie tekstu: środek; rozmiar czcionki: 20 pikseli; promień obramowania: 10 pikseli; ) a ( kolor: # fff; ) li:hover ( tło: #1C1C1C; )

  • dom
  • O firmie
  • Produkty
  • Łączność
  • Jak już zauważyłeś, główną zmianą w tym kodzie jest brak deklaracji display: inline-block, która tak naprawdę odpowiadała za poziome rozmieszczenie elementów nawigacyjnych.

    Podpozycje w menu: lista rozwijana

    Przyjrzeliśmy się głównym grupom paneli nawigacyjnych, ale istnieje kilka innych odmian, a jeszcze lepiej, dodatków.

    Czasami zdarzają się sytuacje, gdy niektóre punkty uzupełniają główne. W takim przypadku nie można obejść się bez list rozwijanych. Tworzone są poprzez transformacje przy użyciu narzędzi CSS.

    Poniżej załączam kod małego programu realizującego to podejście.

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 Treść listy rozwijanej ( dopełnienie po lewej: 30%; rozmiar czcionki: 18 pikseli; ) .m-menu ( margines: 0; dopełnienie: 9 pikseli; szerokość: 50%; wyrównanie tekstu: środek; obramowanie: 3 piksele stałe #000; tło : #FF8C00; ) .m-menu > li ( pozycja: względna; wyświetlacz: blok inline; ) .m-menu a ( wyświetlacz: blok; margines-lewy: -2px; dopełnienie: 13px; kolor: #fff; obramowanie -left: 3px solid #fff; ) .m-menu a:hover ( tło: #1C1C1C; ) .m-menu .s-menu ( po lewej: 10px; pozycja: bezwzględna; wyświetlacz: brak; szerokość: 155px; margines: 0; dopełnienie: 0; styl listy: brak; tło: #FF8C00; ) .m-menu .s-menu a ( obramowanie: 1px solid #000; ) .m-menu >

    Treść listy rozwijanej ( dopełnienie po lewej: 30%; rozmiar czcionki: 18 pikseli; ) .m-menu ( margines: 0; dopełnienie: 9 pikseli; szerokość: 50%; wyrównanie tekstu: środek; obramowanie: 3 piksele stałe #000; tło : #FF8C00; ) .m-menu > li ( pozycja: względna; wyświetlacz: blok inline; ) .m-menu a ( wyświetlacz: blok; margines-lewy: -2px; dopełnienie: 13px; kolor: #fff; obramowanie -left: 3px solid #fff; ) .m-menu a:hover ( tło: #1C1C1C; ) .m-menu .s-menu ( po lewej: 10px; pozycja: bezwzględna; wyświetlacz: brak; szerokość: 155px; margines: 0; dopełnienie: 0; styl listy: brak; tło: #FF8C00; ) .m-menu .s-menu a ( obramowanie: 1px solid #000; ) .m-menu > li:hover .s-menu ( wyświetlacz : blok; )

    Przede wszystkim zastanówmy się, do czego służy menu i do czego służy.

    Menu witryny to lista stron lub sekcji witryny, umieszczona w widocznym miejscu i przeznaczona do dostępu użytkownika do tych stron lub sekcji. Istnieją dwa rodzaje menu: główne i dodatkowe. Zazwyczaj menu główne zawiera linki do kluczowych sekcji witryny. Dodatkowe menu zazwyczaj zawierają linki do podsekcji lub konkretnych stron. Dodatkowo menu mogą mieć strukturę hierarchiczną 3 typów: lista rozwijana, lista rozwijana i lista rozwinięta (może mieć strukturę drzewiastą).

    Dowiedzieliśmy się więc, że menu jest listą jednopoziomową lub wielopoziomową. W związku z tym zrobimy to za pomocą elementu reprezentującego listę. W HTML takie elementy definiowane są za pomocą znaczników ul i ol, które oznaczają odpowiednio listy wypunktowane i numerowane. Każdy element listy jest zdefiniowany przez znacznik li.

    W naszym dokumencie internetowym w miejscu przeznaczonym na kod menu poziomego wpisz następujący kod HTML:


    • dom

    • Usługi i ceny

    • Gwarancje

    • Technologie

    • O firmie

    Ta lista będzie głównym menu naszej witryny. Nie jest konieczne tworzenie menu głównego w formie zakładek. Można nawet skorzystać z wielopoziomowego menu rozwijanego, rozwijanego lub czegoś innego, ale projektując menu, należy zwrócić uwagę na łatwość nawigacji. Z reguły im mniej zagnieżdżenia dowolnego menu, tym jest ono wygodniejsze. Dlatego menu z więcej niż jednym poziomem zagnieżdżenia nie jest najlepszym wyborem. W takim przypadku lepiej rozważyć możliwość wprowadzenia dodatkowego menu lub innego sposobu nawigacji.

    Pierwszy element menu głównego posiada atrybut klasa ze znaczeniem wybrany, więc korzystając z reguły CSS określonej przez selektor o nazwie tej klasy, możemy konkretnie podświetlić zakładkę menu zdefiniowaną przez ten element. W tym przykładzie nie będziemy w żaden sposób podświetlać wybranego elementu. Jest to jednak sposób na tworzenie menu, które posiadają aktualnie wybraną zakładkę. Ponadto wszystkie linki tutaj prowadzą do bieżącej strony. W prawdziwym menu nie powinno być żadnych linków prowadzących do Ciebie, z wyjątkiem być może linku do strony głównej. Ponadto wszystkie linki są zawarte w tagu Zakres, będziemy go potrzebować do wyśrodkowania tekstu w pionie.

    Listy w HTML są elementami blokowymi. Jeśli teraz otworzysz naszą stronę w swojej przeglądarce, zobaczysz, że linki w naszym menu są umieszczone jeden pod drugim. Dlatego wraz z projektem każdego elementu definiującego zakładkę musimy określić styl jej wyświetlania.

    Dodajmy następujące reguły do ​​pliku stylu:

    #hmenu (
    margines po lewej stronie: 160px; /* służy do wyrównania menu tak, aby zaczynało się nad obszarem zawartości */
    }

    /* zaprojektuj zakładkę */
    #hmenu li (
    /* ustaw czcionkę */
    rodzina czcionek: Calibri;
    rozmiar czcionki: 14px;
    /* górne wypełnienie */
    margines u góry: 5 pikseli;
    /* odległość między zakładkami */
    margines lewy: 0,5 em;
    margines prawy: 0,5 em;
    /* Wskaźnik myszy */
    kursor: wskaźnik;
    /* Tło */
    obraz tła: url("mm_button.png");
    powtarzanie w tle: brak powtórzeń;
    /* wymiary tabulatora */
    szerokość: 100px;
    wysokość: 40px;
    /* sprawia, że ​​element jest jednocześnie liniowy i blokowy */
    wyświetlacz: blok inline
    }

    /* projekt aktywnej karty */
    .wybrane ( /* ... */)

    /* tabulator po najechaniu myszką */
    #hmenu li:najedź (
    obraz tła: url("mm_button_hover.png");
    }

    /* formatowanie tekstu linku */
    #hmenu li a (
    Zielony kolor;
    dekoracja tekstu: brak; /* wyłącz podkreślanie linków */
    }

    /* wyśrodkuj tekst w pionie */
    #hmenu li a span (
    Blok wyświetlacza; /* utwórz blok elementów */
    wyściółka górna: 0,8 em;
    wyściółka na dole: 0,8 em;
    }

    Tutaj wszystko jest opisane wewnątrz kodu, zaznaczę tylko, że korzystając z powyższego kodu CSS, tylko nowoczesne przeglądarki będą poprawnie wyświetlać stronę. Oznacza to, że w wersjach przeglądarki Internet Explorer niższych niż 8 strona nie będzie wyświetlana poprawnie. Dzieje się tak, ponieważ starsze przeglądarki, takie jak Internet Explorer 6 i 7, nie obsługują wartości inline i inline-block dla list. Zastąpienie wyświetlania linii: inline-block w drugiej regule za pomocą

    /* dla niższych wersji Firefoksa */
    wyświetl: -moz-inline-stack;
    /* dla wszystkich z wyjątkiem IE 7 i Firefoksa */
    wyświetlacz: blok inline;
    /* Dla IE 7 i starszych */
    *wyświetlacz: wbudowany;
    _overflow: ukryty;
    powiększenie: 1;

    W ten sam sposób utwórzmy menu po lewej stronie.

    Zaprojektujmy to za pomocą CSS.

    #vmenu li a (
    Zielony kolor;
    dekoracja tekstu: brak;
    }

    #vmenu li (
    rodzina czcionek:Calibri;
    rozmiar czcionki: 14px;
    styl czcionki:normalny;
    szerokość: 115 pikseli;
    Blok wyświetlacza;
    przepełnienie:ukryte; /* ukryj wystające elementy */
    dopełnienie: 0,5em 0em 0,5em 0;
    /* spraw, by element wyglądał jak przycisk, ustawiając odpowiednie tło */
    obraz tła:url("sm_button.png");
    pozycja tła:środek;
    powtarzanie w tle: brak powtórzeń;
    }

    #vmenu rozciąga się (
    szerokość: 100 pikseli;
    dopełnienie po lewej: 1em;
    dopełnienie po prawej: 100 pikseli;
    Blok wyświetlacza;
    }

    #vmenu li:najedź (
    obraz tła:url("sm_button_hover.png");
    }

    Podobnie jak w poprzednim przypadku, w niższych wersjach przeglądarki Internet Explorer wystąpi błąd wyświetlania. Wiąże się to z podwojeniem wcięcia elementów w tej przeglądarce.

    W następnej lekcji uzupełnimy układ naszej strony, umieszczając logo naszej witryny, treść i stopkę strony.

    Przedmowa: Pracując jako projektant układu, Twój pokorny sługa zauważył, że istnieje kilka rodzajów menu; Jednocześnie do układu każdego z nich należy zastosować własne techniki.
    Szczegóły znajdują się pod wycięciem.

    Ten artykuł jest skierowany bardziej do początkujących projektantów układów, ale być może doświadczeni profesjonaliści również znajdą w nim coś nowego lub uznają go za podręcznik.
    Temat jest skonstruowany w następujący sposób: najpierw stawiane jest zadanie - opisany jest rodzaj wymaganego bloku nawigacyjnego, następnie rozważane są techniki, które pozwalają stworzyć właśnie taką nawigację.
    Zakłada się, że style są zapisywane w ramach semantycznie poprawnej struktury menu, która wygląda mniej więcej tak:

    Dom
    Złożyc zamówienie
    Informacja zwrotna

    Projektując dla typu dokumentu innego niż HTML5, pomiń element nav lub zastąp go odpowiednim div.

    No to zaczynamy!..

    Pozycje menu umieszczone po prawej/lewej stronie W tej sekcji omówione zostały bloki nawigacyjne, w których elementy znajdują się po prawej/lewej stronie. Aby rozmieścić takie bloki, w zależności od sytuacji, możesz skorzystać z kilku metod:
  • wyświetlacz: wbudowany;
  • pływak: lewo/prawo;
  • wyświetlacz: blok inline.
  • Wyświetlacz: inlineKiedy go używamy
    Metodę tę warto stosować przy układaniu prostego menu, w którym elementy prezentowane są w postaci pojedynczych słów, bez dopełnienia i oddzielane jedynie spacjami między nimi:

    Jak to zrobić
    Elementy Li w CSS muszą ustawić właściwość display: inline. Nawiasem mówiąc, usunie to również znaczniki, które w większości menu tego typu są niepotrzebne, ponieważ znajdują się one w dodatkowych blokach, które są zawarte w elementach z display: list-item, ale nie ma ich w inline.
    W przypadku ul ustaw właściwość wyrównania tekstu odpowiednio na prawą lub lewą.

    Notatki

    • Korzystając z tej opcji warto pamiętać, że w przypadku elementów inline nie są brane pod uwagę marginesy pionowe, natomiast sprawdzają się marginesy poziome;
    • Jeśli potrzebujesz układu idealnego w pikselach, możesz napotkać problem: w różnych przeglądarkach szerokość przestrzeni między elementami jest różna. Aby rozwiązać problem, odległość między elementami ustala się z marginesami i usuwa się spacje;
    • Jeśli podkreślisz dolną granicę elementu menu, w nowoczesnych przeglądarkach możesz uzyskać piękne animowane menu on:hover (JSFiddle).
    Pływak: lewo/prawoKiedy używać
    Kiedy chcesz utworzyć menu z elementami z dopełnieniem i/lub stałą wysokością/szerokością:

    Jak to zrobić
    Ustaw float: left lub float:right na elementy li. Jeśli chcesz usunąć znaczniki, musisz dodać display: block lub list-style: none.

    Notatki

    • Konieczne jest „oczyszczenie” ul poprzez nadanie jej class.clearfix lub umieszczenie elementu z clear: obydwa na końcu, w przeciwnym razie ul będzie miała zerową wysokość; Możesz przeczytać o innych sposobach „czyszczenia” pływaków;
    • Przykład ciekawego menu z elementami pływającymi: html5guy.
    Wyświetlacz: blok inlineKiedy używać
    Zadania są takie same jak przy kodowaniu za pomocą float. I tak, rozwiązując taki problem, blok inline padł w nierównej bitwie. Po pierwsze, kompatybilność tego rozwiązania między przeglądarkami jest mniejsza niż float, a po drugie, pomiędzy blokami inline, a także pomiędzy elementami inline pojawiają się spacje, często niepotrzebne. Problemy te można rozwiązać, ale po co je tworzyć?

    Jak to zrobić
    Ustaw wyświetlacz: blok inline na elementy li. Cóż, dla IE7 (jeśli go obsługujesz) piszemy *display:inline; *powiększenie: 1.

    Bloki nawigacyjne, które są symetryczne względem lewej i prawej strony. W tej sekcji omówiono bloki nawigacyjne, które są rozmieszczone symetrycznie. Istnieje kilka rodzajów takich menu; każdy z nich ma swoją własną metodę układu:
  • pozycje menu są wyśrodkowane;
  • pozycje menu są równomiernie rozłożone na całej szerokości, pomiędzy elementami występuje przerwa;
  • Pozycje menu są równomiernie rozłożone na całej szerokości, elementy wypełniają całą szerokość ul.
  • Pozycje menu są wyrównane do środka Kiedy używamy
    Menu znajduje się pośrodku:

    Jak to zrobić
    W zależności od typu pozycji menu dla elementów li ustawiamy display: inline lub display: inline-block (jeśli pozycje menu mają dopełnienie i określono szerokość i/lub wysokość) dla elementów li. Dla elementu nadrzędnego (ul) ustawiamy wyrównanie tekstu: do środka.

    Notatki
    Powtórzę: czasami zachodzi potrzeba usunięcia spacji pomiędzy elementami inline i inline-block; Można znaleźć kilka sposobów rozwiązania tego problemu.

    Pozycje menu są równomiernie rozłożone na całej szerokości, pomiędzy elementami występuje przerwa
    Pozycje menu są równomiernie rozmieszczone na całej szerokości, z przerwami pomiędzy poszczególnymi pozycjami:

    Jak to zrobić
    W zależności od rodzaju pozycji menu ustaw display: inline lub display: inline-block na elementy li. Ustaw rodzica (ul) na wyrównanie tekstu: justuj. Ale justowanie nie zadziała od razu - musisz przepełnić pierwszą linię (jeśli nie jest jasne, dlaczego tak się dzieje, uruchom program Word i spróbuj rozciągnąć kilka słów do pełnej szerokości za pomocą justify). Dlatego na końcu elementu ul dodajemy dodatkowy element z displayem: inline-block i szerokość: 100%, lub jeszcze lepiej pseudoelement::after o tych samych cechach.

    Notatki
    Pamiętasz, że w poprzednich typach menu usunęliśmy spacje między elementami z właściwością display ustawioną na inline i inline-block? Zatem w tym przypadku absolutnie nie można tego zrobić - przeglądarka potrzebuje spacji pomiędzy pozycjami menu. Nawiasem mówiąc, jeśli usuniesz spacje między niektórymi elementami, możesz grupować przyciski (JSFiddle):

    Pozycje menu są równomiernie rozłożone na całej szerokości, elementy wypełniają całą szerokość ulicy
    Pomiędzy pozycjami menu nie ma przerw, dowolna liczba pozycji menu zajmuje całą szerokość:

    Jak to zrobić
    Rozwiązując ten problem, pojawia się pokusa uzupełnienia menu tabelami; ale nie będziemy naruszać semantyki dokumentu, prawda? Dlatego używamy display: table-cell dla li i display: table dla ul; następnie ustaw szerokość dla ul
    Jeśli potrzebujemy wsparcia dla starszych przeglądarek, korzystamy ze skryptu Polyfill, który zastępuje takie bloki tabelami dla IE6 i IE7 lub organizuje powrót w inny sposób.

    Notatki
    Układając menu w ten sposób, należy pamiętać, że nie można umieszczać elementów z pozycji: bezwzględnej względem komórki-tabeli.

    Dlaczego?

    Faktem jest, że specyfikacja w3c nie definiuje pozycji: względnej akcji na komórce tabeli, więc każda przeglądarka może mieć swoją własną charakterystykę.
    Spójrz na ten przykład w różnych przeglądarkach (szczególnie przyglądamy się zachowaniu Mozilla Firefox!).


    Aby rozwiązać ten problem, musisz umieścić element div w komórce, względem którego chcesz go ustawić.

    Podsumowanie W artykule wymieniono główne typy menu oraz cechy ich układu. Mam nadzieję, że ten materiał będzie dla Państwa przydatny. Dziękuję za uwagę.