HTMLElement: скрытое свойство

У меня есть элемент HTML UL, который я хочу динамически скрыть с помощью свойства .hidden с помощью JavaScript. Проблема в том, что при наличии правила CSS: display:block для элемента скрытое свойство не работает.

document.getElementById('myid').hidden = true;
#myid {
  display: block;
}
<div id = "myid">Lorem ipsum</div>

Браузер корректно добавляет скрытое свойство к элементу, но элемент не скрывается, поскольку установлен display:block.

Я ожидал, что JavaScript переопределит CSS. Какой тогда смысл иметь скрытое свойство? Почему это? и это баг?

Похоже, что display: block имеет приоритет, поскольку его удаление скрывает элемент.

Barmar 07.06.2024 22:46

Какая польза? Если у вас нет стиля CSS, вы можете использовать свойство hidden.

Barmar 07.06.2024 22:47
MDN: отображение в стиле элементов: блок будет отображаться, несмотря на наличие скрытого атрибута.
001 07.06.2024 22:53

Так что это бесполезно и ненадежно в динамических случаях, когда я не знаю, чего ожидать.

MArt 07.06.2024 23:48
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
4
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вам нужно правило CSS [hidden] {display:none!important;}. Что-то вроде этого.

function toggle(){
var elem=document.getElementById('myid');
elem.hidden = !elem.hidden;
}
#myid {
  display: block;
}
[hidden]{
display:none!important;
}
<div id = "myid">Lorem ipsum</div>
<button type = "button" onclick = "toggle()">Toggle</button>

Фактически, речь идет об иерархии CSS (каскадных таблиц стилей). Подробное описание см., например, на сайте https://www.w3schools.com/css/css_specificity.asp

Интересно, не знал, что такое возможно.

MArt 07.06.2024 23:38
Ответ принят как подходящий

Это потому, что hidden связано со свойством видимости . Однако есть еще свойство display. Ваш класс устанавливает для свойства display значение block, и поэтому оно противоречит visibility.

Вы можете переключать классы CSS, если хотите показать/скрыть весь элемент:

function toggle(){
  const div = document.getElementById('myid');
  div.classList.toggle("is-shown");
  div.classList.toggle("is-hidden");
}

Классы CSS:

.is-hidden {
    display: none;
}

.is-shown {
    display: block;
}    

HTML:

<div id = "myid" class = "is-shown">Lorem ipsum</div>

Если вы хотите переключать только visibility, вы можете предпочесть классы CSS:

.is-hidden {
    visibility: hidden;
}
.is-visible {
    visibility: visible;
}

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