Правильное подменю с использованием только HTML+CSS
Я пытаюсь написать простое меню HTML+CSS без какого-либо абсолютного позиционирования или JS. Моя проблема связана с подменю, где он либо расширяет текущий выбранный элемент, либо смещает его:
HTML-это просто:
<ul>
<li>Item 1</li>
<li>Folder 1
<ul>
<li>Item 2</li>
</ul>
</li>
<li>Item 3</li>
</ul>
И так же CSS:
#menu, #menu ul { border-style: solid; border-width: 0px; border-top-width: 1px; float: left; list-style: none; margin: 0px; padding: 0px; width: 180px; } #menu li ul { background-color: cyan; display: none; position: relative; right: -168px; width: auto; } #menu li:hover ul { display: block; } #menu li { border-style: solid; border-width: 1px; border-top-width: 0px; padding: 10px; } #menu li:hover { background-color: lightgrey; font-weight: bold; }
Я думал, что подменю может повлиять на макет только после того, как его переместят, что, похоже , здесь не так. Я немного растерян.
html css user-interfaceПоделиться Источник moatPylon 09 августа 2013 в 19:25
2 ответа
- HTML / CSS подменю
Я пробовал довольно много руководств по тому, как заставить подменю работать. Некоторые из них включают JS. Теперь я пытаюсь использовать подход just css, но я как бы застрял на том, чтобы заставить подменю работать на меня. Мой код находится на fiddle здесь: http://jsfiddle.net/PLb5K / Чтобы…
- Правильное открытие подменю в jQuery
Я несколько новичок в jQuery, и я пытаюсь создать мобильное меню с подменю, которые открываются на событии click. Моя проблема в том, что: Есть еще элементы с классом tile, которые имеют подменю, и, очевидно, я хочу отобразить только подменю того, на который я действительно нажал (не все из них,…
2
Используя этот тип шаблона меню, вы должны использовать
в Родительском LI
подменю и position:absolute
в дочернем меню UL
. Позволяет дочернему элементу появляться вне потока компоновки относительно своего родителя.
Это также хорошая практика, чтобы поместить все непозиционные стили на A
-тег внутри каждого LI
и использовать display:block
. Без него вам было бы трудно стилизовать текст на «Folder 1».
Простой пример: http://jsfiddle.net/Diodeus/jejNy/127/
Поделиться Diodeus — James MacFarlane
1
Используйте position:absolute
на ul и position:relative
на LI:
HTML:
<ul>
<li>Item 1</li>
<li>Folder 1
<ul>
<li>Item 2</li>
</ul>
</li>
<li>Item 3</li>
</ul>
CSS:
#menu, #menu ul { border-style: solid; border-width: 0px; border-top-width: 1px; float: left; list-style: none; margin: 0px; padding: 0px; width: 180px; } #menu li ul { background-color: cyan; display: none; position: absolute; top:-1px; left: 178px; } #menu li:hover ul { display: block; } #menu li { position:relative; border-style: solid; border-width: 1px; border-top-width: 0px; padding: 10px; } #menu li:hover { background-color: lightgrey; font-weight: bold; }
Проверьте это CodePen
Поделиться Lost Left Stack 09 августа 2013 в 20:11
Похожие вопросы:
Можно ли выбрать подменю только с помощью клавиши [Tab]? (только css)
Можно ли выбрать (активировать) подменю в меню ul/ol-styled только с помощью клавиши [Tab], чтобы подменю было видно? Я попробовал использовать псевдокласс: focus ul li a:focus + ul li a .
CSS селектор только для элементов в подменю
У меня есть это меню со скользящим вниз подменю: <ul class=sf-menu> <li class=menu-item current-menu-item> <a> whatever </a> <ul class=sub-menu> <li class=menu-item…
Подменю с чистыми html и css исчезает
Я пытаюсь сделать выпадающее меню с чистыми html и css, но подменю исчезают, когда курсор покидает родительский li, что мешает мне нажать на подменю. Вот ссылка на тестовый сайт, текст ссылки Я был…
HTML / CSS подменю
Я пробовал довольно много руководств по тому, как заставить подменю работать. Некоторые из них включают JS. Теперь я пытаюсь использовать подход just css, но я как бы застрял на том, чтобы заставить…
Правильное открытие подменю в jQuery
Я несколько новичок в jQuery, и я пытаюсь создать мобильное меню с подменю, которые открываются на событии click. Моя проблема в том, что: Есть еще элементы с классом tile, которые имеют подменю, и,. ..
горизонтальное выпадающее меню с горизонтальным подменю
как добавить SubMenu в вертикальное подменю с помощью html и css
Я разрабатываю приложение, которое имеет вертикальное подменю. Я хочу добавить подменю в уже существующее вертикальное подменю как добавить подменю в вертикальное подменю с помощью HTML и CSS?
Выпадающее меню с подменю CSS HTML
Я пытаюсь создать выпадающее меню с подменю, которое выравнивается с родительскими элементами в HTML/CSS,, но у меня возникли проблемы с правильным выравниванием. Прямо сейчас подменю просто…
Установите CSS только задержку исчезновения меню для подменю
Я пытаюсь заставить пункты подменю исчезнуть через определенное время, используя только CSS. К сожалению, если у меня есть более одного подменю и я навожу курсор на следующее подменю, то другое еще…
HTML CSS и jquery: меню с горизонтальным подменю
Я работаю над этим HTMl, CSS и, возможно, над некоторыми javascript. Я пытаюсь создать меню с подменю, поэтому, когда я навожу курсор на свое меню, я хочу, чтобы подменю отображалось ниже с…
Подменю на CSS
Вы здесь: Главная — CSS — CSS Основы — Подменю на CSS
Давно хотел написать статью о том, как сделать подменю на CSS. Многие делают его на JQuery и получается достаточно неплохо, однако, весь базовый принцип создания подменю на CSS я изложу здесь. А уже дальше, отталкиваясь от этой базы, можно совершенствовать подменю дальше.
Привожу сразу CSS-код:
* html ul li {
float: left;
}
* html ul li a {
height: 1%;
}
ul {
border-bottom: 1px solid #000;
list-style: none;
margin: 0;
padding: 0;
width: 100px;
}
ul li {
position: relative;
}
ul li a {
display: block;
border: 1px solid #000;
border-bottom: 1px;
padding: 5px;
text-decoration: none;
}
li ul {
display: none;
left: 99px;
position: absolute;
top: 0;
}
li:hover ul {
display: block;
}
Самое главное здесь — это селектор «li:hover ul«. Фактически, он и показывает содержимое меню. По умолчанию, оно «
Привожу и HTML-код:
<ul>
<li>
<a href="#">Главная</a>
</li>
<li>
<a href="#">Меню 1</a>
<ul>
<li>
<a href="#">Подменю 1</a>
</li>
<li>
<a href="#">Подменю 2</a>
</li>
<li>
<a href="#">Подменю 3</a>
</li>
</ul>
</li>
<li>
<a href="#">Меню 2</a>
<ul>
<li>
<a href="#">Подменю4</a>
</li>
<li>
<a href="#">Подменю 5</a>
</li>
<li>
<a href="#">Подменю 6</a>
</li>
<li>
<a href="#">Подменю7</a>
</li>
<li>
<a href="#">Подменю 8</a>
</li>
</ul>
</li>
</ul>
Если внимательно вдуматься в эту структуру, то становится всё очень понятно. Тег ul — создаёт меню. Если ul находится внутри другого ul, то это уже подменю. А тег li отвечает за конкретный пункт меню.
Разумеется, меню самое наипростейшее, как с точки зрения логики и структуры, так и с точки зрения дизайна. Разумеется, можно с помощью JQuery сделать плавное раскрытие. Можно также изменить дизайн, но весь принцип останется тем же, что и в этом подменю, написанном на CSS и HTML.
- Создано 22.06.2011 14:18:07
- Михаил Русаков
Копирование материалов разрешается только с указанием автора (Михаил Русаков) и индексируемой прямой ссылкой на сайт (http://myrusakov.ru)!
Добавляйтесь ко мне в друзья ВКонтакте: http://vk.com/myrusakov.
Если Вы хотите дать оценку мне и моей работе, то напишите её в моей группе: http://vk.com/rusakovmy.
Если Вы не хотите пропустить новые материалы на сайте,
то Вы можете подписаться на обновления: Подписаться на обновления
Если у Вас остались какие-либо вопросы, либо у Вас есть желание высказаться по поводу этой статьи, то Вы можете оставить свой комментарий внизу страницы.
Порекомендуйте эту статью друзьям:
Если Вам понравился сайт, то разместите ссылку на него (у себя на сайте, на форуме, в контакте):
-
Кнопка:
<a href=»https://myrusakov.ru» target=»_blank»><img src=»https://myrusakov.ru/images/button.gif» alt=»Как создать свой сайт» /></a>Она выглядит вот так:
-
Текстовая ссылка:
<a href=»https://myrusakov.ru» target=»_blank»>Как создать свой сайт</a>Она выглядит вот так: Как создать свой сайт
- BB-код ссылки для форумов (например, можете поставить её в подписи):
[URL=»https://myrusakov. ru»]Как создать свой сайт[/URL]
Подменю В Css/Html
У меня есть подменю, которое расширяется из объекта типа навигационного меню, когда я навис над ним. Прямо сейчас, мое главное навигационное меню выглядит так…
<div id= "navbar">
<ul>
<li><a href= "#" class= "navlink" id= "first"> First
<div class= "firstsubmenu">
<ul>
<li> <a href= "#"> First sub menu option </li>
<li> <a href= "#"> Second sub menu option </li>
etc...
</ul>
</div></a></li>
<li><a href= "#" class= "navlink"> Second
<div class= "secondsubmenu">
<ul>
..and so on
</ul>
</div>
Прямо сейчас, мой css выглядит
ul
{
list-style-type:none;
margin:0;
padding:0;
overflow:hidden;
}
li
{
float:left;
}
. navlink:link
{
display:block;
width:120px;
text-align:center;
padding:10px;
text-decoration:none;
color:#FFFFFF;
}
.navlink:hover
{
background-color:#ADD8E6;
color:#FFFFFF;
}
.navlink:visited
{
background-color:#ADD8E6;
color:#FFFFFF;
}
Прежде чем я попытался сделать каждый элемент в подменю кликабельной ссылкой, все получилось отлично. IE: firstsubmenu проявился отлично. Это css
.firstsubmenu
{
display : none;
position : absolute;
left : 75px;
top : 32px ;
background-color : red;
width : 930px;
height : 25px;
z-index : 10;
}
Но теперь, когда я добавил ссылки (сделал каждый элемент списка внутри блока), firstsubmenu больше не появляется. CSS для каждой ссылки выглядел примерно так:
.firstsubmenulink
{
display:block;
width:120px;
text-align:center;
padding:10px;
text-decoration:none;
color:#FFFFFF;
}
Но, как я уже сказал, подменю больше не появляется. Я понимаю, что это немного длинный пост, но любой совет будет замечательным.
Атрибут class | htmlbook.ru
Internet Explorer | Chrome | Opera | Safari | Firefox | Android | iOS |
4.0+ | 1.0+ | 3.5+ | 1.0+ | 1.0+ | 1.0+ | 1.0+ |
Описание
Задает стилевой класс, который позволяет связать определенный тег со стилевым оформлением. В значении допускается указывать сразу несколько классов, разделяя их между собой пробелом.
Синтаксис
class="имя"
Значения
Имена классов могут содержать в себе латинские буквы (A–Z, a–z), цифры (0–9), символ дефиса (-) и подчеркивания (_). Использование русских букв в классах недопустимо.
Значение по умолчанию
Нет.
Применяется к тегам
<a>, <abbr>, <acronym>, <address>, <applet>, <area>, <b>, <basefont>, <bdo><bgsound>, <big>, <blockquote>, <body>, <br>, <button>, <caption>, <center>, <cite>, <code>, <col>, <colgroup>, <dd>, <del>, <dfn>, <dir>, <div>, <dl>, <dt>, <em>, <embed>, <fieldset>, <font>, <form>, <frame>, <h2>, <h3>, <h4>, <h5>, <h5>, <h6>, <hr>, <i>, <iframe>, <img>, <input>, <ins>, <isindex>, <kbd>, <label>, <legend>, <li>, <link>, <map>, <marquee>, <menu>, <nobr>, <object>, <ol>, <option>, <p>, <plaintext>, <pre>, <q>, <s>, <samp>, <select>, <small>, <span>, <strike>, <strong>, <sub>, <sup>, <table>, <tbody>, <td>, <textarea>, <tfoot>, <th>, <thead>, <tr>, <tt>, <u>, <ul>, <var>, <wbr>, <xmp>
Пример
HTML5IECrOpSaFx
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Атрибут class</title>
<style>
p { /* Обычный абзац */
text-align: justify; /* Выравнивание текста по ширине */
}
p. cite { /* Абзац с классом cite */
color: navy; /* Синий цвет текста */
margin-left: 20px; /* Отступ слева */
border-left: 1px solid navy; /* Граница слева от текста */
padding-left: 15px; /* Расстояние от линии до текста */
}
</style>
</head>
<body>
<p>Для искусственного освещения помещения применяются люминесцентные лампы.
Они отличаются высокой световой отдачей, продолжительным сроком службы,
малой яркостью светящейся поверхности, близким к естественному спектральным
составом излучаемого света, что обеспечивает хорошую цветопередачу.</p>
<p>Для исключения засветки экрана дисплея световыми потоками
оконные проемы снабжены светорассеивающими шторами.</p>
</body>
</html>
html — CSS выровнять подменю по родительскому элементу
У меня есть следующий фрагмент HTML для строки меню:
#menubar {
display: block;
background: #FFFFFF;
}
#menubar ul li a. menubutton {
display: none;
/* dont show burger symbol (mobile menu symbol) */
}
#menubar ul {
display: block;
width: 2em;
/* restrict burger symbol */
padding: 0.9em;
}
#menubar ul li {
display: inline;
}
#menubar ul li ul li {
display: none;
}
/*Header*/
header {
display: block;
background: #2F2C2C;
text-align: center;
}
/* Navigation */
nav {
display: block;
height: 2.5em;
background: #FFFFFF;
text-align: center;
}
nav ul {
display: block;
}
nav ul li {
display: inline;
margin: 0em 0.188em 0em 0.188em;
}
nav ul li a {
color: #454040;
font-size: 1.125em;
line-height: 2.5em;
padding: 0.563em 0.938em 0.375em 0.983em;
transition: background 0.2s;
/* nice transition effect */
-webkit-transition: background 0. 2s;
}
nav ul li a:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}
nav ul li a.active {
border-bottom: 0.188em solid #E7590B;
}
nav ul li ul {
display: none;
}
nav ul li:hover ul.submenu {
text-align: center;
position: fixed;
display: block;
margin-left: 40%;
}
nav ul li ul li:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}
<nav>
<ul>
<li><a href="./index.html">Start</a></li>
<li><a href="./meetings.html">Termine</a></li>
<li><a href="./organisation.html">Organisation</a>
<ul>
<li><a href="./organisation/page1.html">Page1</a></li>
<li><a href="./organisation/page2.html">Page2</a></li>
<li><a href=". /organisation/page3.html">Page3</a></li>
</ul>
</li>
<li><a href="./about.html">About</a>
<ul>
<li><a href="./about/page1.html">Page1</a></li>
<li><a href="./about/page2.html">Page2</a></li>
<li><a href="./about/page3.html">Page3</a></li>
</ul>
</li>
<li><a href="./contact.html">Contact</a></li>
</ul>
</nav>
ul #submenu
отображаются при наведении курсора.
Мне удалось центрировать подменю на всей странице, используя left: 40%
в правиле nav ul li:hover ul.submenu
. Однако я хочу расположить подменю по центру их родительских компонентов, поэтому, например, если взять организацию, я хотел бы, чтобы подменю страницы 2 было сосредоточено с полем родительской организации и примерно так же.
Как я могу добиться центрирования относительно родительского компонента?
0
ItFreak 8 Авг 2018 в 14:01
2 ответа
Лучший ответ
Добавьте position: relative
в пункты меню, у которых есть подменю (например, в селектор nav ul li
), и измените position: fixed
на position: absolute
для подменю, т. Е. Селектора nav ul li:hover ul.submenu
.
Это делает положение подменю «относительным» к их родительскому элементу (элемент главного меню), поэтому вам следует соответствующим образом настроить параметры left
и top
в правиле CSS подменю.
#menubar {
display: block;
background: #FFFFFF;
}
#menubar ul li a.menubutton {
display: none;
/* dont show burger symbol (mobile menu symbol) */
}
#menubar ul {
display: block;
width: 2em;
/* restrict burger symbol */
padding: 0. 9em;
}
#menubar ul li {
display: inline;
}
#menubar ul li ul li {
display: none;
}
/*Header*/
header {
display: block;
background: #2F2C2C;
text-align: center;
}
/* Navigation */
nav {
display: block;
height: 2.5em;
background: #FFFFFF;
text-align: center;
}
nav ul {
display: block;
}
nav ul li {
display: inline;
margin: 0em 0.188em 0em 0.188em;
position: relative;
}
nav ul li a {
color: #454040;
font-size: 1.125em;
line-height: 2.5em;
padding: 0.563em 0.938em 0.375em 0.983em;
transition: background 0.2s;
/* nice transition effect */
-webkit-transition: background 0.2s;
}
nav ul li a:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}
nav ul li a. active {
border-bottom: 0.188em solid #E7590B;
}
nav ul li ul {
display: none;
}
nav ul li:hover ul.submenu {
text-align: center;
position: absolute;
display: block;
left: -50%;
}
nav ul li ul li:hover {
background: #DBD9D8;
border-bottom: 0.188em solid #FF0000;
}
<nav>
<ul>
<li><a href="./index.html">Start</a></li>
<li><a href="./meetings.html">Termine</a></li>
<li><a href="./organisation.html">Organisation</a>
<ul>
<li><a href="./organisation/page1.html">Page1</a></li>
<li><a href="./organisation/page2.html">Page2</a></li>
<li><a href="./organisation/page3.html">Page3</a></li>
</ul>
</li>
<li><a href=". /about.html">About</a>
<ul>
<li><a href="./about/page1.html">Page1</a></li>
<li><a href="./about/page2.html">Page2</a></li>
<li><a href="./about/page3.html">Page3</a></li>
</ul>
</li>
<li><a href="./contact.html">Contact</a></li>
</ul>
</nav>
1
Johannes 8 Авг 2018 в 11:22
Привет, я только что прочитал твой вопрос. Поэтому вам придется реализовать это с помощью ваших собственных имен классов. Но вот как центрировать дочерние элементы внутри их соответствующих родителей.
.child-class{
width:max-content;
margin:0px auto;
}
Чтобы это работало, у вас должна быть ширина. Это автоматически выровняет ваш div или любой другой тег, который вы используете.
Я рекомендую этот метод, а не относительное положение, потому что что действительно удобно в использовании этого метода, так это то, что он равномерно выравнивает ваш контент по центру, даже если разные теги li имеют разную ширину. Что удобно для мобильной оптимизации. 🙂
0
Garth Baker 8 Авг 2018 в 11:42
CSS: Выпадающее меню с задержкой
Обычное выпадающие css-меню сделанное с помощью переключения display:none;
/display:block;
повешенного на hover обладает двумя раздражающими недостатками:
— подменю показывается мгновенно, как только курсор мыши попал в область родительского пункта
— подменю мгновенно пропадает, как только курсор вышел за пределы подменю
Пример такого меню:
<ul>
<li>
<a href="#">item</a>
<ul>
<li>subitem 1</li>
<li>subitem 2</li>
</ul>
</li>
</ul>
<style>
. menu {
margin: 0;
padding: 0;
list-style: none;
}
.menu .menu-item {
float: left;
margin: 0 1px 0 0;
padding: 0;
background: #E1E1E1;
}
.menu .menu-item a {
display: block;
padding: 5px 10px;
}
.menu .submenu {
display: none; /* По умолчанию скрываем подменю */
position: absolute;
margin: 0;
padding: 0;
list-style: none;
background: #E1E1E1;
}
.menu .menu-item:hover .submenu {
display: block; /* Показываем подменю при ховере */
}
.menu .submenu-item {
margin: 0;
padding: 5px 10px;
}
</style>
Демо
Чтобы создать небольшую задержку перед показом и скрытием подменю раньше приходилось использовать javascript, но теперь наткнулся на css вариант.
Весь фокус в свойстве transition
, а точнее его подсвойстве transition-delay
, которое позволяет добавить задержку перед показом анимации:
.menu .submenu {
opacity: 0; /* По умолчанию скрываем подменю */
visibility: hidden;
transition-property: opacity, visibility; /* Важно чтобы transition применялось к обоим свойствам */
transition-duration: 0. 2s; /* Добавляем анимацию 0.3 сек. */
transition-delay: 0.15s; /* Добавляем задержку в 0.15 сек. */
}
.menu .menu-item:hover .submenu {
opacity: 1; /* Показываем подменю при ховере */
visibility: visible;
}
Демо
Поскольку анимацию нельзя вешать на display
, то для скрытия подменю приходится использовать связку opacity:0; visibility:hidden;
.
Menu, Компоненты Webix Docs
Справочник по API
Обзор
Компонент Menu или выпадающее меню, наследуется от list и позволяет пользователю выбирать нужный элемент из списка сгруппированных элементов (подменю). Каждый элемент подменю может содержать в себе свое подменю.
Динамическое Submenu или подменю, отображается при наведении курсора на соответствующий элемент главного меню (вызов события onMouseOver) и скрывается, если убрать курсор (onMouseOut).
Инициализация
Объект Menu хранится в свойстве data.
webix.ui({
view:"menu",
id:"my_menu",
subMenuPos:"right",
layout:"y",
data:[ // данные меню
{ value:"Translate...", submenu:["English", "Slavic...", "German"]},
{ $template:"Separator" },
{ value:"Post...", submenu:[ "Facebook", "Google+", "Twitter" ]}
],
type:{
subsign:true,
height:50
}
});
Related sample: Basic Menu
Основные свойства:
- subMenuPos (string) — выравнивает выпадающее подменю относительно верхнего уровня;
- submenuConfig (object) — задает общие настройки для всех подменю, независимо от их уровня вложенности;
- layout (string) — задает ориентацию элементов меню: x (по умолчанию) для горизонтального меню, y для вертикального меню;
- $template (string) — флаг, задающий разделитель между группами элементов меню. Возможные значения:
- «Separator» — серая разделительная линия;
- «Spacer» — пустой элемент с белым фоном, не реагирующий на движения курсора.
- type — объект с настройками отображения элементов:
- subsign (boolean) — задает массив элементов подменю;
- height, width (number) высота и ширина каждого элемента;
- openAction (string) — изменяет способ вызова подменю. С установленным значением
"click"
, сворачивание и разворачивание элементов подменю будет производиться по клику; - template — (string, function) — определяет вид и содержимое элементов. Подробнее;
- data (object) — желаемый формат встроенных данных. Подробнее;
- autowidth — (boolean) подстраивает ширину элементов выпадающего меню под ширину их содержимого, по умолчанию
false
.
Related sample: Showing Menu on Mouse Click (dropping down on hover is disabled)
Работа с элементами Menu
Настройка элементов Menu
Элемент меню (подменю) может быть текстовым элементом и содержать в себе еще одно подменю или любой компонент Webix, заданный по его ID.
Элементы Menu хранятся в массиве data отдельными объектами. Элементы Submenu хранятся в массиве submenu или data. Каждый элемент меню может содержать следующие атрибуты:
- id — ID элемента. Если не задано, элементу будет присвоен автоматически сгенерированный ID;
- value — задает текстовое значение для элемента;
- href — задает ссылку для элемента;
- config — определяет конфигурацию всплывающего окна подменю (при наличии). Эти настройки переопределяют те, что заданы в submenuConfig;
- badge — устанавливает оранжевый информационный значок, сообщающий о количестве новых действий для этого пункта меню (например количество сообщений).
Самый простой способ задать элементы меню — это передать их как массив:
{ view:"menu", data:["Google", "Facebook", "Twitter"] }
Или массив объектов:
{ view:"menu", data:[
{ id:1, value:"Google"},
{ id:2, value:"Facebook"},
{ id:3, value:"Twitter"}
]}
Ссылки в элементах Menu
В любой элемент меню или подменю можно добавить ссылку с помощью параметров href и target (необязательный параметр):
view:"menu",
data:[
{ id:"1", value:"Imitation of Spenser", href: "#verse1", target:"_blank"},
{ id:"2", value:"The Human Seasons", href: "#verse2"}
]
Если значение target не задано, он будет установлено как пустая строка.
Related sample: Menu hrefs
Информационные значки
Значки отображают числовую информацию относящуюся к элементу меню, например количество сообщений:
view:"menu",
data:[
{ id:"1",value:"Translations", badge:"1"},
{ id:"2",value:"Posts", badge:"12" },
{ id:"3",value:"Info", badge:"24" }
]
Related sample: Menu with Badges
Разделители в Menu
Чтобы отделить одну группу элементов от другой в вертикальном меню, используется свойство $template. Возможные значения:
- «Spacer» — добавляет горизонтальный промежуток между элементами меню;
- «Separator» — добавляет горизонтальную серую линию между элементами меню.
Промежуток между элементами меню
view:"menu",
layout:"y",
data:[
{ id:"1", value:"Translations", icon:"qrcode", badge:20 },
{ id:"2", value:"Posts", icon:"file-word-o", badge:3 },
{ $template:"Spacer" },
{ id:"3", value:"Help", icon:"support"},
]
Related sample: Vertical Menu
Линия между элементами меню
view:"menu",
layout:"y",
data:[
{ value:"Translate..." },
{ value:"Post...", submenu:[ "Facebook", "Google+", "Twitter" ]},
{ $template:"Separator" },
{ value:"Info" }
]
Related sample: Basic Menu
Элементы подменю могут быть заданы массивом значений:
{ id:"2",value:"Translate. ..", submenu:[ "English", "Slavic", "German" ]},
Или массивом объектов:
{ id: "1.2", value:"Slavic...", submenu:[
{id: "1.2.1", value:"Belarusian"},
{id: "1.2.2", value:"Russian"},
{id: "1.2.3", value:"Ukrainian"}
]}
Любое вложенное подменю (попап) можно настройить отдельно, с помощью параметра config его родителя:
view:"menu",
submenuConfig:{
width:400
},
data:[
{ id:"2",value:"Custom...",
config:{
width:500,
on:{
onItemClick:function(id){
webix.message("Submenu click: "+id);
}
}
},
submenu:[ "Facebook", "Google+", "Twitter" ]
}
]
Эта настройка переопределяет общие настройки для подменю, заданные в submenuConfig.
Related sample: Menu: Configuring Submenus
Автоматическая настройка ширины подменю
Чтобы автоматически изменять ширину Submenu в соответствии с высотой содержимого, используется свойство autowidth со значением true
в конфигурации Menu:
webix. ui({
container:"areaA",
view:"menu",
autowidth:true,
data:[
{ id:"1",value:"Short...",
submenu:[ "FB", "G+", "TW" ]},
{ id:"2",value:"Medium...",
submenu:[ "Facebook", "Google+", "Twitter" ]},
...
]
});
Related sample: Autowidth for Submenus
Использование других компонентов как элементов Menu
Параметр submenu может также указывать на предварительно инициализированные popup, submenu, context или window:
webix.ui({
id:"details1",
view:"context", width:300, height:200,
body:{ content:"html1" }
});
webix.ui({
view:"menu",
data:[
{ value:"HTML 4", submenu:"details1" },
{ value:"HTML 5", submenu:"details2" }
]
});
Related sample: HTML Elements as Menu Items
Таким же образом вы можете инициализировать компонент Webix Submenu отдельно и затем сослаться на него внутри свойства submenu в конфигурации Menu:
webix. ui({
view:"submenu", id:"test", data:[
{ id:"1.1", value:"English"},
{ id:"1.3", value:"German"}
]
});
webix.ui({
view:"menu",
data:[
{ id:"1", value:"Translate...", submenu:"test"},
{ id:"2", value:"Post..."
]
});
Каждый элемент подменю может содержать свой компонент Submenu.
MenuBar
MenuBar похож на обучный тулбар, самый быстрый способ создать панель Menu — это инициализировать меню и тулбар в соседних колонках:
webix.ui({
cols:[ menu, toolbar ]
});
Related sample: Menu in Toolbar
Скрыть или заблокировать элементы Menu
Скрыть элементы Menu
Чтобы скрыть или показать элемент меню, вы можете воспользоваться методами hideItem() и showItem() соответственно, указав ID нужных элементов в качестве параметров.
Событием провоцирующим выполнение функции может быть изменение состояния чекбокса в компоненте Webix Tree, заполненном теми же данными что и меню, при условии что ID элемента равен ID соответствующего элемента меню.
$$("tree1").attachEvent("onItemCheck",function(id,state){
if (state) // если флажок отмечен
$$("top_menu").hideItem(id);
else
$$("top_menu").showItem(id);
});
В результате только «неотмеченные» элементы меню будут отображены.
Related sample: Hiding Menu Items
Заблокировать элементы Menu
Чтобы заблокировать или разблокировать элемент меню, вы можете воспользоваться методами disableItem() и enableItem() соответственно, указав ID нужных элементов в качестве параметров. Событием провоцирующим выполнение функции может быть изменение состояния чекбокса, ID которого равно ID соответствующего элемента меню.
$$("tree1").attachEvent("onItemCheck",function(id,state){
if(state) // если флажок отмечен
$$("top_menu").disableItem(id);
else
$$("top_menu").enableItem(id);
});
Заблокировать элемент меню из JSON
Вы можете заблокировать определенный элемент меню прямо в конфигурации, указав disabled:true
в нужном объекте.
webix.ui({
view:"menu",
data:[
{ id:"1",value:"Translate...", submenu:[
{id: "1.1", value:"English"},
{ id: "1.2", value:"Slavic...", submenu:[
{id: "1.2.1", value:"Belarusian"},
{id: "1.2.2", value:"Russian", disabled:true },
{id: "1.2.3", value:"Ukrainian"}
]}
]}
]
});
Блокировка и разблокировка элементов реализуется с помощью классов CSS, поэтому элементы меню содержат темплейт для отображения активного и заблокированного состояния:
view:"menu",
template:function(obj){
if(obj.disabled)
return "<span>"+obj.value+"</span>";
return obj.value;
}
Related sample: Disabling Menu Items
Доступ ко всем элементам меню и подменю можно получить по их ID.
1 . Доступ к любому элементу можно получить с помощью метода getMenuItem(), который принимает ID элемента в качестве параметра и возвращает объект элемента:
// получает значение элемента меню по его ID
$$('menu1'). getMenuItem(id).value;
Related sample: Basic Menu
2 . В то же время элементы меню могут быть получены через объект подменю, возвращаемого методом getSubMenu() для элемента с указанным ID. Если для элемента не существует подменю — будет возвращен объект вызываемого компонента.
var menu = $$("menu1").getSubMenu(id);
var item = menu.getItem(id).value;
Related sample: HTML Elements as Menu Items
Оба метода могут быть использованы в любом из внутренних событий меню, например в событиях по клику:
- onMenuItemClick — вызывается при нажатии на все пункты меню, независимо от уровня иерархии. Игнорирует заблокированные элементы;
- onItemClick — вызывается по клику на любой элемент одного уровня. Срабатывает и для заблокированных элементов.
Обработчик «onMenuItemClick»
view:"menu",
data:[...],
on:{
onMenuItemClick:function(id){
webix. message("Click: "+this.getMenuItem(id).value);
}
}
Related sample: Basic Menu
Обработчик Submenu «onItemClick»
view:"menu",
data:[
{ id:"1",value:"Custom...",
config:{
width:250,
on: { onItemClick:function(id){
webix.message("Submenu click: "+id);
}}
},
submenu:{...}
}
]
Related sample: Configuring Submenus
Статьи по теме
НаверхКак создать подменю в подменю в HTML и CSS