Intereting Posts
Проблемы с сенсорным прокруткой на iOS при фокусировке входов CSS-спрайт на основе спрайтов в IE6 Стоп Float на нижнем колонтитуле JQuery Как отобразить значение переменных jQuery в PHP на той же странице? Как принудительно выполнить Javascript для выполнения в ответ HTML на запрос Ajax Графические изображения с горизонтальной прокруткой HTML: Составить ссылку, отправить в форму? Как фиксировать элемент позиции так, чтобы при падении на один элемент два других элемента должны оставаться в одном и том же месте Перенаправление URL с динамическим сегментом URI в cpanel как добавить постоянный держатель места внутри входного файла стиль к конкретным элементам classа div, содержащим определенные элементы ввода JavaScript – Как показать следующий div и скрыть предыдущий? Альтернатива -webkit-external-spin-button и -webkit-inner-spin-button в Firefox Относительно абсолютных путей в HTML (asp.net) Правильный атрибут html-атрибута в Vim?

Все css-аккордеонные divs открыты по умолчанию (без jquery)

Я использую это:

jsfiddle.net/wromLbq5

И я надеюсь, что вы сможете одновременно открывать несколько разделов аккордеона и загружать страницы. Под этим я подразумеваю, что когда кто-то открывается, я не хочу, чтобы другой закрывался. Это возможно? Без javascript.

(Игнорируйте все вспомогательные гармоники – мне нужен только один слой)

HTML

 

