Accordion CSS

Вертикальный аккордеон

HTML аккордеон, в отличии от таб-вкладок, должен иметь фиксированную высоту, пусть даже она равна 100% высоты экрана монитора [см. единицу измерения vh]. Его можно применять для создания вертикального меню, которое раскрывается вниз, например, что-то вроде этого [www.cssplay.co.uk].

<div class="horizontal-click">
  <input type="radio" name="vkl" id="vkl1" checked="checked"/>
  <label for="vkl1">Заголовок 1</label>
  <div>Вкладка 1</div>
  <input type="radio" name="vkl" id="vkl2"/>
  <label for="vkl2">Заголовок 2</label>
  <div>Вкладка 2</div>
  <input type="radio" name="vkl" id="vkl3"/>
  <label for="vkl3">Заголовка 3</label>
  <div>Вкладка 3</div>
</div>
.horizontal-click [name="vkl"] { display: none; }
.horizontal-click > :not(input):not(label) {
  overflow: hidden;
  height: 0;
  margin: 0;
  padding: 0 .5em;
  border: 1px solid #808080;
  border-top-style: none;
  transition: .5s;
}
.horizontal-click > label {
  overflow: hidden;
  display: block;
  padding: .5em 1em;
  background: #606060;
  color: rgb(200,200,200);
  white-space: nowrap;
  text-overflow: ellipsis;
  cursor: pointer;
}
.horizontal-click > :checked + label + * {
  overflow: auto;
  height: 310px;
}
.horizontal-click > :checked + label {
  background: #454545;
  cursor: default;
}

Код подходит для "резинового" дизайна:

  1. если содержимое не помещается в поле div, то появляются полосы прокрутки,
  2. если заголовок вкладки не помещается в строку, то он будет обрезан, в окончании названия проставлено многоточие.

Изначально будет открыта та вкладка, радиокнопка которой помечена checked="checked".

На странице может быть несколько аккордионов. id и for каждого input и label соответственно, а также name группы input должны отличаться.

После названия вкладки label может идти любой тег, не обязательно div.



  • HTML

    <ul class="horizontal-hover">
     <li>
      <h4>Заголовок 1</h4>
      <div>Вкладка 1</div>
     <li>
      <h4>Заголовок 2</h4>
      <div>Вкладка 2</div>
     <li>
      <h4>Заголовка 3</h4>
      <div>Вкладка 3</div>
    </ul>
  • CSS

    .horizontal-hover {
      height: calc(310px + 35px*3 + 1px*2);
      overflow: hidden;
      outline: 1px solid #808080;
    } 
    .horizontal-hover,
    .horizontal-hover > li,
    .horizontal-hover > li > h4 {
      display: block;
      margin: 0;
      padding: 0;
    } 
    .horizontal-hover > li > h4 {
      overflow: hidden;
      height: 35px;
      line-height: 35px;
      border-bottom: 1px solid #808080;
      text-indent: .5em;
      background: #606060;
      color: rgb(200,200,200);
      white-space: nowrap;
      text-overflow: ellipsis;
      cursor: pointer;
    }
    .horizontal-hover > li > div,
    .horizontal-hover:hover > li:not(:last-child):not(:hover) > div {
      overflow: auto;
      height: 0;
      padding: 0 .5em;
      transition: .5s;
    }
    .horizontal-hover > li:first-child > div,
    .horizontal-hover > li:last-child > div,
    .horizontal-hover > li:hover > div {
      height: 310px;
    }
  • Дополнительная информация

    Код подходит для "резинового" дизайна:

    1. если содержимое не помещается в поле div, то появляются полосы прокрутки,
    2. если заголовок вкладки не помещается в строку, то он будет обрезан, в окончании названия проставлено многоточие.

    На странице может быть несколько аккордионов.

Горизонтальный аккордеон.

Далее по аналогии.
<style type="text/css">
.galleryh {width: 490px;} 

