CSS Only Accordion - Как свернуть содержимое

Я следую этому CodePen, чтобы создать чистый аккордеон css. Мне нравится корпус справа от экрана. Он открывает и закрывает содержимое вкладки с помощью ввода типа радио. Я хотел бы изменить его так, чтобы при нажатии на открытую вкладку содержимое могло сворачиваться. В настоящее время вы можете свернуть его, только открыв другую вкладку, и я бы хотел сохранить эту функцию. Но я также хочу закрыть его, щелкнув по нему напрямую. Одновременно должна быть открыта только одна вкладка или вообще ни одна.

Я попытался добавить максимальную высоту по умолчанию, равную 0, к содержимому вкладки, как это, но на самом деле это не помогло, и я считаю, что это избыточно:

.tab input ~ .tab-content {
  max-height: 0;
}

/* :checked */
.tab input:checked ~ .tab-content {
  max-height: 100vh;
}

Какие-либо предложения?

Обновлено: я понял, что причина, по которой я не могу его свернуть, заключается в том, что поведение переключателей по умолчанию не позволяет мне `` снять отметку '' с них, просто щелкнув по ним. Но причина, по которой этот аккордеон работает так, как я хочу (закрывайте другие вкладки, когда одна открывается), заключается в том, что он использует радиовходы вместо полей для флажков. Таким образом, в моем решении должно быть сохранено лучшее из обоих миров, возможно, с помощью javascript, чтобы снять отметку с переключателей при нажатии. Однако я пытался сохранить это как аккордеон на чистом CSS. Все еще в недоумении ...

Я думаю, что ваше редактирование и реализация правильны. Вам понадобится совсем немного javascript, чтобы вы могли «снять отметку» с переключателя, когда он уже отмечен.

Stephen P 10.11.2018 00:59
Улучшение производительности загрузки с помощью 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
1
356
1

Ответы 1

Это невозможно с чистым CSS. Вам понадобится javascript, чтобы изменить свойство checked на переключателе на false, если оно уже отмечено при нажатии на него.

Пример Javascript:

var radios = document.querySelectorAll('input[type = "radio"]');

for(i=0; i<radios.length; i++ ) {
    radios[i].onmousedown = function() {
        let checked = this.checked;

        this.onclick = function() {
            if (checked) {
                this.checked = false;
            }
        }
    }
}

Пример jQuery:

$('input[type = "radio"]').on('mousedown', function() {
    let checked = this.checked;

    $(this).on('click', function() {
        if (checked) {
            this.checked = false;
        }
    })
})

Принцип работы радиокнопок заключается в том, что они меняются только onclick, а не onmouseup, и к моменту запуска onclick для свойства checked уже будет установлено значение true. Так что, если у вас есть только слушатель для onclick, checked всегда будет истинным, и вы вообще не сможете активировать радио. Следовательно, прослушиватель mousedown необходим перед onclick, чтобы увидеть, проверено ли уже радио, чтобы вы могли правильно снять его при срабатывании события click.

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

http://jsfiddle.net/d6uLqy0c/4/

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