CSS

 body {margin:50px;} /* Reset */ .accordion, .accordion ul, .accordion li, .accordion a, .accordion span { margin: 0; padding: 0; border: none; outline: none; } .accordion li { list-style: none; } /* Layout & Style */ .accordion li > a { display: block; position: relative; min-width: 110px; padding: 0 10px 0 40px; height: 32px; color: #fdfdfd; font: bold 12px/32px Arial, sans-serif; text-decoration: none; text-shadow: 0px 1px 0px rgba(0,0,0, .35); background: #6c6e74; background: -moz-linear-gradient(top, #6c6e74 0%, #4b4d51 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6c6e74), color-stop(100%,#4b4d51)); background: -webkit-linear-gradient(top, #6c6e74 0%,#4b4d51 100%); background: -o-linear-gradient(top, #6c6e74 0%,#4b4d51 100%); background: -ms-linear-gradient(top, #6c6e74 0%,#4b4d51 100%); background: linear-gradient(top, #6c6e74 0%,#4b4d51 100%); -webkit-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); -moz-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); } .accordion > li:hover > a, .accordion > li:target > a { color: #3e5706; text-shadow: 1px 1px 1px rgba(255,255,255, .2); /*background: url(../img/active.png) repeat-x;*/ background: #a5cd4e; background: -moz-linear-gradient(top, #a5cd4e 0%, #6b8f1a 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a5cd4e), color-stop(100%,#6b8f1a)); background: -webkit-linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); background: -o-linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); background: -ms-linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); background: linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); } .accordion li > a span { display: block; position: absolute; top: 7px; right: 0; padding: 0 10px; margin-right: 10px; font: normal bold 12px/18px Arial, sans-serif; background: #404247; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; -webkit-box-shadow: inset 1px 1px 1px rgba(0,0,0, .2), 1px 1px 1px rgba(255,255,255, .1); -moz-box-shadow: inset 1px 1px 1px rgba(0,0,0, .2), 1px 1px 1px rgba(255,255,255, .1); box-shadow: inset 1px 1px 1px rgba(0,0,0, .2), 1px 1px 1px rgba(255,255,255, .1); } .accordion > li:hover > a span, .accordion > li:target > a span { color: #fdfdfd; text-shadow: 0px 1px 0px rgba(0,0,0, .35); background: #3e5706; } /* Images */ .accordion > li > a:before { position: absolute; top: 0; left: 0; content: ''; width: 24px; height: 24px; margin: 4px 8px; background-repeat: no-repeat; background-image: url(http://sofru.miximages.com/html/icons.png); background-position: 0px 0px; } .accordion li.files > a:before { background-position: 0px 0px; } .accordion li.files:hover > a:before, .accordion li.files:target > a:before { background-position: 0px -24px; } .accordion li.mail > a:before { background-position: -24px 0px; } .accordion li.mail:hover > a:before, .accordion li.mail:target > a:before { background-position: -24px -24px; } .accordion li.cloud > a:before { background-position: -48px 0px; } .accordion li.cloud:hover > a:before, .accordion li.cloud:target > a:before { background-position: -48px -24px; } .accordion li.sign > a:before { background-position: -72px 0px; } .accordion li.sign:hover > a:before, .accordion li.sign:target > a:before { background-position: -72px -24px; } /* Sub Menu */ .sub-menu li a { color: #797979; text-shadow: 1px 1px 0px rgba(255,255,255, .2); background: #e5e5e5; border-bottom: 1px solid #c9c9c9; -webkit-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); -moz-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); } .sub-menu li:hover a { background: #efefef; } .sub-menu li:last-child a { border: none; } .sub-menu li > a span { color: #797979; text-shadow: 1px 1px 0px rgba(255,255,255, .2); background: transparent; border: 1px solid #c9c9c9; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .sub-menu em { position: absolute; top: 0; left: 0; margin-left: 14px; color: #a6a6a6; font: normal 10px/32px Arial, sans-serif; } /* Functionality */ .accordion li > .sub-menu li { height: 0; overflow: hidden; -webkit-transition: height .2s ease-in-out; -moz-transition: height .2s ease-in-out; -o-transition: height .2s ease-in-out; -ms-transition: height .2s ease-in-out; transition: height .2s ease-in-out; } .accordion li:target > .sub-menu li { height: 33px; } 

Я пытаюсь избежать любого java-скрипта. Это возможно?

Нет, это невозможно с помощью только css, потому что ваш пример использует селектор CSS3 :target . Когда вы нажимаете на другой предмет, цель изменяется.

Вы не можете установить состояние с помощью css, но можете его стилизовать. Если вы хотите, чтобы каждый раздел открывался после нажатия, вам нужно будет использовать javascript, но вам не нужен jQuery

Если вы хотите использовать javascript, это подражает css как можно ближе, позволяя аккордеонам оставаться открытым. Чтобы закрыть аккордеон, просто нажмите на заголовок еще раз.

 var lists = document.querySelectorAll('.accordion > li > a'); // get list title links for (var i = 0; i < lists.length; i++) { // for each list title link lists[i].href = "javascript:void()"; // stop the page from jumping lists[i].onclick = function(e) { // when you click the link var items = e.target.parentNode.querySelectorAll('li'); // get all list items that are siblings of the clicked link for (var x = 0; x < items.length; x++) { // for each list item if (items[x].style.height != '33px') { // if its not open items[x].style.height = '33px'; // open it } else { // otherwise items[x].style.height = '0px'; // close it } } }; } 

Оберните это в тег скрипта, либо оставьте его в нижней части тела, либо оберните его в document.onload = function() { /* Script Here */ }

( Демо )

Обратите внимание , что в любом стиле с селектором :target будет прекращаться действие, вы должны оставить их в css в качестве резервной копии, если у пользователя отключен javascript.

Этот css показывает все аккордеоны как закрытые, используя этот стиль:

  .accordion li > .sub-menu li { height: 0px; } 

Вы можете установить его на 33 пикселя, чтобы показать все открытые при открытии страницы, но это нарушит функциональность, поскольку это: селектор target, который затем устанавливает высоту и, таким образом, вызывает выделенную секцию как открытую.

Единственное решение – перейти в javascript …..

Это можно сделать? да

Вам нужно изменить свой HTML? да

Это мило? нет

В основном вместо состояния сохранения Target . checkbox заменяющий верхний уровень тегами с label .

 body {margin:50px;} /* Reset */ .accordion, .accordion ul, .accordion li, .accordion label, .accordion span { margin: 0; padding: 0; border: none; outline: none; } .accordion li { list-style: none; } .accordion input[type="checkbox"]{display:none;} /* Layout & Style */ .accordion li > label, .accordion li > a { display: block; position: relative; min-width: 110px; padding: 0 10px 0 40px; height: 32px; color: #fdfdfd; font: bold 12px/32px Arial, sans-serif; text-decoration: none; text-shadow: 0px 1px 0px rgba(0,0,0, .35); background: #6c6e74; background: -moz-linear-gradient(top, #6c6e74 0%, #4b4d51 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#6c6e74), color-stop(100%,#4b4d51)); background: -webkit-linear-gradient(top, #6c6e74 0%,#4b4d51 100%); background: -o-linear-gradient(top, #6c6e74 0%,#4b4d51 100%); background: -ms-linear-gradient(top, #6c6e74 0%,#4b4d51 100%); background: linear-gradient(top, #6c6e74 0%,#4b4d51 100%); -webkit-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); -moz-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); } .accordion > li:hover > label, .accordion > li:target > label, .accordion > li > input[type="checkbox"]:checked ~ label{ color: #3e5706; text-shadow: 1px 1px 1px rgba(255,255,255, .2); /*background: url(../img/active.png) repeat-x;*/ background: #a5cd4e; background: -moz-linear-gradient(top, #a5cd4e 0%, #6b8f1a 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#a5cd4e), color-stop(100%,#6b8f1a)); background: -webkit-linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); background: -o-linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); background: -ms-linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); background: linear-gradient(top, #a5cd4e 0%,#6b8f1a 100%); } .accordion li > label span, .accordion li > a span { display: block; position: absolute; top: 7px; right: 0; padding: 0 10px; margin-right: 10px; font: normal bold 12px/18px Arial, sans-serif; background: #404247; -webkit-border-radius: 15px; -moz-border-radius: 15px; border-radius: 15px; -webkit-box-shadow: inset 1px 1px 1px rgba(0,0,0, .2), 1px 1px 1px rgba(255,255,255, .1); -moz-box-shadow: inset 1px 1px 1px rgba(0,0,0, .2), 1px 1px 1px rgba(255,255,255, .1); box-shadow: inset 1px 1px 1px rgba(0,0,0, .2), 1px 1px 1px rgba(255,255,255, .1); } .accordion > li:hover > label span, .accordion > li:target > label span, .accordion > li > input[type="checkbox"]:checked ~ label span{ color: #fdfdfd; text-shadow: 0px 1px 0px rgba(0,0,0, .35); background: #3e5706; } /* Images */ .accordion > li > label:before { position: absolute; top: 0; left: 0; content: ''; width: 24px; height: 24px; margin: 4px 8px; background-repeat: no-repeat; background-image: url(http://sofru.miximages.com/html/icons.png); background-position: 0px 0px; } .accordion li.files > label:before { background-position: 0px 0px; } .accordion li.files:hover > labe:before, .accordion li.files:target > label:before { background-position: 0px -24px; } .accordion li.mail > label:before { background-position: -24px 0px; } .accordion li.mail:hover > label:before, .accordion li.mail:target > label:before { background-position: -24px -24px; } .accordion li.cloud > label:before { background-position: -48px 0px; } .accordion li.cloud:hover > label:before, .accordion input[type="checkbox"]:checked:before { background-position: -48px -24px; } .accordion li.sign > label:before { background-position: -72px 0px; } .accordion li.sign:hover > label:before, .accordion input[type="checkbox"]:checked:before { background-position: -72px -24px; } /* Sub Menu */ .sub-menu li > a { color: #797979; text-shadow: 1px 1px 0px rgba(255,255,255, .2); background: #e5e5e5; border-bottom: 1px solid #c9c9c9; -webkit-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); -moz-box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); box-shadow: inset 0px 1px 0px 0px rgba(255,255,255, .1), 0px 1px 0px 0px rgba(0,0,0, .1); } .sub-menu li:hover a { background: #efefef; } .sub-menu li:last-child a { border: none; } .sub-menu li > a span { color: #797979; text-shadow: 1px 1px 0px rgba(255,255,255, .2); background: transparent; border: 1px solid #c9c9c9; -webkit-box-shadow: none; -moz-box-shadow: none; box-shadow: none; } .sub-menu em { position: absolute; top: 0; left: 0; margin-left: 14px; color: #a6a6a6; font: normal 10px/32px Arial, sans-serif; } /* Functionality */ .accordion li > .sub-menu li { height: 0; overflow: hidden; -webkit-transition: height .2s ease-in-out; -moz-transition: height .2s ease-in-out; -o-transition: height .2s ease-in-out; -ms-transition: height .2s ease-in-out; transition: height .2s ease-in-out; } .accordion input[type="checkbox"]:checked ~ .sub-menu li { height: 33px; }