Кнопка странно не кликабельна

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

Большинство интерфейсов приложения состоят из множества кнопок, и я столкнулся со странным явлением, когда я не могу нажать на некоторые из кнопок (отсутствует анимация нажатия и onclick() не запускается).

Я заметил, что там, где есть несколько кнопок, расположенных друг над другом, можно нажимать только на последнюю строку кнопок.

Я создал минимальный, полный и проверяемый пример.

<html>
<body>
    <div style = "padding-top: 20%;" id = "div1">
        <button>
            Button 1
        </button><br />
        <button>
            Button 2
        </button>
    </div>
    <script>
        document.getElementById("div1").style.display = "initial";
    </script>
</body>
</html>

Дополнительные наблюдения/примечания:

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

Я использую Фаерфокс. Я получаю аналогичную проблему с моим приложением в Chrome, но кнопки, которые работают неправильно, отличаются от тех, которые ломаются в Firefox.

Я пытаюсь создать одностраничное веб-приложение, скрывая и показывая различные элементы <div> (разные экраны), устанавливая display: none; и display: initial; соответственно. Это причина для <script>. Есть ли лучший способ сделать это?

Это из-за добавления стиля initial. Есть ли причина хотеть этого?

ComputerLocus 04.07.2019 15:29

да, @ComputerLocus прав. Такое поведение обусловлено стилем.

Alok Mali 04.07.2019 15:32

Это из-за отображения inline (по умолчанию initial будет inline для свойства отображения) в сочетании с верхним отступом.

Mark Baijens 04.07.2019 15:32

@MarkBaijens Может быть, сделать это ответом, поскольку у вас, кажется, есть хорошее объяснение проблемы?

ComputerLocus 04.07.2019 15:36

Странно, я скопировал код и запустил, все работает.

Sivaramakrishnan 04.07.2019 15:37

@ComputerLocus Это скорее наблюдение, чем ответ. Может быть, кто-то может опубликовать ответ, почему это происходит. Я мало знаю о css и спецификации для этого.

Mark Baijens 04.07.2019 15:38

@MarkBaijens Я думаю, что может быть полезно узнать, что они пытаются сделать с помощью initial, чтобы, возможно, можно было предложить альтернативные решения, которые облегчат проблему.

ComputerLocus 04.07.2019 15:39

Код работает для меня, со встроенным css или без него

Monika Mangal 04.07.2019 15:41

@MonikaMangal, ты проверил это в хроме?

Alok Mali 04.07.2019 15:44

да пробовал в хроме. @АлокМали

Monika Mangal 04.07.2019 15:47

Это может помочь: maxdesign.com.au/articles/inline

str 04.07.2019 15:52

@KoshVery изначально установил отображение на встроенный, а не на браузер по умолчанию

Temani Afif 04.07.2019 15:54

@KoshVery Он устанавливает не значение по умолчанию для браузера/элемента, а значение по умолчанию для спецификации, которое является встроенным для свойства отображения.

Mark Baijens 04.07.2019 15:55

@TemaniAfif, @MarkBaijens, спасибо, я неправильно понял спецификацию %)). По умолчанию для display prop точно inline.

Kosh 04.07.2019 15:59
Поведение ключевого слова "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) для оценки ваших знаний,...
8
14
956
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

display: initial; эквивалентно display: inline; в вашем случае.

Затем к каждой строке контента применяется padding-top, в результате чего вторая строка перекрывает первую строку. Это легче увидеть, если вы добавите фон в содержащий div.

#div1 {
	padding-top: 15px;
	display: initial;
	background: #f00;
}
<div id = "div1">
	<button>
		Button 1
	</button>
	<br>
	<button>
		Button 2
	</button>
</div>

на самом деле это не связано с оформлением блока, а с тем фактом, что высота линейного блока определяется только высотой строки, а все остальное (отступы, границы, поля и т. д.) будет просто переполнение

Temani Afif 04.07.2019 16:00

Я думал, что отступ был применен ко всему элементу <div>. Как заставить это работать таким образом?

Issa Chanzi 04.07.2019 16:02

@TemaniAfif Да, мой плохой, я удалю эту часть ответа.

Bali Balo 04.07.2019 16:03

@IssaChanzi любой дисплей, кроме inline (initial)

Temani Afif 04.07.2019 16:03

@IssaChanzi есть несколько способов, самый простой из которых — использовать вместо этого display: inline-block;.

Bali Balo 04.07.2019 16:04

<html>
<body>
    <div style = "padding-top: 20%;">
        <button>
            Button 1
        </button><br />
        <button>
            Button 2
        </button>
    </div>

</body>
</html>

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