Множественный раскрывающийся список с флажком CSS

Все, что я пытаюсь сделать, это переключить класс «toggle-content», когда метка выбрана. На данный момент со следующим CSS ничего не происходит. Я не могу использовать JQuery или какой-либо JavaScript. Я не могу понять, что я сделал не так. Любые идеи очень ценятся.

/* The checkbox */
.hidden-checkbox {
   display: block;
}

/* The element to show/hide */
 .toggle-content {
    display: none;
    z-index: 2;
    position: absolute;
    background-color: dimgrey;
    color: white;
    border: black;
    border-width: 1px;
    border-style: solid;
    border-radius: 5px;
    padding: 3px;
}

/* The label that controls the element */
.label-toggle {
    cursor: pointer;
}

/* Show the element when the checkbox is checked */
.hidden-checkbox:checked + .toggle-content {
    display: block;
}

ul {
    list-style-type: none;
    padding: 0;
    margin: 0;
    overflow-y: auto;
    max-height: 100px;
    padding-right: 10px
}

li {
    padding-top: calc(var(--bs-gutter-y)* -1);
    padding-right: calc(var(--bs-gutter-x)* -.5);
    padding-left: calc(var(--bs-gutter-x)* -.5);
    font-size: small;
}
li:hover {
    background-color: darkgrey;
}
<div>
    <label for = "toggleVendors" class = "label-toggle form-control">
        click here
    </label>
    <div type = "checkbox" id = "toggleVendors" class = "hidden-checkbox" />
        <div class = "toggle-content">
            <ul>
                <li><input type = "checkbox" id = "1" />one</li>
                <li><input type = "checkbox" id = "2" />two</li>
                <li><input type = "checkbox" id = "3" />three</li>
            </ul>
        </div>
    </div>

Divs — это не входные данные, которых у них не может быть type: checkbox.

Paulie_D 05.06.2024 16:48

Короче говоря, чтобы этот код работал, вам нужно сделать этот div элементом input и изменить правило .hidden-checkbox css с помощью display: none. Наверняка здесь много вопросов и ответов по этому поводу, но я не нашел ни одного.

Diego D 05.06.2024 16:55

если я сделаю div входом, мне придется установить флажок специально для переключения содержимого. щелчок в любом месте метки не имеет никакого эффекта.

bilpor 05.06.2024 16:56

нет... потому что у вас есть ярлык с for, нацеленный на флажок. Дело в том, что из соображений доступности щелчок по метке фактически переключит соответствующий флажок и заставит условия правил CSS работать соответствующим образом. Я сказал вам одним комментарием выше точное решение, и ваш комментарий показывает, что вы даже не пробовали его.

Diego D 05.06.2024 16:57
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
4
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Divs — это не входные данные, которых у них не может быть type: checkbox.

Обменяю на нормальный input

/* The checkbox */

.hidden-checkbox {
  display: none;
}


/* The element to show/hide */

.toggle-content {
  display: none;
  z-index: 2;
  position: absolute;
  background-color: dimgrey;
  color: white;
  border: black;
  border-width: 1px;
  border-style: solid;
  border-radius: 5px;
  padding: 3px;
}


/* The label that controls the element */

.label-toggle {
  cursor: pointer;
}


/* Show the element when the checkbox is checked */

.hidden-checkbox:checked+.toggle-content {
  display: block;
}

ul {
  list-style-type: none;
  padding: 0;
  margin: 0;
  overflow-y: auto;
  max-height: 100px;
  padding-right: 10px
}

li {
  padding-top: calc(var(--bs-gutter-y)* -1);
  padding-right: calc(var(--bs-gutter-x)* -.5);
  padding-left: calc(var(--bs-gutter-x)* -.5);
  font-size: small;
}

li:hover {
  background-color: darkgrey;
}
<div>
  <label for = "toggleVendors" class = "label-toggle form-control">
    click here
  </label>
  <input type = "checkbox" id = "toggleVendors" class = "hidden-checkbox">
  <div class = "toggle-content">
    <ul>
      <li><input type = "checkbox" id = "1" />one</li>
      <li><input type = "checkbox" id = "2" />two</li>
      <li><input type = "checkbox" id = "3" />three</li>
    </ul>
  </div>
</div>
Ответ принят как подходящий

Вы должны использовать реальный флажок, а не div. Чтобы объединить флажок с меткой, используйте соответствующий идентификатор флажка, чтобы вы могли щелкнуть текст, чтобы переключить флажок.

/* The checkbox */

.hidden-checkbox {
  display: none;
}


/* The element to show/hide */

.toggle-content {
  display: none;
  z-index: 2;
  position: absolute;
  background-color: dimgrey;
  color: white;
  border: black;
  border-width: 1px;
  border-style: solid;
  border-radius: 5px;
  padding: 3px;
}


/* The label that controls the element */

.label-toggle {
  cursor: pointer;
}


/* Show the element when the checkbox is checked */

.hidden-checkbox:checked+.toggle-content {
  display: block;
}

ul {
  list-style-type: none;
  padding: 0;
  margin: 0;
  overflow-y: auto;
  max-height: 100px;
  padding-right: 10px
}

li {
  padding-top: calc(var(--bs-gutter-y)* -1);
  padding-right: calc(var(--bs-gutter-x)* -.5);
  padding-left: calc(var(--bs-gutter-x)* -.5);
  font-size: small;
}

li:hover {
  background-color: darkgrey;
}
<div>
  <label for = "toggleVendors" class = "label-toggle form-control">
        click here
    </label>
  <input type = "checkbox" id = "toggleVendors" class = "hidden-checkbox">
  <div class = "toggle-content">
    <ul>
      <li><input type = "checkbox" id = "1" />one</li>
      <li><input type = "checkbox" id = "2" />two</li>
      <li><input type = "checkbox" id = "3" />three</li>
    </ul>
  </div>
</div>

Однако я не хочу, чтобы флажок показывался. Я хочу, чтобы пользователю нужно было только нажать на метку. Если у меня есть вышеперечисленное

bilpor 05.06.2024 17:03

вы можете добиться этого с помощью CSS, вы изначально указали отображение скрытого CSS с помощью блока. Сейчас я установил для него значение «Нет», чтобы оно было скрыто.

cloned 05.06.2024 17:14

интересно, я буквально вырезал и вставил, но у меня не работает, когда я меняю исходный css для флажка на none

bilpor 05.06.2024 17:28

Что за фигня. Это элемент управления, который будет частью главной страницы. У меня это не сработало, потому что на главной странице были другие элементы управления CSS с теми же именами классов, которые имели приоритет над этим элементом, который имел то же имя класса для элемента. Я убедился, что они уникальны, и теперь это работает.

bilpor 05.06.2024 17:43

извини, только сейчас увидел твои комментарии. Рад, что вы смогли решить свои проблемы. но в таком случае всегда проверяйте с помощью инструментов разработчика браузера, что применен правильный CSS. Это также сэкономило мне время от поиска не на том конце :)

cloned 06.06.2024 15:03

Другие вопросы по теме