Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.07.2019, 17:59
Интересующийся
Отправить личное сообщение для Трудяга Посмотреть профиль Найти все сообщения от Трудяга
 
Регистрация: 30.07.2019
Сообщений: 19

Реализовать примитивный дропдаун
Очень сложная для меня задача( может кто то объяснит как и что делать с этим)
Реализовать примитивный дропдаун. Изначально все dropdown-menu скрыты через класс .d-none. При клике на dropdown-item должен отображаться блок dropdown-menu который вложен именно в тот dropdown-item на котором произошел клик. При повторном клике на этот же dropdown-item блок dropdown-menu должен закрыться. При клике на любой другой dropdown-item уже открытый dropdown-menu должен закрываться а на тот который кликнули открываться.




<ul class="menu">
  <li class="dropdown-item">
    <span>Dropdown menu item</span>
    <div class="dropdown-menu d-none">
      <ul class="dropdown-list">
        <li>Dropdown item 1</li>
        <li>Dropdown item 2</li>
      </ul>
      <!-- / .dropdown-list -->
    </div>
    <!-- / .dropdown-menu -->
  </li>
  <!-- / .dropdown-item -->
  <li>
    <span>Menu item</span>
  </li>
  <!-- / li -->
  <li class="dropdown-item">
    <span>Dropdown menu item 2</span>
    <div class="dropdown-menu d-none">
      <ul class="dropdown-list">
        <li>Second Dropdown item 1</li>
        <li>Second Dropdown item 2</li>
      </ul>
      <!-- / .dropdown-list -->
    </div>
    <!-- / .dropdown-menu -->
  </li>
  <!-- / .dropdown-item -->
</ul>


.d-none {
  display: none;
}

.dropdown-item {
  cursor: pointer;
}

Последний раз редактировалось Трудяга, 31.07.2019 в 11:55.
Ответить с цитированием
  #2 (permalink)  
Старый 30.07.2019, 18:13
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Трудяга,
искать кастомизация селекта
https://javascript.ru/forum/jquery/7...tml#post484087
Ответить с цитированием
  #3 (permalink)  
Старый 30.07.2019, 20:49
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
искать кастомизация селекта
https://javascript.ru/forum/jquery/7...tml#post484087
Почти тристо строк и оно даже приблизительно не обладает тем функционалом, что есть у элемента <select>! рони, почему так? Дублировать код два раза... и к тому же оно плохо доступное!

Для этого есть HTML-элемент <select> к которому можно применять стили...
<style>
	select {
		display: inline-block;
		border: 2px solid #bbb;
		padding: 4px 22px 3px 5px;
		margin: 0;
		font: inherit;
		outline: none;
		line-height: 1.2;
		-webkit-appearance: none;
		border-radius: 6px;
		background: url('data:image/svg+xml,\
		<svg xmlns="http://www.w3.org/2000/svg" \
			width="10px" height="10px" viewBox="0 0 12 10" \
			stroke="%23bbb" stroke-width="1.3" stroke-linecap="round" \
			stroke-linejoin="round" fill="none"\
		>\
			<polyline points="2 4 5 7 8 4"></polyline>\
		</svg>') no-repeat right center / 20px 20px white;
	}

	select::-moz-focus-inner {
		border: 0;
	}

	select:focus {
		box-shadow: 0 0 3px 1px #ccc;
	}

	select:hover {
		background-color: #eee;
	}
</style>

<select>
    <option>Ширина ботинка</option>
    <option value="c">C</option>
    <option value="d">D</option>
    <option value="ee">EE</option>
</select>

<select>
    <option>Лезвие</option>
    <option value="11,5">11,5</option>
    <option value="12">12</option>
    <option value="12,5">12,5</option>
    <option value="13">13</option>
    <option value="13,5">13,5</option>
    <option value="14">14</option>
    <option value="14,5">14,5</option>
    <option value="15">15</option>
    <option value="15,5">15,5</option>
</select>


Сообщение от Трудяга
Очень сложная для меня задача( может кто то объяснит как и что делать с этим)
Вы можете удалить ненужные классы! Вот пример выпадающего меню... (также есть поддержка узких экранов и вложенности любого уровня!)

<nav tabindex="0">
	<ul>
		<li>
			<a href="#1">Dropdown menu item</a>
			<ul>
				<li><a href="#11">Dropdown item 1</a></li>
				<li><a href="#12">Dropdown item 2</a></li>
			</ul>
		</li>
		<li><a href="#2">Menu item</a></li>
		<li>
			<a href="#3">Dropdown menu item 2</a>
			<ul>
				<li><a href="#31">Second Dropdown item 1</a></li>
				<li><a href="#32">Second Dropdown item 2</a></li>
			</ul>
		</li>
	</ul>
</nav>

<style>

@import url("https://fonts.googleapis.com/css?family=Russo+One&subset=cyrillic");

nav {
	font-family: "Russo One", sans-serif;
}

nav li {
	position: relative;
	list-style: none;
}

