Ние създаваме стилни падащи списъци. Избиране от падащ списък в HTML падащ списък при задържане на css
Днес искам да представя малка „рецепта“ за създаване на списък в CSS. Без JQuery, без CSS3 - само добрият стар CSS за различни браузъри. Примерът е доста прост, така че опитни другари може да не се интересуват. Ще внедрим падащ списък със социални бутони.
И така, да не говорим дълго, да минем направо на въпроса
HTML
Споделете тази публикация
- Google Plus
- Във връзка с
- RSS
Умишлено пропускам общи точки, като например включване на стилове, така че кодът да не расте. В долната част на страницата ще дам връзка към източниците - всичко е там.
Това, което имаме в HTML, е обикновен списък и необичайна заглавка. Необичайността му е, че е направена с хипервръзка, която ви позволява да проследите събитието :задръжте, тоест напътствие. Падащият списък ще работи, когато задържите курсора на мишката върху заглавието.
CSS
Първо, нека да разгледаме основните стилове на падащия списък. Опитах се да коментирам всеки ред от кода, за да стане по-ясно:
/*Нулиране на подложката*/ .droplink ul,.droplink h3,.droplink h3 a( padding:0;margin:0) /*Основна обвивка*/ .droplink ( width:200px; position:absolute; margin:10px 0 0 25px ) /*Hover block style*/ .droplink:hover( height:auto; background-color:#3E403D; border:solid 1px #3A3C39 ) /*Title in normal state*/ .droplink h3 a( text-align:center ; width:100%; display:block; padding:12px 0px; color:#999; text-decoration:none) .droplink h3 a img(border:none) /*Стил за заглавие при задържане*/ .droplink:hover h3 a (цвят:#FFF; тегло на шрифта: получер; позиция: абсолютна)
Тук няма нищо специално; посочихме размера и стила на блока, стила на заглавката и за двата елемента техните стилове при задържане на курсора. Продължавай:
/*Скриване на списъка без задържане*/ .droplink ul( list-style:none; display:none ) /*Показване на списъка при задържане*/ .droplink:hover ul( display:block; margin-top:40px ) .droplink li(дисплей:блок)
Този код е по-интересен и показва как се държи падащ списъкпри задържане на курсора. В нормално състояние струва показване: няма,тоест не се показва. При задържане го показваме като блок. Това е цялата тайна. Сега нека украсим малко елементите на списъка и да вмъкнем икони:
/*Стил на елемент от списъка*/ .droplink li a( padding:5px 12px 4px 34px; margin:1px; background-color:#484A47; display:block; color:#FFF; text-decoration:none; font-size:12px ; background-repeat:no-repeat; background-position: 10px 3px ) /*Стил на задържане на елемента*/ .droplink li a:hover( цвят на фона:#999 ) /*Икони*/ .facebook a (фоново изображение: url("icons/facebook.png")) .twitter a (background-image:url("icons/twitter.png")) .vk a (background-image:url("icons/vk.png")) . rss a (background-image:url("icons/rss.png")) .gplus a (background-image:url("icons/gplus.png"))
Това е всичко, всъщност. Падащият списък е готов и изглежда доста добре. Можете да проектирате елементите по свое усмотрение, да добавите заоблени ъгли и други звънци и свирки.
Ако искате списъкът да „припокрива“ текста под него, когато задържите, погледнете отстрани z-индекс.
Ако нещо не е ясно или не се получава, попитайте в коментарите или използвайте бутона „Изпрати съобщение“, там е —>
Хоризонтално падащо менюизползвани за организиране на навигационната структура на сайта. Оптималният брой нива на гнездене е едно или две. Колкото по-малко са нивата на прикачените файлове, толкова по-лесно е за посетителя на сайта да намери информацията, от която се нуждае. Как да създадете редовно хоризонтално меню е описано подробно в.
Как да направите хоризонтално падащо меню
1. HTML маркиране и основни стилове за падащо меню с едно ниво на влагане
HTML маркирането на хоризонтално падащо меню се различава от обикновеното меню по това, че свързва към желания елемент от списъка
- или<оl> .
- В примерите за код липсват префикси на браузъра за CSS свойства, но разбира се можете да ги намерите в изходните файлове.
- Лично аз използвам модела кутия, където = + + . За да го активирате, имате нужда от следния код:
- > Скрит съм! >
- > Аз също! >
- > Аз също. >
- Първо, правим падащото меню видимо, като променяме неговата непрозрачност на 1.
- След това променяме посоката и цвета на малката стрелка.
- След това ще променим фона зад стрелката с градиент.
- > Тип="кутия за отметка" документ за самоличност="ел-1" име="ел-1" стойност="поничка"> > >
- > Тип="кутия за отметка" документ за самоличност="ел-2" име="ел-2" стойност="съсед"> > >
- > Тип="кутия за отметка" документ за самоличност="ел-3" име="ел-3" стойност="Т-рекс"> > >
- > href="#" > клас="икона-потребител"> > Профил > >
- > href="#" > клас="икона-зъбче"> > Настройки > >
- > href="#" > клас="икона-премахване"> > Излез > >
- Избрано - предназначено за подчертаване на елемент от списъка. Потребителят ще може да избере повече от един елемент, ако е зададен множественият атрибут (вижте по-горе).
- Стойност - стойност. Този атрибут е задължителен. Уеб сървърът трябва да разбере кои елементи от списъка е избрал потребителят.
- Етикет. Този атрибут може да се използва за съкращаване на елементи от списък, които са твърде дълги. Например на екрана ще се покаже „Милано“ вместо „Милано е административният център на Ломбардия“, посочено в етикета за опции. Северна Италия“. Този атрибут се използва и за групиране на елементи в списък.
За позициониране на подменюто спрямо главното меню се декларират следните стилове:
— за елемент от списък, в който е вложен падащ списък: li (позиция: относителна;) ;
— за падащото меню ul (позиция: абсолютна;) , както и левите и горните стойности.
За яснота и лесно форматиране, нека добавим горното меню на класа към главното меню и подменюто към падащото меню.
Има няколко начина да скриете падащо меню:
1) дисплей: няма;
2) видимост: скрита;
3) непрозрачност: 0;
4) трансформиране: scaleY(0);
5) използване на библиотеката jQuery.
Метод 1. (показване: няма;)
Падащото меню е скрито с помощта на .submenu (display: none;) , при задържане се показва с помощта на .topmenu li:hover .submenu (display: block;) .
Метод 2. (видимост: скрита;)
Менюто е скрито с помощта на .submenu (visibility: hidden;) и показано с помощта на .topmenu li:hover .submenu (visibility: visible;) .
Метод 3. (непрозрачност: 0;)
Менюто е скрито с помощта на .submenu (непрозрачност: 0;) и показано с помощта на .topmenu li:hover .submenu (непрозрачност: 1;) . За да предотвратите показването на менюто, когато задържите курсора на мишката върху зоната, където се намира, добавете видимост: скрито; , а при задържане го сменете на visibility: visible; .
Метод 4. (трансформация: scaleY(0);)
Менюто е скрито с помощта на .submenu (transform: scaleY(0);) и показано с помощта на .topmenu li:hover .submenu (transform: scaleY(1);) . Тъй като трансформацията на елемента по подразбиране се извършва от центъра, трябва да добавите за .submenu (transform-origin: 0 0;) , т.е. от горния ляв ъгъл.
Метод 5: Използване на jQuery
$(".five li ul").hide(); // скриване на падащото меню $(".five li:has(".submenu")").hover(function())( $(".five li ul").stop().fadeToggle(300) ;) /* изберете елемент от списък, който съдържа елемент с класа .submenu и добавете hover функция към него, която показва и скрива падащото меню */);2. 3D падащо меню
Интересни ефекти могат да бъдат създадени с помощта на CSS3 трансформации, например, като накарате менюто да се появи от дълбините на екрана.
* ( box-sizing: border-box; ) body ( margin: 0; background: radial-gradient(#BFD6E2 1px, rgba(255,255,255,0) 2px); background-size: 10px 10px; ) nav ul ( list-style : няма; поле: 0; подложка: 0; ) nav a ( дисплей: блок; украса на текст: няма; контур: няма; преход: .4s леко влизане навън; ) .topmenu ( backface-visibility: скрит; фон : rgba(255,255,255,.8); ) .topmenu > li ( дисплей: вграден блок; позиция: относителна; ) .topmenu > li > a ( семейство шрифтове: "Exo 2", sans-serif; височина: 70px; line-height: 70px; padding: 0 30px; font-weight: bold; color: #003559; text-transform: uppercase; ) .down:after ( съдържание: "\f107"; margin-left: 8px; font-family : FontAwesome; ) .topmenu li a:hover (цвят: #E6855F; ) .submenu (фон: бял; граница: 2px плътен #003559; позиция: абсолютна; ляво: 0; видимост: скрита; непрозрачност: 0; z-индекс : 5; ширина: 150px; трансформация: перспектива(600px) rotateX(-90deg); transform-origin: 0% 0%; преход: .6s леко навътре-навън; ) .topmenu > li:hover .submenu( visibility: видими; непрозрачност: 1; трансформация: перспектива (600px) rotateX (0deg); ) .submenu li a ( цвят: #7f7f7f; размер на шрифта: 13px; височина на реда: 36px; подложка: 0 25px; семейство шрифтове: "Kurale", serif; )
3. Разширяемо падащо меню с лого
В този пример горната част на страницата съдържа логото и навигацията на сайта. Логото може да бъде картина или текст. Падащото меню постепенно се разширява от под горния елемент от списъка с помощта на функцията за преобразуване на CSS3.
4. Разширяване на падащото меню
Друг пример за падащо меню. Ефектът на уголемяване, когато се появи менюто, се реализира чрез намаляване на първоначалния size.submenu (transform: scale(.8);) , при задържане размерът се увеличава до.topmenu > li:hover .submenu (transform: scale(1);) .
* ( box-sizing: border-box; ) body ( margin: 0; background: url(https://html5book.ru/wp-content/uploads/2015/10/background54.png) ) nav (фон: бял; ) nav ul ( стил на списък: няма; поле: 0; подложка: 0; ) nav a ( украса на текст: няма; контур: няма; дисплей: блок; преход: .4s леко влизане навън; ) .topmenu ( text-align: center; padding: 10px 0; ) .topmenu > li ( display: inline-block; position: relative; ) .topmenu > li:after ( content: ""; position: absolute; right: 0; width: 1px; височина: 12px; фон: #d2d2d2; отгоре: 16px; box-shadow: 4px -2px 0 #d2d2d2; transform: rotate(30deg); ) .topmenu > li:last-child:after ( background: none; box -shadow: none; ) .topmenu > li > a (padding: 12px 26px; color: #767676; text-transform: uppercase; font-weight: bold; letter-spacing: 1px; font-family: "Exo 2", sans-serif; ) .topmenu li a:hover ( цвят: #c0a97a; ) .submenu (позиция: абсолютна; ляво: 50%; горе: 100%; ширина: 210px; margin-left: -105px; фон: #fafafa ; рамка: 1px плътен #ededed; z-индекс: 5; видимост: скрита; непрозрачност: 0; трансформация: мащаб (.8); преход: .4s лесно влизане-навън; ) .submenu li a ( padding: 10px 0; margin: 0 10px; border-bottom: 1px solid #efefef; font-size: 12px; color: #484848; font-family: "Kurale", serif; ) .topmenu > li:hover .submenu (видимост: видим; непрозрачност: 1; трансформация: мащаб(1); )
5. Изтеглящо се падащо меню
Хоризонтално меню с мини-анимация: когато задържите курсора на мишката върху връзките на горното меню, се появява малък кръг, който също придружава появата на падащото меню.
@import url("https://fonts.googleapis.com/css?.jpg); background-position: center center; background-repeat: no-repeat; background-size: cover; height: 100vh; position: relative; ) body:before ( съдържание: ""; позиция: абсолютна; ляво: 0; дъно: 0; височина: 100%; ширина: 100%; фон: линеен градиент(45deg, rgba(0,0,0,0) , rgba(255,255,255,.8)); ) nav ( подравняване на текст: център; подложка: 40px 0 0; ) nav ul ( стил на списък: няма; поле: 0; подравняване: 0; ) nav a ( украса на текст : няма; дисплей: блок; цвят: #222; ) .topmenu > li ( дисплей: inline-block; позиция: относителна; ) .topmenu > li > a ( позиция: относителна; подложка: 10px 15px; font-family: " Kaushan Script", курсив; размер на шрифта: 1,5 em; височина на реда: 1; разстояние между буквите: 3px; ) .topmenu > li > a:before ( съдържание: ""; позиция: абсолютна; z-индекс: 5; отляво: 50%; отгоре: 100%; ширина: 10px; височина: 10px; фон: бял; радиус на границата: 50%; трансформация: превод (-50%, 20px); непрозрачност: 0; преход: .3s; ) .topmenu li:hover a:before ( transform: translate(-50%, 0); непрозрачност: 1; ) .submenu ( позиция: абсолютна; z-индекс: 4; ляво: 50%; горе: 100%; ширина: 150px; подложка: 15px 0 15px; margin-top: 5px; фон: бял; border-radius: 5px; box-shadow: 0 0 30px rgba(0,0,0,.2); box-sizing: border-box; visibility: hidden; opacity: 0; transform: translate(-50%, 20px); преход: .3s ; ) .topmenu > li:hover .submenu ( visibility: visible; opacity: 1; transform: translate(-50%, 0); ) .submenu a ( font-family: "Libre Baskerville", serif; размер на шрифта: 11px; разстояние между буквите: 1px; подложка: 5px 10px; преход: .3s линеен; ) .submenu a:hover (фон: #e8e8e8;)
В тази статия ще ви покажем как да създавате красиви падащи списъци, без да използвате изображения, а само с помощта на CSS. Ще добавим и малко jQuery код, за да работят.
Моля, обърнете внимание на няколко неща, преди да започнем:
*,
* :след
* :преди (
оразмеряване на кутията: border-box;
}
И така, откъде да започнем?
Първи въпрос: какво ни трябва, за да създадем падащо меню? Като цяло ще използваме DIV с вложен таг span и неподреден списък за падащото меню:
> Аз съм нещо като етикета! >
>
JavaScript
Имаме нужда от малко JavaScript, за да накараме нашия падащ списък да работи според очакванията. Това е JS фрагментът, който ще използваме за всички примери:
//...
Obj.dd .on ("щракване", функция (събитие) (
връща невярно;
}
)
;
//...
$(функция() (
var dd = new DropDown( $("#dd" ) ) ;
$(документ).щракване(функция() (
//всички падащи менюта
$(".wrapper-dropdown-1") .removeClass ("активен");
}
)
;
} ) ;
И така, какво прави този скрипт? Първо, превключва класа .активенкогато щракнете върху обвивката. Това означава, че ако обвивката няма клас .активен, след това се добавя и ако този клас вече е присвоен, тогава се премахва.
Второ, скриптът създава поведение по подразбиране за падащото меню, като го затваря, ако щракнете някъде другаде на екрана.
Е, сега разбираме как работи, мисля, че е време да създадем няколко примера!
Пример 1
Нека започнем с нещо просто: обикновено падащо поле за пол. Нека първо да разгледаме маркировката:
HTML маркиране
Имаме нужда от няколко неща: обвивка (div с id#dd), (скрит) падащ списък и "етикет", който ще бъде обвит с таг span. Използваме връзки за котва, защото смятам, че е семантично правилно, но бихте могли да използвате и различен етикет.
>CSS
Нека сега да преминем към CSS. Да започнем с обвивката:
Обвивка-падащо меню (
/* размер и позиция */
позиция: роднина;
ширина: 200px;
подложка: 10px;
марж: 0 авто;
/* цвят и фон */
фон: #9bc7de;
цвят : #fff ;
контур: няма;
курсор: показалец;
/* шрифт */
тегло на шрифта: удебелен;
}
Така че направихме няколко неща. Първо задаваме ширината на списъка и някои подложки. След това му дадохме цвят и фон. И накрая, задаваме опциите за шрифт.
Нека завършим "етикета", като добавим малка стрелка вдясно, използвайки псевдоелемент.
Обвивка-падащо меню :след (
съдържание: "";
ширина: 0;
височина: 0;
позиция: абсолютна;
дясно: 16px;
отгоре: 50%;
margin-top : -6px ;
border-width: 6px 0 6px 6px;
border-style: плътен;
цвят на границата: прозрачен #fff;
}
Мисля, че всички знаем как да създадем малък триъгълник в CSS с помощта на рамка. Разбира се, това е хак, но ако работи наистина добре, защо не? Там няма нищо особено: малка бяла стрелка вдясно.
Така че имаме хубав малък бутон, но без падащото съдържание няма смисъл. Нека да разгледаме нашия списък!
Wrapper-dropdown-1 .dropdown (
/* Размер и позиция */
позиция: абсолютна;
отгоре: 100%;
ляво: 0; /* Размер */
дясно: 0; /* Размер */
/* Стилове */
фон: #fff;
тегло на шрифта: нормално; /* Презаписва предишния font-weight: bold; */
/* Укриване */
непрозрачност: 0;
показалец-събития: няма;
}
Ще дадем на падащото меню абсолютна позиция и ще го поставим зад бутона (отгоре: 100%;). Нека му дадем същата ширина като на бутона. И накрая, скрийте го, като намалите непрозрачността му до 0.
Сега нека зададем стилове за елементите на списъка:
Wrapper-dropdown-1 .dropdown li a (
дисплей: блок;
текст-декорация: няма;
цвят : #9e9e9e ;
подложка: 10px 20px;
}
/* Състояние на задържане */
.wrapper-dropdown-1 .dropdown li: hover a (
фон: #f3f8f8;
}
С помощта на JavaScript ще сменим класа .активенкогато щракнем върху бутона, въз основа на този клас можем да променим нашия CSS, за да покаже падащото меню.
/* Активно състояние */
.wrapper-dropdown-1 .active .dropdown (
непрозрачност: 1;
показалец-събития: авто;
}
Wrapper-dropdown-1 .active :after (
цвят на границата: #9bc7de прозрачен;
ширина на границата: 6px 6px 0 6px;
margin-top: -3px;
}
Wrapper-dropdown-1.active(
фон: #9bc7de;
фон: линеен градиент (надясно, #9bc7de 0%, #9bc7de 78%, #ffffff 78%, #ffffff 100%);
}
Три неща, които трябва да отбележите:
JavaScript
Не на последно място, ние също трябва да добавим друга част от JavaScript, за да накараме бутона да показва избраната стойност.
функция DropDown(el) (
това .dd = el;
this .placeholder = this .dd .children ("span");
this .opts = this .dd .find ( "ul.dropdown > li" );
това .val = "";
този .index = - 1;
this.initEvents();
}
DropDown.prototype = (
var obj = това;
$(this).toggleClass("активен");
връща невярно;
}
)
;
Obj.opts.on("click" , function() (
var opt = $(това);
obj.val = opt.text();
obj.index = opt.index();
obj.placeholder.text("Пол: " + obj.val);
}
)
;
}
,
getValue:function()(
върнете това .val;
}
,
getIndex : функция () (
върнете този .index;
}
}
Много прост код: когато се щракне върху елемент, ние получаваме неговата стойност и я показваме в таг span.
Пример 2
Във втория пример ще създадем красиво меню за регистрация в различни социални мрежи.
HTML маркиране
>Етикети се използват за показване на малки икони от FontAwesome. Тук няма да обяснявам какво е FontAwesome, защото това вече е обсъждано повече от веднъж в предишни статии. Просто се уверете, че работи.
CSS
Да започнем с обвивката. Това е почти същото като обвивката в предишния пример. Обърнете внимание на 5px лявата граница.
Wrapper-dropdown-2 (
/* Размер и позиция */
позиция: роднина; /* Разрешаване на абсолютно позициониране за деца и псевдо елементи */
ширина: 200px;
марж: 0 авто;
подложка: 10px 15px;
/* Стилове */
фон: #fff;
border-left: 5px плътно сиво;
курсор: показалец;
контур: няма;
}
Сега малката стрелка. Точно същото като преди:
Wrapper-dropdown-2 :after (
съдържание: "";
ширина: 0;
височина: 0;
позиция: абсолютна;
дясно: 16px;
отгоре: 50%;
margin-top: -3px;
ширина на границата: 6px 6px 0 6px;
border-style: плътен;
цвят на границата: сив прозрачен;
}
И това е падащ списък. Отново, почти същото като предишния пример:
Wrapper-dropdown-2 .dropdown (
/* Размер и позиция */
позиция: абсолютна;
отгоре: 100%;
ляво: -5px;
дясно: 0px;
/* Стилове */
фон: бял;
стил на списък: няма;
/* Укриване */
непрозрачност: 0;
показалец-събития: няма;
}
Обърнете внимание, че ще използваме преход, за да накараме падащото меню да изчезне (анимира), вместо просто да се отваря, както в първата демонстрация.
Някои стилове за връзки и икони:
Wrapper-dropdown-2 .dropdown li a (
дисплей: блок;
текст-декорация: няма;
цвят : #333 ;
border-left : 5px solid ;
подложка: 10px;
преход: всички 0,3 s леко изключване;
}
Wrapper-dropdown-2 .dropdown li:nth- child(1) a (
border-left-color: #00ACED;
}
Wrapper-dropdown-2 .dropdown li:nth- child(2) a (
цвят на лявата граница: #4183C4;
}
Wrapper-dropdown-2 .dropdown li:nth- child(3) a (
цвят на лявата граница: #3B5998;
}
Wrapper-dropdown-2 .dropdown li i (
margin-right: 5px;
цвят: наследяване;
вертикално подравняване: средно;
}
/* Състояние на задържане */
Wrapper-dropdown-2 .dropdown li:hover a (
цвят: сив;
}
А сега, нека се занимаваме със стиловете на списъка в разгънато състояние. Променете посоката на стрелката и падащият списък ще стане видим.
Wrapper-dropdown-2 .active :after (
border-width: 0 6px 6px 6px;
}
Wrapper-dropdown-2 .active .dropdown (
непрозрачност: 1;
показалец-събития: авто;
}
JavaScript
функция DropDown(el) (
това .dd = el;
this.initEvents();
}
DropDown.prototype = (
initEvents: функция() (
var obj = това;
Obj.dd .on ("щракване", функция (събитие) (
$(this).toggleClass("активен");
event.stopPropagation();
}
)
;
}
}
Пример 3
Нека да преминем към третия пример, в този случай избраният елемент ще замени стойността по подразбиране.
HTML маркиране
>Няма много повече код от преди. Да преминем към CSS!
CSS
Wrapper-dropdown-3 (
/* Размер и позиция */
позиция: роднина;
ширина: 200px;
марж:
0
Автоматичен;
подплата:
10px;
/* Стилове */
заден план:
#Ф ф ф;
граница-радиус :
7px;
граница:
1px твърдо rgba (0
,
0
,
0
,
0.15
)
;
кутия-сянка :
0
1px 1px rgba (50
,
50
,
50
,
0.1
)
;
курсор:
показалец;
контур:
нито един;
/* Настройки на шрифта */
тегло на шрифта:
удебелен;
цвят:
#8AA8BD;
}
Тук използваме граници, кутии сенки и заоблени ъгли. Имаме нужда и от малка стрелка:
.wrapper-dropdown-3:след{
съдържание:
""
;
ширина:
0
;
височина:
0
;
позиция:
абсолютен;
точно:
15px;
Горна част:
50%
;
margin-top:
-3px;
border-width:
6px 6px 0
6px;
граничен стил:
твърдо;
цвят на границата:
#8aa8bd прозрачен;
}
Тук всичко е както преди, така че няма да описваме кода в детайли.
.wrapper-dropdown-3 .падащо меню {
/* Размер и позиция */
позиция:
абсолютен;
Горна част:
140%
;
наляво:
0
;
точно:
0
;
/* Стилове */
заден план:
бяло;
граница-радиус :
наследяват;
граница:
1px твърдо rgba (0
,
0
,
0
,
0.17
)
;
кутия-сянка :
0
0
5px rgba (0
,
0
,
0
,
0.1
)
;
тегло на шрифта:
нормално;
преход :
всички 0,5 s лесно включване ;
стил на списък:
нито един;
/* Укриване */
непрозрачност :
0
;
показалец-събития :
нито един;
}
.wrapper-dropdown-3 .падащо менюли а {
дисплей:
блок;
подплата:
10px;
текст-украса:
нито един;
цвят:
#8aa8bd;
граница-отдолу:
1px твърдо #e6e8ea;
кутия-сянка :
вмъкване 0
1px 0
rgba (255
,
255
,
255
,
1
)
;
преход :
всички 0.3s леко изключване ;
}
.wrapper-dropdown-3 .падащо менюли аз {
плавам:
точно;
цвят:
наследяват;
}
.wrapper-dropdown-3 .падащо менюли :първи от типа {
граница-радиус :
7px 7px 0
0
;
}
.wrapper-dropdown-3 .падащо менюли :последен от типа {
граница-радиус :
0
0
7px 7px;
граница:
нито един;
}
/* Състояние на задържане */
.wrapper-dropdown-3 .падащо менюли :задръжтеа {
заден план:
#f3f8f8;
}
Всичко изглежда страхотно с изключение на малката стрелка в горния десен ъгъл на падащото меню. Тази стрелка е важна: без нея падащото меню изглежда като плаващо без никаква връзка с бутона.
.wrapper-dropdown-3 .падащо меню:след{
съдържание:
""
;
ширина:
0
;
височина:
0
;
позиция:
абсолютен;
отдолу:
100%
;
точно:
15px;
border-width:
0
6px 6px 6px;
граничен стил:
твърдо;
цвят на границата:
#Ф ф ф прозрачен;
}
.wrapper-dropdown-3 .падащо меню:преди{
съдържание:
""
;
ширина:
0
;
височина:
0
;
позиция:
абсолютен;
отдолу:
100%
;
точно:
13px;
border-width:
0
8px 8px 8px;
граничен стил:
твърдо;
цвят на границата:
rgba (0
,
0
,
0
,
0.1
)
прозрачен;
}
Използвахме два псевдо елемента за тази стрелка, защото искаме да създадем рамка около нея.
Сега стилове за разгънато състояние. Всичко е същото. Все пак, имайте предвид, че сме задали прехода към .падащо менюмалко по-дълго от обикновено (0,5 вместо 0,3 s). По този начин отварянето на менюто ще бъде много гладко.
.wrapper-dropdown-3.активен .падащо меню {
непрозрачност :
1
;
показалец-събития :
Автоматичен;
}
JavaScript
За да завършим тази демонстрация, трябва да добавим малко JavaScript, за да заменим стойността по подразбиране на избрания бутон. Видяхме как се прави това в първия пример, но тъй като не оставяме думата „Транспорт“ тук, JS е малко по-различен.
функция DropDown (ел )
{
това .dd =
ел ;
това .заместител =
това .dd.деца ("педя")
;
това .opts =
това .dd.намирам ("ul.dropdown >li")
;
това .вал =
""
;
това .индекс =
-1
;
this.initEvents ()
;
}
Падащо меню .прототип =
{
initEvents :
функция ()
{
var obj =
това ;
об .dd.На ("клик",
функция (събитие )
{
$(това )
.toggleClass ("активен")
;
върне невярно ;
}
)
;
об .opts.На ("клик",
функция ()
{
вар опт =
$(това )
;
обект .вал =
избирам. текст()
;
обект .индекс =
opt.index ()
;
обект .заместител.текст(об.вал)
;
}
)
;
}
,
getValue :
функция ()
{
върне this.val ;
}
,
getIndex :
функция ()
{
върнете this.index ;
}
}
Пример 4
Изглежда различно, нали? Тук ще създадем списък със задължителни неща, които можете да отметнете и по този начин да зачеркнете. Като цяло нищо особено, но този пример е значително по-различен от предишните демонстрации.
HTML маркиране
клас="падащо меню">
>
Тук няма да има връзки или икони. За всеки елемент имаме два етикета: поле за отметка с етикет.
CSS
.wrapper-dropdown-4 {
/* Размер и позиция */
позиция:
роднина;
ширина:
270 пиксела;
марж:
0
Автоматичен;
подплата:
10px 10px 10px 30px;
/* Стилове */
заден план:
#Ф ф ф;
граница:
1px твърдо сребро;
курсор:
показалец;
контур:
нито един;
}
Използваме лява подложка, за да създадем достатъчно място за червените линии. Сега малката стрелка вдясно:
.wrapper-dropdown-4:след{
съдържание:
""
;
ширина:
0
;
височина:
0
;
позиция:
абсолютен;
точно:
10px;
Горна част:
50%
;
margin-top:
-3px;
border-width:
6px 6px 0
6px;
граничен стил:
твърдо;
цвят на границата:
#ffaa9f прозрачен;
}
Стиловете за падащия списък са същите като в предишните примери:
.wrapper-dropdown-4 .падащо меню {
/* Размер и позиция */
позиция:
абсолютен;
Горна част:
100%
;
margin-top:
1px;
/* граница на обвивката */
наляво:
-1px;
точно:
-1px;
/* Стилове */
заден план:
бяло;
граница:
1px твърдо сребро;
граница-отгоре:
нито един;
стил на списък:
нито един;
преход :
всички 0.3s леко изключване ;
/* Укриване */
непрозрачност :
0
;
показалец-събития :
нито един;
}
Трябва да зададем margin-top на 1px, защото трябва да го преместим малко надолу от границата на обвивката.
.wrapper-dropdown-4 .падащо менюли {
позиция:
роднина;
/* Активиране на абсолютно позициониране за квадратчета за отметка */
}
.wrapper-dropdown-4 .падащо менюли етикет {
дисплей:
блок;
подплата:
10px 10px 10px 30px;
/* Същата подложка като бутона */
граница-отдолу:
1px пунктиран #1ccfcf;
преход :
всички 0.3s леко изключване ;
}
.wrapper-dropdown-4 .падащо менюли :последен от типетикет {
граница:
нито един;
}
.wrapper-dropdown-4 .падащо меню li вход /* квадратчета за отметка */ {
позиция:
абсолютен;
дисплей:
блок;
точно:
10px;
Горна част:
50%
;
margin-top:
-8px;
}
/* Състояние на задържане */
.wrapper-dropdown-4 .падащо менюли :задръжтеетикет {
заден план:
#f0f0f0;
}
/* Отметнато състояние */
.wrapper-dropdown-4 .падащо меню li вход :
проверено ~ етикет {
цвят:
сиво ;
текст-украса:
линейно преминаване;
}
Квадратчетата за отметка са абсолютно позиционирани и поставени в средата вдясно на всеки ред, но тъй като са свързани с етикети, можете да щракнете навсякъде върху елемента, за да ги поставите отметка.
Когато квадратчето е отметнато, текстът става сив и има зачертано. Прост, но ефективен.
Имаме още две тънки червени линии отляво в малкия ни тефтер. Има два начина да направите това: един с псевдо елементи и един с градиенти. Нека разгледаме и двата варианта.
/* червени линии с псевдо-елементи */
.wrapper-dropdown-4 .падащо меню:преди,
.wrapper-dropdown-4:преди{
съдържание:
""
;
ширина:
4px;
височина:
100%
;
позиция:
абсолютен;
Горна част:
0
;
наляво:
15px;
граница:
1px твърдо #ffaa9f;
граница-отгоре:
нито един;
граница-отдолу:
нито един;
z-индекс:
2
;
}
/* Или: */
/* червени линии с градиент */
.wrapper-dropdown-4.падащо меню ,
.wrapper-dropdown-4 {
заден план:
линеен градиент (наляво,
бяло 5%
,
#ffaa9f 5%
,
#ffaa9f 5.3%
,
бяло 5.3%
,
бяло 6.5%
,
#ffaa9f 6.5%
,
#ffaa9f 6.8%
,
бяло 6.8%
)
;
}
.wrapper-dropdown-4 .падащо менюли :задръжтеетикет {
заден план:
линеен градиент (наляво,
#f0F0F0 5%
,
#ffaa9f 5%
,
#ffaa9f 5.3%
,
#f0F0F0 5.3%
,
#f0F0F0 6.5%
,
#ffaa9f 6.5%
,
#ffaa9f 6.8%
,
#f0F0F0 6.8%
)
;
}
И така, кой от тези методи е по-добър? Вероятно първият, защото ако искате да промените ефекта на курсора върху елементи от списъка, трябва да промените градиента, което е доста сложно. В допълнение, псевдоелементите се поддържат по-добре от браузърите (започвайки с IE8), за разлика от градиентите (не се поддържат до IE10).
Сега стилове за разгънато състояние. Тук няма нищо ново.
/* Активно състояние */
.wrapper-dropdown-4.активен:след{
border-width:
0
6px 6px 6px;
}
.wrapper-dropdown-4.активен .падащо меню {
непрозрачност :
1
;
показалец-събития :
Автоматичен;
}
JavaScript
функцияПадащо меню (ел )
{
това.дд =
ел ;
това.опции =
това.дд.намирам("ul.dropdown >li")
;
това.вал =
[
]
;
това.индекс =
[
]
;
това.initEvents()
;
}
Падащо меню. прототип =
{
initEvents :
функция()
{
варобект =
това;
об. дд.На("клик",
функция(събитие )
{
$(това)
.toggleClass("активен")
;
събитие. stopPropagation()
;
}
)
;
об. опции.деца("етикет")
.На("клик",
функция(събитие )
{
варизбирам =
$(това)
.родител()
,
chbox =
избирам. деца("вход")
,
вал =
chbox. вал()
,
idx =
избирам. индекс()
;
($.inArray(вал ,
обект вал)
!==
-
1
)
?
обект вал.снаждане( $.inArray(вал ,
обект вал)
,
1
)
:
обект вал.тласък(вал )
;
($.inArray( idx ,
обект индекс)
!==
-
1
)
?
обект индекс.снаждане( $.inArray( idx ,
обект индекс)
,
1
)
:
обект индекс.тласък( idx )
;
}
)
;
}
,
getValue :
функция()
{
връщане това.вал;
}
,
getIndex :
функция()
{
връщане това.индекс;
}
}
Пример 5
Нашият последен пример ще бъде подобен на падащото меню в някои административни панели. За да направим това, ще използваме анимация, когато го превключваме. Вместо да се появи/изчезне, той ще се плъзга нагоре и надолу.
HTML маркиране
клас="падащо меню">
>
CSS
.wrapper-dropdown-5 {
/* Размер и позиция */
позиция:
роднина;
ширина:
200 пиксела;
марж:
0
Автоматичен;
подплата:
12px 15px;
/* Стилове */
заден план:
#Ф ф ф;
граница-радиус :
5px;
кутия-сянка :
0
1px 0
rgba (0
,
0
,
0
,
0.2
)
;
курсор:
показалец;
контур:
нито един;
преход :
всички 0.3s леко изключване ;
}
.wrapper-dropdown-5:след{
/* Малка стрелка */
съдържание:
""
;
ширина:
0
;
височина:
0
;
позиция:
абсолютен;
Горна част:
50%
;
точно:
15px;
margin-top:
-3px;
border-width:
6px 6px 0
6px;
граничен стил:
твърдо;
цвят на границата:
#4cbeff прозрачен;
}
Това са основните стилове. Сега нека да преминем към падащия списък, който е малко по-различен от обичайния.
.wrapper-dropdown-5 .падащо меню {
/* Размер и позиция */
позиция:
абсолютен;
Горна част:
100%
;
наляво:
0
;
точно:
0
;
/* Стилове */
заден план:
#Ф ф ф;
граница-радиус :
0
0
5px 5px;
граница:
1px твърдо rgba (0
,
0
,
0
,
0.2
)
;
граница-отгоре:
нито един;
граница-отдолу:
нито един;
стил на списък:
нито един;
преход :
всички 0.3s леко изключване ;
/* Укриване */
максимална височина:
0
;
препълване:
скрит;
}
Този път не променихме непрозрачността на 0, за да скрием менюто. Задаваме max-height на 0 и overflow: hidden. Защо зададохте максимална височина, а не височина? Тъй като не знаем точната височина на разширения списък.
Прости стилове за елементи от списък.
.wrapper-dropdown-5 .падащо менюли {
подплата:
0
10px ;
}
.wrapper-dropdown-5 .падащо менюли а {
дисплей:
блок;
текст-украса:
нито един;
цвят:
#333
;
подплата:
10px 0
;
преход :
всички 0.3s леко изключване ;
граница-отдолу:
1px твърдо #e6e8ea;
}
.wrapper-dropdown-5 .падащо менюли :последен от типа {
граница:
нито един;
}
.wrapper-dropdown-5 .падащо менюли аз {
margin-right:
5px;
цвят:
наследяват;
вертикално подравняване:
средата;
}
/* Състояние на задържане */
.wrapper-dropdown-5 .падащо менюли :задръжтеа {
цвят:
#57a9d9;
}
И сега, в активно състояние:
/* Активно състояние */
.wrapper-dropdown-5.активен {
граница-радиус :
5px 5px 0
0
;
заден план:
#4cbeff;
кутия-сянка :
нито един;
граница-отдолу:
нито един;
цвят:
бяло;
}
.wrapper-dropdown-5.активен:след{
цвят на границата:
#82d1ff прозрачен;
}
.wrapper-dropdown-5.активен .падащо меню {
граница-отдолу:
1px твърдо rgba (0
,
0
,
0
,
0.2
)
;
максимална височина:
400 пиксела;
}
Когато падащото меню е отворено, променяме долните ъгли на бутона, цвета му, посоката на стрелката и цвета на стрелката и премахваме сянката и границите.
И за да покажем менюто, задаваме максималната височина на падащото меню на 400px. Можем да го зададем на 500px или 1000px, няма значение.
JavaScript
функцияПадащо меню (ел )
{
това.дд =
ел ;
това.initEvents()
;
}
Падащо меню. прототип =
{
initEvents :
функция()
{
варобект =
това;
об. дд.На("клик",
функция(събитие )
{
$(това)
.toggleClass("активен")
;
събитие. stopPropagation()
;
}
)
;
}
}
обратна съвместимост
Така че сега имаме 5 падащи менюта, които работят чудесно, но какво да кажем за по-старите браузъри?
Тези браузъри не разбират например свойството opacity.
Библиотеката Modernizr ще ни помогне с това. Казано направо, за тези, които не знаят, Modernizr е JavaScript библиотека, която излага поддържаните от HTML5 и CSS3 свойства на браузъра на потребителя.
Благодарение на това можем да "кажем" на браузъра, ако не поддържате *this* свойство, тогава направете следното. По-долу е даден пример за това как можем да управляваме стила за браузъри, които не поддържат определени CSS свойства:
/* Няма поддръжка за CSS3 */
.без непрозрачност .wrapper-dropdown-1.падащо меню ,
.no-pointerevents .wrapper-dropdown-1 .падащо меню {
дисплей:
нито един;
непрозрачност :
1
;
/* Ако се поддържа непрозрачност, но не се поддържат указателни събития */
показалец-събития :
Автоматичен;
/* Ако се поддържат указателни събития, но не се поддържат указателни събития */
}
.без непрозрачност .wrapper-dropdown-1.активен.падащо меню ,
.no-pointerevents .wrapper-dropdown-1.активен .падащо меню {
дисплей:
блок;
}
Ако браузърът не поддържа opacity или pointer-events, тогава се използва свойството display: block;. И така нататък.
Заключение.
Надявам се, че тази статия ви помогна да разберете как да създавате персонализирани падащи менюта. Както можете да видите, това е съвсем просто.
Демонстрация
Ако имате въпроси, препоръчваме да използвате нашия форум, за да получите отговор възможно най-бързо
Прост падащ списък в HTML е лесен за създаване с помощта на маркера select. Това е контейнерен таг; в него са вложени тагове за опции - те са тези, които дефинират елементите на списъка.
Има няколко опции за списъци, които могат да бъдат направени с помощта на маркера за избор: падащ списък (опциите се появяват след щракване върху главното поле или задържане на курсора на мишката върху него) и списък с множество възможности за избор - в който потребителят може да избере няколко елемента. Първите са по-често срещани, те са важен елемент от навигацията на съвременните сайтове. Може да се използва падащ списък с множество избори, например в каталози, където трябва да изберете няколко характеристики на даден продукт.
Можете да промените външния вид и свойствата на списъците, като използвате универсални и специални атрибути.
Изберете атрибути на етикета
1. Множество - задава множествен избор.
2. Размер - задава броя на видимите редове в списъка, тоест височината. И тук всичко зависи от това дали множественият атрибут присъства или не. Ако отговорът е „да“ и не посочите размер, тогава ако има множество, потребителят ще види всички възможни опции за избор, но ако липсва множество, тогава ще бъде показан само един ред и посетителят ще може да прочете останалите, когато той кликва върху иконата на асансьора от дясната страна. Ако размерът на височината е зададен и е по-малък от броя на опциите, тогава вдясно ще се появи лента за превъртане.
3. Име - име. Падащият списък може и без него, но може да е необходимо да взаимодействате с програмата за манипулиране на сървъра. По правило името все още е посочено.
Тагът select няма задължителни атрибути, за разлика от тага option.
Вложени атрибути на таг за опции
Що се отнася до ширината на списъка, тя е зададена по подразбиране на дължината на най-широкия текст в списъка. Разбира се, ширината може да се променя с помощта на HTML стилове.
Падащ списък по други начини
Може да се направи с помощта на CSS, например ще се появи списък, когато задържите курсора на мишката върху елемент от страницата. Отлични възможности за създаване на списъци се предоставят от JavaScript, който е опростен от библиотеката Jquery. Падащ списък, свързан с тази библиотека, може да бъде много сложен, например каскаден. Тоест, когато изберете елемент в един списък, се появява следният списък, например има елемент от менюто „Дамско облекло“ (когато задържите курсора на мишката върху него, тогава когато изберете един от типовете, например „Връхни дрехи“ ”, отпада списък с елементи: якета, паркове, палта, къси палта, кожени палта и др.
Повърхностно изброихме основните начини, по които можете да създадете падащ списък. Разбира се, в JavaScript има много нюанси, които ви позволяват да промените функционалността и външния вид на списъците.
Често начинаещите се сблъскват с проблема с проектирането на падащ списък. Точно както с оригинала изберетене можеш да направиш нищо специално. Тогава то идва на помощ jQuery, и тогава можете да правите почти всичко.
Ами ако ви кажа, че е възможен и стандартен? HTMLНе е лошо да проектирате падащ списък по изчистен начин CSS?
Падащ списък в HTML
Цветът на фона и текста може да се променя и това се прави много лесно.
IN педядобавихме 2 класа, един основен, който ще съдържа всички основни стилове “ персонализирано падащо меню“, а вторият е голям, което ще определи размера падащ списък. Можем да подготвим да речем 3 размера предварително, големи, средни, малки, определени в стилове размер на шрифта. И не се притеснявайте в бъдеще. Можете да пропуснете това, всичко зависи от вашия дизайн на сайта.
Тяло ( фон: #2a2a2b; цвят: #fff; подравняване на текст: център; семейство шрифтове: Arial, Helvetica; ) .big (размер на шрифта: 1.2em; ) /* Персонализирано падащо меню */ .custom-dropdown ( позиция : относителен; дисплей: вграден блок; вертикално подравняване: по средата; поле: 10px; /* само демонстрация */) .custom-dropdown select ( курсор:показател; цвят на фона: #2980b9; цвят: #fff; шрифт- размер: наследяване; padding: .5em; padding-right: 2.5em; border: 0; margin: 0; border-radius: 3px; text-indent: 0.01px; text-overflow: ""; -webkit-appearance: бутон ; /* скриване на стрелката по подразбиране в chrome OSX */) .custom-dropdown::before, .custom-dropdown::after ( съдържание: ""; позиция: абсолютна; pointer-events: няма;) .custom-dropdown:: след ( /* Персонализирана падаща стрелка */ съдържание: "\25BC"; височина: 1em; размер на шрифта: .625em; височина на реда: 1; дясно: 1.2em; горе: 50%; margin-top: -.5em ; ) .custom-dropdown::before ( /* Покриване на персонализирана падаща стрелка */ width: 2em; дясно: 0; горе: 0; долу: 0; border-radius: 0 3px 3px 0; ) .custom-dropdown select ( цвят: rgba(0,0,0,.3); ) .custom-dropdown select::after (цвят: rgba(0,0,0,.1); ) .custom-dropdown::before (фонов цвят: rgba(0,0,0,.15); ) .custom-dropdown::after ( цвят: rgba(0,0,0,.4); )
Ако не искате да се занимавате и да изучавате стилове, просто го добавете към вашия сайт и променете цвета, за да съответства на дизайна на вашия сайт. Тогава просто сте в стил " .custom-dropdown select” трябва да промените стойностите Цвят на фонаИ цвят