.galleryh img, .galleryh:hover img:first-child {height: 333px; width: 30px; padding: 0px; outline: groove #9a3425;} 

.galleryh img:hover, .galleryh img:first-child, .galleryh:hover img:first-child:hover {width: 400px;} 
</style>

<div class="galleryh">
<img alt="" src="URL_изо"/><img alt="" src="URL_изо"/><img alt="" src="URL_изо"/><img alt="" src="URL_изо"/></div>

Кот в мискеКот и мышьКот и мышиСпящий кот


  • HTML
    <ul class="horizontalaccordion1">
    <li id="raz1"><a href="#raz1">HTML</a><div>Информация первого слайда.</div></li>
    <li id="dva1"><a href="#dva1">CSS</a><div>Информация второго слайда.</div></li>
    <li id="tri1"><a href="#tri1">Автор</a><div>Информация третьего слайда.</div></li>
    </ul>
  • CSS
    <style type="text/css">
    .horizontalaccordion1 {
      margin: 0; padding: 0;
      height: 300px;
    }

    .horizontalaccordion1>li {
      overflow: hidden;
      float:left;
      margin: 0; padding: 0;
      list-style:none;
      width:40px;
      height: 300px;
      background:#f0f0f0;
      transition: width 0.3s; -moz-transition: width 0.3s; -webkit-transition: width 0.3s; -o-transition: width 0.3s;
    }

    .horizontalaccordion1>li>a {
      display: inline-block;
      margin: 0; padding: 10px;
      height: 19px;
      width: 280px;
      border-left:#f0f0f0 1px solid;
      font-family: Arial, Helvetica, sans-serif;
      text-decoration: none;
      color: #000;
      background: #ccc;
      white-space:nowrap;
      background: -moz-linear-gradient(#999999, #cccccc);
      background: -ms-linear-gradient(#999999, #cccccc);
      background: -o-linear-gradient(#999999, #cccccc);
      background: -webkit-linear-gradient(#999999, #cccccc);
      -moz-transform: rotate(90.0deg) translate(-40px,0px); /* FF3.5+ */
      -moz-transform-origin: 0 100%;
      -o-transform: rotate(90.0deg) translate(-40px,0px); /* Opera 10.5 */
      -o-transform-origin: 0 100%;
      -webkit-transform: rotate(90.0deg) translate(-40px,0px); /* Saf3.1+, Chrome */
      -webkit-transform-origin: 0 100%;
      transform: rotate(90.0deg) translate(-40px,0px); /* Saf3.1+, Chrome */
      transform-origin: 0 100%;
      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0)
              progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff999999, endColorstr=#ffcccccc); /* IE6,IE7 */
      -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0)"
                  "progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff999999, endColorstr=#ffcccccc)"; /* IE8 */
    }

    .horizontalaccordion1>li>div {
      display: inline-block;
      overflow: auto;
      position:relative; top:-40px; left:40px;
      *top:0px; *left:0px; /* IE7 Hack */
      margin:0;
      width:320px;
      height:280px;
      padding:10px;
    }

    .horizontalaccordion1>li:target {
      overflow: hidden;
      width: 380px;
    }

    .horizontalaccordion1>li:target>a {
      color:#fff;
      background: #000;
      background: -moz-linear-gradient(#454545, #000000);
      background: -ms-linear-gradient(#454545, #000000);
      background: -o-linear-gradient(#454545, #000000);
      background: -webkit-linear-gradient(#454545, #000000);
      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0) progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff454545, endColorstr=#ff000000); /* IE 5.5 - IE 7 */
      -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0)"
      "progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff454545, endColorstr=#ff000000)"; /* IE 8 */
    }
    </style>
  • Автор
    См. ниже, только немного подкорректирован.


  • HTML
    <ul class="horizontalaccordion">
    <li><strong>HTML</strong><div>Информация первого слайда.</div></li>
    <li><strong>CSS</strong><div>Информация второго слайда.</div></li>
    <li><strong>Автор</strong><div>Информация третьего слайда.</div></li>
    </ul>
  • CSS
    <style type="text/css">
    .horizontalaccordion {
      margin: 0; padding: 0;
      height: 300px; width:460px;
    }

    .horizontalaccordion>li, .horizontalaccordion:hover>li:last-child {
      overflow: hidden;
      float:left;
      margin: 0; padding: 0;
      list-style:none;
      width:40px;
      height: 300px;
      background:#f0f0f0;
      transition: width 0.3s; -moz-transition: width 0.3s; -webkit-transition: width 0.3s; -o-transition: width 0.3s;
    }

    .horizontalaccordion>li>strong, .horizontalaccordion:hover>li:last-child>strong {
      display: inline-block;
      margin: 0; padding: 10px;
      height: 19px;
      width: 280px;
      border-left:#f0f0f0 1px solid;
      font-family: Arial, Helvetica, sans-serif;
      text-decoration: none;
      color: #000;
      background: #ccc;
      white-space:nowrap;
      background: -moz-linear-gradient(#999999, #cccccc);
      background: -ms-linear-gradient(#999999, #cccccc);
      background: -o-linear-gradient(#999999, #cccccc);
      background: -webkit-linear-gradient(#999999, #cccccc);
      -moz-transform: rotate(90.0deg) translate(-40px,0px); /* FF3.5+ */
      -moz-transform-origin: 0 100%;
      -o-transform: rotate(90.0deg) translate(-40px,0px); /* Opera 10.5 */
      -o-transform-origin: 0 100%;
      -webkit-transform: rotate(90.0deg) translate(-40px,0px); /* Saf3.1+, Chrome */
      -webkit-transform-origin: 0 100%;
      transform: rotate(90.0deg) translate(-40px,0px); /* Saf3.1+, Chrome */
      transform-origin: 0 100%;
      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0)
              progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff999999, endColorstr=#ffcccccc); /* IE6,IE7 */
      -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0)"
                  "progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff999999, endColorstr=#ffcccccc)"; /* IE8 */
    }

    .horizontalaccordion>li>div, .horizontalaccordion:hover>li:last-child>div {
      font: 13px normal helvetica, sans-serif;
      display:none;
      overflow: auto;
      position:relative; top:-40px; left:40px;
      *top:0px; *left:0px; /* IE7 Hack */
      margin:0;
      width:320px;
      height:280px;
      padding:10px;
    }

    .horizontalaccordion>li:hover, .horizontalaccordion>li:last-child, .horizontalaccordion:hover>li:last-child:hover {
      overflow: hidden;
      width: 380px;
    }

    .horizontalaccordion:hover>li:hover>div, .horizontalaccordion>li:last-child>div, .horizontalaccordion:hover>li:last-child:hover>div {
      display: inline-block;
    }

    .horizontalaccordion:hover>li:hover>strong, .horizontalaccordion>li:last-child>strong, .horizontalaccordion:hover>li:last-child:hover>strong {
      color:#fff;
      background: #000;
      background: -moz-linear-gradient(#454545, #000000);
      background: -ms-linear-gradient(#454545, #000000);
      background: -o-linear-gradient(#454545, #000000);
      background: -webkit-linear-gradient(#454545, #000000);
      filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0) progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff454545, endColorstr=#ff000000); /* IE 5.5 - IE 7 */
      -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1.0)"
      "progid:DXImageTransform.Microsoft.gradient(startColorstr=#ff454545, endColorstr=#ff000000)"; /* IE 8 */
    }

    .horizontalaccordion>li>strong:hover {
      cursor:pointer;
    }
    </style>
  • Автор




Похожие материалы:
в f t
наверх ↑

51 комментарий:

serdgio
Здравствуйте Наташа! По моему я ещё ни разу не писал у Вас в комментариях, хотя уже давно собирался. Конечно же, первым делом выражаю Вам свою искреннюю благодарность, так много полезного вычитал на Вашем блоге, мало того, ещё и воспользовался некоторыми "штучками", которыми Вы так щедро делитесь со всеми нами. Спасибо Вам большое!!!
Это то, что мне уже давно было необходимым сделать, а теперь к конкретике. На счет вот этого "аккордеона", попробовал его поставить на экспериментальный блог, получилось довольно не плохо. Но сделал это не в сообщении, а на отдельной странице, так как при открытии все, что находится ниже съезжает вниз. Хотя, это не так важно, ведь при закрытии возвращается обратно и человек может читать дальше,так что можно и сообщение поставить (попробую). А спросить хотел вот что: как Вы считаете, будет ли индексироваться тот текст, который находиться внутри. То есть, сможет ли увидеть его ПС?
И если Вы не возражаете, то я опубликую у себя на блоге пост про Вас и ваши полезности со ссылкой на ваш блог (открытой), а потом вернусь и оставлю свою ссылку? На этот вопрос можете ответить по почте misecondi45@gmail.com. И еще раз Вам спасибо!
NMitra
Здравствуйте, приятно слышать!

Да, поисковые системы его превосходно индексируют, они читают код, который можно увидеть, нажав правую клавишу мышки на странице сайта-"Исходный код страницы".

Вот только как они его воспримут затрудняюсь сказать.

У "страниц с невидимым или слабовидимым текстом или ссылками" могут быть проблемы с ранжированием и индексированием (http://help.yandex.ru/webmaster/?id=995298#995342). Дело в том, ряд веб-мастеров размещают контент только для поисковых систем, которые не нужно видеть пользователю, чтобы повлиять на позицию в выдаче. Например, когда количество ключевых слов на странице было определяющим фактором, они прятали "купить машину купить машину купить машину..." и так несколько сток в display: none. Тоже самое с ссылками: продавали ссылки со страницы, но посетителям они ни к чему. Поисковики стали наказывать.

Но с другой стороны, сейчас активно используют раскрывающее меню, которое построено на том же display: none. Или моя страница со скриптом показать/скрыть текст http://yandex.ru/yandsearch?text=%D0%B8%D0%BD%D1%81%D1%82%D1%80%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D1%8B+%D0%B4%D0%BB%D1%8F+%D0%B2%D0%B5%D0%B1%D0%BC%D0%B0%D1%81%D1%82%D0%B5%D1%80%D0%B0&clid=50368&lr=51. И они прекрасно себя чувствуют в выдаче.
Даниил Юрьевич
Ну прям очень интересные эфекты =). Где нибудь реализую, точно!
Mails
а как в первов варианте поменять цвет шрифта с черного на белый в заголовке и в выплывающем тексте?
NMitra
.menu15 {color: #fff;}
Mails
Спасибо огромное, ты просто чудо ))
Mails
А добавить 4-ю строчку так чтобы она не пряталась за границами выпадающего текста?
Mails
Да, я лошара я в курсе ))) в жизни не сталкивался с HTML )
Mails
Оо все сам добавил.. ;)
NMitra
Отлично, а я только посмотреть собиралась
Mails
Зравствуйте еще раз. подскажите как сделать этот код по живее, то что получилось забраковали ((( можно ли сделать чтобы выбраная строка меню имела минус (якобы раскрытая информация) все остальные имели плюс. выбираю 2 строку меню предыдущая закрывается со значком плюс, а выбранная открывается с минусом. Пример
ОПИСАНИЕ -
текст описания
ИНГРИДИЕНТЫ +
РЕКОММЕНДАЦИИ +
Mails
И как при наведении на нужную строку меню сделать так чтобы она меняла свой цвет??Пользуюсь первым вариантом вариантом
NMitra
.menu15 li > label {position: relative;}
.menu15 li > label:after {content: "\2b"; position: absolute; right:2%;}
.menu15 li > input:checked + label:after {content: "\2d"; position: absolute; right:2%;}


.menu15 li:hover > label {background: red;}

Mails
Это полностью если выделить background, а только текст, как во втором?
NMitra
Текст - свойство color

Mails, прошу, не нужно больше вопросов, у тебя для этого есть педагоги. Зачем тебе вообще институт, для чего тратишь время людей? 5 лет! Армия - 1 год! Купи корочку диплома и займись чем-нибудь полезным для себя. Х.З., может ты хочешь быть гениальным заправщиком на АЗС или суперпродавцом. У меня вон пример знакомого, который ничего не умеет в 30 лет кроме как сидеть у родителей на шее. Для этого высшее образование не нужно.
Mails
Спасибо за время, которое вы уделили для мня.
Горячая точка. Страйкбол
А не подскажите, как сделать так чтоб первый вариант меню не сворачивался после выбора пункта меню? Например: зашел в "Заголовок 2" выбрал "Вкладку 2" и перейдя на новую страницу, привязанную к этой вкладке, меню осталось с открытой "Заголовок 2". Заранее спасибо за ответ.
NMitra
См http://shpargalkablog.ru/2013/06/localStorage.html#checked
Горячая точка. Страйкбол
Это ж отдельные функции, а мне бы именно это меню, чтоб оно при переходах не сворачивалось.
NMitra
Аааа, я не поняла сначала, хотя и сейчас мне не очень понятно. В ссылке поставьте target="_blank"
Горячая точка. Страйкбол
А теперь я не понял) куда именно вставить этот текст?
Горячая точка. Страйкбол
У меня это меню планируется так: в каждом "заголовке" несколько "вкладок", каждая вкладка это ссылка на другую страницу сайта. Я хочу чтоб после перехода на новую страницу, выбранный перед этим "Заголовок" оставался открытым на новой странице. Вот так как-то.
NMitra
Вкладка будет открытой, пока страницу не закроете. А чтобы ссылка открывалась в новом окне, используйте:

<a href="http://shpargalkablog.ru/2010/09/postroenie-ssylok-v-html.html" target="_blank">анкор</a>

или же приписывать sessionStorage к input, чтобы комп пользователя запоминал какой радио должен быть checked
Горячая точка. Страйкбол
А куда именно в строке с input вставлять sessionStorage?
NMitra
После html кода пропишите:

<script>
document.getElementById('vkl1').onclick = function() {
if(document.getElementById('vkl1').checked) {
localStorage.setItem('vkl1', "true");
} else {
localStorage.setItem('vkl1', "false");
}
}
if (localStorage.getItem('vkl1') == "true") {
document.getElementById("vkl1").setAttribute('checked','checked');
}
document.getElementById('vkl2').onclick = function() {
if(document.getElementById('vkl2').checked) {
localStorage.setItem('vkl2', "true");
} else {
localStorage.setItem('vkl2', "false");
}
}
if (localStorage.getItem('vkl2') == "true") {
document.getElementById("vkl2").setAttribute('checked','checked');
}
document.getElementById('vkl3').onclick = function() {
if(document.getElementById('vkl3').checked) {
localStorage.setItem('vkl3', "true");
} else {
localStorage.setItem('vkl3', "false");
}
}
if (localStorage.getItem('vkl3') == "true") {
document.getElementById("vkl3").setAttribute('checked','checked');
}
</script>

Скрипт, наверно, можно как-то более красиво написать с меньшим количеством символов, но я сейчас не в силах думать над этим вопросом. Этот вариант работает безотказно.
Горячая точка. Страйкбол
Спасибо большое, по возможности буду пробовать)
Денис Демин
Ребята, всем привет. Делал себе 8 вкладок и напоролся на то,что открываются только 3 первые. Если кто-то не хочет копаться, то вот решение. Очень простое :
К каждой вкладке надо дополнительно прописать строку. Разумеется к каждой дополнительной, после третьей. У меня их 8. Строки дописываем в CSS . ну и разумеется в коде HTML. вот CSS поправочки. В HTML, все так же по примеру на сайте :
.horizontal-click > [name^="vkl"]:nth-of-type(1):checked ~ [for^="vkl"]:nth-of-type(1) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(2):checked ~ [for^="vkl"]:nth-of-type(2) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(3):checked ~ [for^="vkl"]:nth-of-type(3) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(4):checked ~ [for^="vkl"]:nth-of-type(4) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(5):checked ~ [for^="vkl"]:nth-of-type(5) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(6):checked ~ [for^="vkl"]:nth-of-type(6) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(7):checked ~ [for^="vkl"]:nth-of-type(7) + *,
.horizontal-click > [name^="vkl"]:nth-of-type(8):checked ~ [for^="vkl"]:nth-of-type(8) + * {
overflow: auto;
height: 310px;
}
.horizontal-click > [name^="vkl"]:nth-of-type(1):checked ~ [for^="vkl"]:nth-of-type(1),
.horizontal-click > [name^="vkl"]:nth-of-type(2):checked ~ [for^="vkl"]:nth-of-type(2),
.horizontal-click > [name^="vkl"]:nth-of-type(3):checked ~ [for^="vkl"]:nth-of-type(3),
.horizontal-click > [name^="vkl"]:nth-of-type(4):checked ~ [for^="vkl"]:nth-of-type(4),
.horizontal-click > [name^="vkl"]:nth-of-type(5):checked ~ [for^="vkl"]:nth-of-type(5),
.horizontal-click > [name^="vkl"]:nth-of-type(6):checked ~ [for^="vkl"]:nth-of-type(6),
.horizontal-click > [name^="vkl"]:nth-of-type(7):checked ~ [for^="vkl"]:nth-of-type(7),
.horizontal-click > [name^="vkl"]:nth-of-type(8):checked ~ [for^="vkl"]:nth-of-type(8) {
background: #454545;
cursor: default;
NMitra
Денис, спасибо за дополнение!
Анонимный
Более простое решение...
http://jsfiddle.net/m3teersj/
NMitra
Согласна, что input нужно разместить рядом с div, тогда вместо трёх строк достаточно одной. Но вот transition с display не работает.
Штиф Васлер
Наталья, подскажите пожалуйста! Почему в моем варианте не работает transition? Никак не могу разобраться http://cssdeck.com/labs/nkk7vnqg
NMitra
Со свойством display анимация не работает (список возможных http://www.w3.org/TR/css3-transitions/#animatable-css )
Замените на visibility (см. http://shpargalkablog.ru/2012/12/display-visibility-css.html )
Штиф Васлер
Большое спасибо за подсказку!
Анонимный
День добрый.
Скрипт очень удобный, решил добавить к кнопкам не текст а картинку. Как переключаться между картинками по клику?

Роман.
Анонимный
Примерно так:
div class="horizontal-click"
input type="radio" name="anons" id="anons1" checked="checked"
label for="anons1"
img src="images/imgleft001.png" style="float: left;"
/label
div div
NMitra
Добрый день, лучше в стилях прописать background http://shpargalkablog.ru/2011/08/fon-dlya-saita-html.html Например для второй вкладки (здесь же можно с высотой поиграть, убрать текст)

.horizontal-click label[for="vkl2"] {
background-image: url(http://2.bp.blogspot.com/-c4ScvKxvKBs/TkoXOfNQFHI/AAAAAAAACLA/0x_aaffS0t0/s00/background.jpg);
background-size: cover;
}

Если поле активное

.horizontal-click > :checked + label[for="vkl2"] {
background-image: url(http://2.bp.blogspot.com/-c4ScvKxvKBs/TkoXOfNQFHI/AAAAAAAACLA/0x_aaffS0t0/s00/background.jpg);
}
Анонимный
Спасибо за ответ, но хочу сделать немного другое. Для .horizontal-click > :checked + label использую background-image. Для каждого label существует своя картинка: a href="#" id="btnM1". Задача изменять эту картинку на другую (.png), т.е переключать btnM1 по .horizontal-click > :checked + label.

Роман.
Анонимный
Натадья,

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

Роман.
NMitra
Честно говоря, не до конца понимаю что вы хотите:
1) http://jsfiddle.net/NMitra/8s6y8axt/ (одна картинка - для активного состояния, другая - для неактивного)
2) http://jsfiddle.net/NMitra/8s6y8axt/1/ (у каждого label своя картинка, которая меняется на общую картинку для активного состояния)
3) см. комментарий 36 (у каждого своя активная и неактивная картинка)
Анонимный
Да, я знаю про этот вариант. Хотел сделать следующее:

1) Для .horizontal-click > label установить единый background-color, но индивидуальные иконки (img.png)
пути к которым прописывать в CSS.

2) Единая подложка для
.horizontal-click > :checked + label {background-image: url('images/bg_slider.jpg'); background-repeat: no-repeat; cursor: default;}

Задача менять IMG1, IMG2 и т.д. при раскрытии активного аккордеона без изменения background-image в пункте 2.

Вариант коммента 39 отрабатывает все на 100%, но background-image большого размера, а IMG иконки весят 10кб.
Как подключить изменение IMG1-1 на IMG1-2 к .horizontal-click > :checked + label.

Перешерстил много примеров, ничего подобного не нашел.

Роман.
NMitra
Покажите пример того, что вы делаете (про какие иконки говорите?) на jsfiddle.net
Можно иконки добавлять поверх label с помощью :after и уже менять :after, а не label
Анонимный
Примерно так http://jsfiddle.net/linevision/v6nyrz3e/1/
В сложенном состоянии все картинки smile желтые, по клику меняется на зеленую
Анонимный
Не сохранилось, сейчас перекину
Анонимный
http://jsfiddle.net/linevision/v6nyrz3e/4/
Анонимный
Так более правильно http://jsfiddle.net/linevision/v6nyrz3e/
NMitra
Можно поменять картинки на SVG и фон менять стилями.
Можно брать прозрачные картинки и менять фон под ними.
Других вариантов нет, только менять саму картинку, то есть background-image.
Анонимный
Это печально. Картинки вставленные в пример теоретически должны быть фотографиями. При изменении анонса придется каждый раз отрисовывать background + foto, а так можно было бы перезаписывать img и обновлять папку на ftp.
NMitra
Можно заменять не адрес картинки, а картинку, расположенную по указанному адресу. Только нужно убрать предварительно кэширование.

О, вспомнила! Есть ещё background-blend-mode (для фона)
http://shpargalkablog.ru/2011/08/fon-dlya-saita-html.html#size
http://sarasoueidan.com/blog/compositing-and-blending-in-css/
Анонимный
Спасибо, интересная штука, надо попробовать.
Unknown
А подскажите как долден выглядеть предпоследний пример, чтобы работал как первый пример?
То есть, мне надо, чтобы при заходе на страницу в зависимости от текущего времени сервера по умолчанию открывалась определенная вкладка в горизонтальном аккордеоне.
NMitra
Тогда или PHP, или JS подключать нужно