nav ul {
	padding: 0;
	margin: 0;
	background: linear-gradient(45deg, #888, #aaa);
	text-shadow: 0 1px rgba(0, 0, 0, .5), 0 0 1px rgba(0, 0, 0, .7);
}

nav > ul {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;

}

nav li ul {
	display: none;
	position: absolute;
	margin: -5px 0 0 5px;
	box-shadow:
		0 .1em 1em rgba(0, 0, 0, 0.3),
		inset 0 0 1px rgba(255, 255, 255, 0.5)
	;
}

nav li > ul > li > ul {
	left: 100%;
	top: 0;
	margin: 5px 0 0 -5px;
}

nav ul {
	border-radius: 5px;
}

nav li:focus-within > ul {
	display: block;
	display: flow-root;
	z-index: 1;
}

nav li a, nav > ul:before {
	color: white;
	text-decoration: none;
	display: block;
	padding: 1em;
	border-radius: 5px;
	white-space: nowrap;
}

nav li a:focus {
	background: rgba(0, 0, 0, .5);
	color: white;
}

@media (max-width: 840px) {
	nav > ul:before {
		content: "☰";
	}

	nav > ul {
		flex-direction: column;
		display: inline-block;
	}

	nav:focus-within > ul {
		display: block;
	}

	nav li {
		flex: 1;
		display: none;
	}

	nav:focus-within li {
		display: block;
	}

	nav li ul,
	nav li > ul > li > ul {
		position: static;
		margin: 10px;
	}

	nav > ul:before,
	nav li a {
		white-space: normal;
		text-align: center;
	}
}
		
</style>


Структура меню однородная, вы без проблем можете переставлять пункты меню...

Последний раз редактировалось Malleys, 30.07.2019 в 21:08.
Ответить с цитированием
  #4 (permalink)  
Старый 30.07.2019, 23:07
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Malleys
Почти тристо строк и оно даже приблизительно не обладает тем функционалом, что есть у элемента <select>! рони, почему так? Дублировать код два раза... и к тому же оно плохо доступное!
не сомневаюсь, что вы предложили лучшее решение, могу только гадать, что не так с моим вариантом, что там дублировано, вероятно оно безнадёжно устарело, если будет время, напишите пожалуйста подробнее.
Ответить с цитированием
  #5 (permalink)  
Старый 31.07.2019, 12:15
Интересующийся
Отправить личное сообщение для Трудяга Посмотреть профиль Найти все сообщения от Трудяга
 
Регистрация: 30.07.2019
Сообщений: 19

Спасибо, но задача заключается в том что бы это реализовать с помощью JS
Ответить с цитированием
  #6 (permalink)  
Старый 31.07.2019, 12:23
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от Трудяга
Спасибо, но задача заключается в том что бы это реализовать с помощью JS
И что будет улучшено, если будет так? Разве оно не точно также будет работать?

Сообщение от рони
могу только гадать, что не так с моим вариантом
https://www.w3.org/TR/WCAG21/#operable
Сообщение от рони
что там дублировано
Вы элементы списка 2 раза повторяете, первый раз в <select>, который зачем-то скрываете, второй раз тоже самое, но только зачем-то при помощи <div>
Ответить с цитированием
  #7 (permalink)  
Старый 31.07.2019, 13:42
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Malleys,
спасибо ... одно понял вы хотите чтоб работало и от клавиатуры, про дублирование не понимаю. есть селект, хочется иметь такой же элемент, но более удобный и при этом сохранить изменение значения на селекте, что не так? для вас <select> удобно и красиво, для меня <ul>.
Ответить с цитированием
  #8 (permalink)  
Старый 31.07.2019, 16:16
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от рони
для вас <select> удобно и красиво, для меня <ul>
Для стилизации нужно использовать CSS.

Сообщение от рони
одно понял вы хотите чтоб работало и от клавиатуры
А где вы прочитали, что это я так хочу? https://www.w3.org/TR/WCAG21/ Это рекомендация, чтобы ваш список работал везде, и очевидным способом.

Что значит, для меня удобно? Вы используете элементы не по назначению...

Сообщение от https://www.w3.org/TR/html52/grouping-content.html#the-ul-element
The ul element represents a list of items, where the order of the items is not important — that is, where changing the order would not materially change the meaning of the document.
Это может быть список стран, где вы побывали, список продуктов, необходимый для приготовления блюда, роль menu позволяет описать список команд доступных для программы и т.д.

Сообщение от https://www.w3.org/TR/html52/sec-forms.html#the-select-element
The select element represents a control for selecting amongst a set of options.
А про роль listbox сказано: A widget that allows the user to select one or more items from a list of choices

Сообщение от рони
<select> удобно и красиво, для меня <ul>
Да хоть знак подчёркивания, для стилизации нужно использовать CSS.

Последний раз редактировалось Malleys, 31.07.2019 в 16:20.
Ответить с цитированием
  #9 (permalink)  
Старый 31.07.2019, 16:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,108

Сообщение от Malleys
Для стилизации нужно использовать CSS.
как добавить картинки, как убрать \/ в select?
Ответить с цитированием
  #10 (permalink)  
Старый 31.07.2019, 23:28
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Я не знаю, в чём смысл таких вопросов... выше уже был пример.
Сообщение от рони
как добавить картинки
background-image: url(image.png);
Сообщение от рони
как убрать \/ в select?
appearance: none; https://caniuse.com/#feat=css-appearance

select {
   -webkit-appearance: none; 
   -moz-appearance: none;
   appearance: none;       /* убрать стрелку по умолчанию */
   background-image: url(arrow.png);   /* добавить свою стрелку */
}


В background-image можно через запятую перечислять много фонов.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоить значения Дропдаун листа - JavaScript Shivanizy Общие вопросы Javascript 0 24.07.2017 13:32
Необходимо реализовать браузерную игру. 2D+ Isometric. A-Team Общие вопросы Javascript 0 12.12.2016 20:26
Как правильно реализовать такой функционал? Julian Общие вопросы Javascript 3 16.01.2015 12:34
Как реализовать отправку содержимого из iframe нажатием комбинации клавиш ctrl+enter Naizer Общие вопросы Javascript 3 27.11.2013 17:39
Как реализовать? Fliand Элементы интерфейса 4 22.08.2009 19:47