Как да направите гумено адаптивно меню с помощта на CSS? Направи си сам хоризонтално падащо меню с помощта на CSS и Html. Разширете менюто до пълната ширина.
Добър ден
Често е необходимо да се направи хоризонтално меню, което да се простира по цялата ширина на родителския блок, независимо от това колко елемента съдържа.
Днес бих искал да ви покажа как да създадете точно такова меню.
Така че менюто ни ще бъде следното:
Той е опънат на цялата ширина и се откроява, когато се задържи над него. Менюто е заоблено отстрани.
HTML МАРКИРАНЕ
|
|
...
|
За да направя менюто с пълна ширина, използвах таблици със 100% ширина. Всяка таблица има контейнер div елемент от менюто. В зависимост от това дали първият, последният или междинният елемент от менюто е div, се присвоява съответният клас.
Всеки div контейнер има 2 странични граници с абсолютно позициониране, които са необходими за правилното показване. Ако използвате стандартни граници, тогава, когато превключвате елементи от менюто, текстът ще скочи с 1-2 пиксела, което е добре.
Активният клас отговаря за избрания елемент от менюто и го маркира.
Във всеки артикул имаме картинка и текст. За да гарантираме, че всичко това е подравнено строго в средата вертикално, използваме таблица. Благодарение на свойството за вертикално подравняване, нашите елементи от менюто винаги ще се показват гладко и няма да се отдалечават.
CSS ПРАВИЛА
Първо, нека зададем стилове за общото показване на менюто:
Menu_container ( padding-top: 40px; width: 100%; height: 47px; border-spacing: 0px; ) .menu_container td ( vertical-align: middle; /* вертикално подравняване */ ) .last_point_menu, .first_point_menu, .middle_point_menu ( ширина: 100%; височина: 47px; граница: 1px плътен #dadbda; z-индекс: 1000; позиция: относителна; border-left: няма;) .inner_table (ширина: 100%; височина: 100%;) .inner_table td (padding: 0px; vertical-align: middle; border: none; text-align: left; width: 150px; padding-left: 4px; ) .td.inner_table_title (padding-top: 4px; font-weight: bold; ) .td.inner_table_img (ширина: 40px!важно;) .inner_table_menu (височина: 100%; подложка: 0px; вертикално подравняване: по средата; граница: няма; подравняване на текст: вляво;) .inner_table_title ( подложка вляво: 10px; padding-right: 10px; text-transform: uppercase; line-height: 13px; ) .inner_table_menu td.inner_table_img ( width: 30px!important; height: 30px!important; padding-left: 15px; )
За красота, нека закръглим ъглите отстрани на менюто:
First_point_menu ( -webkit-border-top-left-radius: 5px; -webkit-border-bottom-left-radius: 5px; -moz-border-radius-topleft: 5px; -moz-border-radius-bottomleft: 5px; border-top-left-radius: 5px; border-bottom-left-radius: 5px; border-right: 1px solid #dadbda; ) .last_point_menu ( -webkit-border-top-right-radius: 5px; -webkit-border -bottom-right-radius: 5px; -moz-border-radius-topright: 5px; -moz-border-radius-bottomright: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px ;)
Сега менюто ни има по-красив вид:
Засега първата точка няма лява граница. Ще го поправим малко по-късно.
Сега нека добавим ефекти при задържане на мишката за менюто.
Middle_point_menu:hover, .last_point_menu:hover, .first_point_menu:hover, .middle_point_menu.active, .last_point_menu.active, .first_point_menu.active, .middle_point_menu.active ( цвят на фона: #CAE285; фоново изображение: -moz-linear- градиент (отгоре, #CAE285, #9FCB56); фоново изображение: -webkit-градиент (линеен, 0 0, 0 100%, от (#CAE285), до (#9FCB56)); фоново изображение: -webkit-линеен -градиент (отгоре, #CAE285, #9FCB56); фоново изображение: -o-линеен градиент (отгоре, #CAE285, #9FCB56); фоново изображение: линеен градиент (до долу, #CAE285, #9FCB56); border: 1px solid #9FCB56; border-color: #aec671 #9fbb62 #87ac4a; border-left: none; z-index: 5000; ) /* ще изработи граници при задържане */ .first_point_menu ( border: 1px solid #dadbda ; ) .first_point_menu:hover, .first_point_menu.active ( граница: 1px плътен #9FCB56; цвят на границата: #aec671 #9fbb62 #87ac4a; ) .last_point_menu ( граница: 1px плътен #dadbda; border-left: няма; ) .last_point_menu :hover ( граница: 1px solid #9FCB56; border-left: няма; цвят на границата: #aec671 #9fbb62 #87ac4a; ) .last_point_menu.active ( border-left: none; )
Сега нашето меню изглежда много по-хубаво, но засега нямаме граници за маркираните елементи от менюто. Нека поправим това!
/* стилове за странични граници */ .borderLeftSecond, .borderRightSecond ( display: none; position: absolute; width: 1px; height: 47px; background-color: #9fbb62; top: 0px; z-index: 1000; ) /* абсолютни отмествания за граници */ .borderLeftSecond ( left: 0px; ). , .middle_point_menu: hover > .borderRightSecond, .last_point_menu: hover > .borderLeftSecond .first_point_menu: hover > .borderRightSecond ( display: block; ) /* обработва случаите на първият и последният елемент */ .first_point_menu.active .borderLeftSecond ( display: none; ) .last_point_menu.active .borderRightSecond ( display: none; ) .last_point_menu:hover .borderLeftSecond ( display: block; )
Това е всичко!
Направихме го страхотно менюопъната по цялата ширина на родителския блок! Елементите не се припокриват един с друг, когато задържите курсора на мишката и оформлението не скача.
Хоризонталното меню е списък със секции на уебсайта, така че е по-логично да го поставите вътре в елемента
- и след това приложете CSS стилове към неговите елементи. Това оформление на менюто е най-често срещаното поради очевидните предимства при позиционирането му на уеб страница.Как да направите хоризонтално меню: примери за оформление и дизайн
HTML маркиране и основни стилове за хоризонтално меню
- Елемент от менюто
- Елемент от менюто
- Елемент от менюто ...
- Код на обема
- Невъзможност за определяне на активното състояние на елемент чрез селектор на клас. Това се случва поради прекъсване на думите в абзаци (ако има такова). Решението на този проблем е да добавите друг контейнер в елементите на списъка.
- За падащото меню трябва да персонализирате кода поради отрицателното въздействие на overflow. В какви браузъри работи?
- У дома
- За нас
- Нашите услуги
- Нашата услуга №1
- Нашата услуга №2
- Нашата услуга №3
- Нашата услуга №4
- Обслужване 5
- Новини
- Контакти
- менюто ще се рисува динамично;
- отстъпите от разделителя до абзаца са еднакви навсякъде;
- по-красив и гъвкав дизайн.
- с vip подложка при насочване настрани
- с изскачащо падащо меню от трето ниво
- У дома
- За нас
- Нашите услуги
- Нашата услуга №1
- Допълнение към услугата 1
- Допълнение към услуга 2
- Нашата услуга №2
- Допълнение към услугата 3
- Допълнение към услугата 4
- Нашата услуга №3
- Нашата услуга №4
- Обслужване 5
- Нашата услуга №1
- Новини
- Контакти
- Пътна карта
- Добавка за карта
- Допълнение към карта 2
- Форма за обратна връзка
- Пътна карта
По подразбиране всички елементи на списъка са подредени вертикално, заемайки цялата ширина на контейнерния елемент, който от своя страна заема цялата ширина на своя контейнерен блок.
HTML маркиране за хоризонтална навигация
Хоризонтално меню, разположено в таг, може допълнително да бъде поставено в елемента ... и/или .... Благодарение на това HTML маркиране се дава и се появява семантично значение допълнителна възможностза форматиране на блока на менюто.
Има няколко начина да ги поставите хоризонтално. Първо, трябва да нулирате стиловете на браузъра по подразбиране за навигационни елементи:
Ul ( list-style: none; /*премахване на маркери за списък*/ margin: 0; /*премахване на горното и долното поле равно на 1em*/ padding-left: 0; /*премахване на лявото поле равно на 40px*/ ) a (текстова декорация: няма; /*премахване на подчертаването на текста на връзката*/)
Метод 1. li (дисплей: вграден;)Изписване на елементите на списък с малки букви. В резултат на това те са разположени хоризонтално, като от дясната страна между тях е добавено разстояние от 0,4 em (изчислено спрямо размера на шрифта). За да го премахнете, добавете отрицателно дясно поле за li li (margin-right: -4px;) . След това стилизираме връзките, както желаем.
Метод 2. li (float: left;)Направете елементите на списъка плаващи. В резултат на това те са разположени хоризонтално. Височината на контейнерния блок ul става нула. За да разрешим този проблем, добавяме (overflow: hidden;) към ul, разширявайки го и по този начин му позволявайки да съдържа плаващи елементи. За връзки добавете (display: block;) и ги стилизирайте, както желаете.
Метод 3. li (дисплей: inline-block;)Създаване на елементи от списъка inline-block. Те са разположени хоризонтално, от дясната страна се образува празнина, както в първия случай. За връзки добавете (display: block;) и ги стилизирайте, както желаете.
Метод 4. ul (дисплей: flex;)Превръщане на ul списъка в гъвкав контейнер с помощта на . В резултат на това елементите на списъка се подреждат хоризонтално. Добавяме (display: block;) за връзките и ги стилизираме по желание.
1. Адаптивно меню с ефект на подчертаване при задържане на курсора на мишката над линк @import url("https://fonts.googleapis.com/css?family=Ubuntu+Condensed"); .menu-main (списък стил: няма; margin: 40px 0 5px; padding: 25px 0 5px; text-align: center; background: white; ) .menu-main li (display: inline-block;).menu- main li:after (съдържание: "|"; цвят: #606060; дисплей: inline-block; vertical-align:top;) .menu-main li:last-child:after (content: none;) .menu-main a ( text-decoration: none; font-family: "Ubuntu Condensed", sans-serif; letter-spacing: 2px; position: relative; padding-bottom: 20px; margin: 0 34px 0 30px; font-size: 17px; преобразуване на текст: главни букви; дисплей: вграден блок; преход: цвят .2s; ) .menu-main a, .menu-main a: visited (цвят: #9d999d;) .menu-main a.current, .menu- main a:hover(color: #feb386;) .menu-main a:before, .menu-main a:after ( съдържание: ""; позиция: абсолютна; височина: 4px; горе: автоматично; дясно: 50%; долу : -5px; ляво: 50%; фон: #feb386; преход: .8s; ) .menu-main a:hover:before, .menu-main .current:before (left: 0;) .menu-main a: hover:after, .menu-main .current:after (дясно: 0;) @media (max-width: 550px) ( .menu-main (padding-top: 0;).menu-main li (дисплей: блок; ) .menu-main li:after (съдържание: няма;) .menu-main a ( padding: 25px 0 20px; поле: 0 30px; ) ) 2. Адаптивно меню за сватбен сайт @import url("https://fonts.googleapis.com/css?family=PT+Sans"); .top-menu ( позиция: относителна; фон: #fff; box-shadow: inset 0 0 10px #ccc; ) .top-menu:before, .top-menu:after ( съдържание: ""; дисплей: блок; височина : 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: none; padding: 0 30px; margin: 0; font-size: 18px; text-align: център; позиция: относителна; ) .menu-main:before, .menu-main:after ( съдържание: "\25C8"; line-height: 1; position: absolute; top: 50%; transform: translateY(-50% ); ) .menu-main:before (left: 15px;) .menu-main:after (right: 15px;) .menu-main li ( display: inline-block; padding: 5px 0; ) .menu-main a (текстова декорация: няма; дисплей: вграден блок; поле: 2px 5px; подложка: 6px 15px; семейство шрифтове: "PT Sans", sans-serif; размер на шрифта: 16px; цвят: #777777; border-bottom : 1px плътен прозрачен преход: .3s линеен; ) .menu-main .current, .menu-main a:hover ( border-radius: 3px; фон: #f3ece1; цвят: #313131; text-shadow: 0 1px 0 #fff; border-color: #c6c6c6; ) @media (max-width: 500px) ( .menu-main li (display: block;) ) 3. Адаптивно назъбено меню @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .menu-main (списък стил: няма; подложка: 0 30px; поле: 0; размер на шрифта: 18px; подравняване на текст: център; позиция: относителна; фон: бял; ) .menu-main:after ( съдържание: ""; позиция: абсолютна; ширина: 100%; височина: 20px; ляво: 0; дъно: -20px; фон: радиален градиент (бяло 0%, бяло 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 (дисплей: inline-block;) .menu-main a ( text-decoration: няма; дисплей: inline-block; марж: 0 15px; padding: 10px 30px; font-family: "PT Sans Caption", sans-serif; цвят: #777777; преход: .3s линеен; позиция: относителна; ) .menu -main a:before, .menu-main a:after ( съдържание: ""; позиция: абсолютна; горна: calc(50% - 3px); ширина: 6px; височина: 6px; border-radius: 50%; фон: #F58262; непрозрачност: 0; преход: .5s ease-in-out; ) .menu-main a:before (вляво: 5px;) .menu-main a:after (вдясно: 5px;) .menu-main a. current:before, .menu-main a.current:after, .menu-main a:hover:before, .menu-main a:hover:after (непрозрачност: 1;) .menu-main a.current, .menu- main a:hover (color: #F58262;) @media(max-width:680px) ( .menu-main li (display: block;) ) 4. Адаптивно меню на лентата @import url("https://fonts.googleapis.com/css?family=PT+Sans+Caption"); .top-menu ( margin: 0 60px; позиция: относителна; фон: #5A394E; box-shadow: inset 1px 0 0 rgba(255,255,255,.1), inset -1px 0 0 rgba(255,255,255,.1), inset 150px 0 150px -150px rgba(255,255,255,.12), вмъкване -150px 0 150px -150px rgba(255,255,255,.12); ) .top-menu:before, .top-menu:after ( съдържание: ""; позиция: абсолютна ; z-индекс: 2; ляво: 0; ширина: 100%; височина: 3px; ) .top-menu:before ( отгоре: 0; border-bottom: 1px пунктирана rgba(255,255,255,.2); ) .top- menu:after ( bottom: 0; border-top: 1px пунктиран rgba(255,255,255,.2); ) .menu-main ( list-style: none; padding: 0; margin: 0; text-align: center; ) . menu-main:before, .menu-main:after ( съдържание: ""; позиция: абсолютна; ширина: 50px; височина: 0; горе: 8px; border-top: 18px solid #5A394E; border-bottom: 18px solid # 5A394E; трансформиране: завъртане (360 градуса); z-индекс: -1; ) .menu-main:before ( ляво: -30px; border-left: 12px solid rgba(255, 255, 255, 0); ) .menu- main:after (дясно: -30px; border-right: 12px solid rgba(255, 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; цвят: бял; преход: .3s линеен; ) .menu-main a.current, .menu-main a:hover (фон: rgba(0,0,0,.2);) @media (max-width: 680px) ( .top-menu (margin: 0;) .menu-main li ( display: block; margin-right: 0; ) .menu-main:before, .menu-main:after (съдържание: няма;) .menu-main a (дисплей: блок;) ) 5. Адаптивно меню с лого в средата![](https://i0.wp.com/сайт/wp-content/uploads/2017/04/lily-logo.png)
![](https://i2.wp.com/html5book.ru/wp-content/uploads/2017/04/lily-logo.png)
Доста често срещано оформление на менюто на сайта, когато контейнерът с него заема цялата налична ширина на страницата. В този случай първият елемент е в съседство с левия ръб, а последният е в съседство с десния и разстоянието между всички елементи е еднакво. Днес ще ви кажем как се прави това.
Предлагаме ви пример за внедряване на гумено меню с помощта на CSS за вашия ресурс. В това меню елементите ще бъдат разположени на един ред. Javascript няма да се използва. Съдържанието на менюто ще бъде оградено в редовен списък. Основната характеристика на такова меню е неговата гъвкавост, която се изразява във факта, че както броят, така и дължината на елементите могат да бъдат всякакви.
Как да приложим това?Всеки програмист може да предложи свой собствен начин за решаване на даден проблем. Всичко зависи от неговото въображение, ниво на професионализъм и способности. Най-често срещаното решение на този проблем е използването на таблица. Освен това мнозина биха предложили използването на javascript. Бързам да разочаровам тези, които биха предложили да използвате свойството display с таблицата със стойности или клетката на таблицата. Този метод не е достатъчно съвместим с различни браузъри.
Нашето решениеНашето предложение ще бъде изградено върху солидна основа от знания за HTML5 и CSS3.
Същността на процеса се основава на свойството за подравняване на текста със стойността за оправдаване. За тези, които са забравили, напомням ви: това свойство ориентира подравняването на текста по цялата ширина на контейнера.
При използване на нашето решение трябва да се спазват две задължителни правила. Първият е, че ширината на контейнера на елемент от менюто трябва да бъде по-малка от текста. Тоест не в един ред. Второто важно правило е, че думите се разтягат еднакво, независимо дали принадлежат към една и съща точка или не.
По-долу е даден код, който служи като пример за създаване на гумено меню:
HTML
< ul> < li>< a href= "#" >У дома< li>< a href= "#" >Блог< li>< a href= "#" >Новини< li>< a href= "#" >Популярен< li>< a href= "#" >Нови предмети
ul ( text- align: justify; overflow: hidden; /* елиминира страничните ефекти на метода */ height: 20px; /* също елиминира ненужните */ курсор: по подразбиране ; /* задава първоначалната форма на курсора */ margin : 50px 100px 0 100px; фон: #eee; padding: 5px; ) li ( display: inline; /* прави елементите от менюто текст */ ) li a ( display: inline- block; /* елиминира прекъсванията на думи в менюто */ цвят: #444; ) a : задържане ( цвят: #ff0000; ) ul: след ( /* формиране на втория ред за разработване на метода */ съдържание: "1" ; поле отляво: 100 %; височина: 1px; препълване: скрито; показване: вграден блок; )
За да работите в добрия стар Internet Explorer, трябва допълнително да добавите следния код към CSS
ul ( z- индекс: израз(runtimeStyle. zIndex = 1, insertAdjacentHTML("beforeEnd&apos, "< li class = "last" >")); ) ul .last ( margin-left: 100%; ) * html ul ( /* трябва само ie6 */ height: 30px; )
След като посочихме необходимите стойности на свойствата и кода, получаваме това гумено меню:
6.0+ | 6.0+ | 10.5+ | 5.0+ | 3.6+ | - | - |
Продължаваме поредицата с урок за падащите менюта. Следва хоризонтално падащо меню „направи си сам“ с помощта на css.
Ако сте попаднали тук случайно или сте търсили друга реализация на падащото меню, съветвам ви да отидете в родителския раздел.
Този раздел ще опише хоризонтално падащо меню в CSS и HTML.
Навигация на страницата:
Така, нашата задача:
направете хоризонтално меню с падащ списък css (на ul li списъци) без да използвате jQuery и Javascript, а също и без да използвате таблици