Сейчас: 02:39:59   20-го апреля 2024 г.
UsefulScript.ruСкриптыРазныеСпойлер для сайта на CSS
105
294

Спойлер для сайта на CSS

Ранее мы уже рассмотрели два способа, позволяющих Вам создать на своем сайте спойлеры для показа и скрытия объемных материалов: Создаем свой собственный спойлер для сайта и Собственный спойлер с плавным открытием и скрытием содержимого.


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

Для наглядного примера работы предлагаемого нами скрипта спойлера на CSS, обратите внимание на пару спойлеров, находящихся ниже:


Нужно знать, как и что делать, чтобы текст появился под спойлером, а в заголовке спойлера было "Открыть-Закрыть".

Закрыть

Нужно знать, как и что делать, чтобы текст появился под спойлером, а в заголовке спойлера было "Открыть-Закрыть".

Закрыть







Для получения точно таких же спойлеров на CSS, как в примере, показанном выше, для начала необходимо добавить CSS код:

HTML код:
<style type="text/css">
 .
spoiler_desc {
    
background#333333;
    
padding0 5px;
    
border-radius0 0 5px 5px;
    
margin-top22px;
 }
 .
spoiler_desc p {
    
cursortext;
    
color#FFFFFF;
 
}
 .
spoiler_close {
    
displaynone;
    
width100%;
    
height22px;
    
background#FFFF66;
    
border-radius5px 5px 0 0;
    
text-indent10px;
    
cursor: default;
    
border-bottom1px dotted #000000;
    
positionabsolute;
    
top0;
    
left0;
 }
 .
spoiler_close:hover background#F5FF27; }
 
.spoiler_open:before {
    
content'Открыть';
    
border-bottom1px dotted #000000;
    
cursor: default;
    
text-indent10px;
    
border-radius5px 5px 0 0;
    
width100%;
    
height22px;
    
background#FFFF66;
    
displayblock;
    
positionabsolute;
    
top0;
    
left0;
 }
 .
spoiler_open:hover:before background#F5FF27; }
 
.spoiler_open {
    
margin5px 0 0 15px;
    
height23px;
    
width240px;
    
outlinenone;
    
floatleft;
    
positionrelative;
    
overflowhidden;
    -
webkit-transitionheight 0.3s ease;
    -
moz-transitionheight 0.3s ease;
    -
ms-transitionheight 0.3s ease;
    -
o-transitionheight 0.3s ease;
    
transitionheight 0.3s ease;
 }
 .
spoiler_open:focus height122px; }
 .
spoiler_open:focus .spoiler_close displayblock; }
 .
spoiler_open:focus:before displaynone; }
</
style>

Далее, в том месте Вашей странички, где Вы планируете использовать спойлеры, необходимо добавить код этих спойлеров:

HTML код:
<div class="spoiler_open" tabindex="1">
 <
div class="spoiler_desc">
  <
p>Нужно знатькак и что делатьчтобы текст появился под спойлером,
  
а в заголовке спойлера было "Открыть-Закрыть".</p>
 </
div>
 <
span tabindex="0" class="spoiler_close">Закрыть</span>
</
div>

<
div class="spoiler_open" tabindex="2">
 <
div class="spoiler_desc">
  <
p>Нужно знатькак и что делатьчтобы текст появился под спойлером,
  
а в заголовке спойлера было "Открыть-Закрыть".</p>
 </
div>
 <
span tabindex="0" class="spoiler_close">Закрыть</span>
</
div>

Если Вам необходимо сделать спойлеры, высота которых будет подстраиваться по содержимому, то стиль .spoiler_open:focus { height: 122px; } замените на .spoiler_open:focus { height: auto; }. Но, в таком случае пропадет эффект плавного открытия.


Если Вы не хотите оставлять под спойлерами пустое пространство, и чтобы текст не обтекал спойлер справа, то добавьте после спойлеров <div style="clear:both;"></div>.


Как видите, вполне неплохие спойлеры можно создавать и на CSS без использования JavaScript кода, что позволяет значительно увеличить скорость загрузки сайта, т.к. не приходится подгружать библиотеку jQuery.

Дата создания: 20:43:58 27.03.2013 г.
Дата обновления: 20:15:33 25.10.2014 г.
Посещений: 30187 раз(а).

Комментарии посетителей (27 шт.):
7Lexus
17
# 743
(18:59:40  04.04.2013 г.)

Если нужно, чтобы спойлеры располагались вертикально друг под другом - просто убираем float: left; в секции .spoiler_open
Ответить

Sergey1917
11
# 745
(00:30:15  06.04.2013 г.)

Спасибо за тему. Спойлер понравился. Но вот у меня не очень получилось.
1. Вместо Открыть - квадратики, Закрыть - нормально отображается.
2. Верхняя строчка текста под спойлером наполовину закрывает сам спойлер.
3. Черный фон под спойлером не наблюдается.
4. Исходит из 3. Светлый текст на светлом фоне практически не виден.
Подскажите, пожалуйста, как поправить?
Ответить

Administrator
4
# 747
(13:09:10  06.04.2013 г.)

1. Скорее всего, Вы вынесли CSS код в отдельный файл и его кодировка не UTF-8, смените кодировку CSS файла (т.к. "Открыть" прописано именно в CSS в отличии от "Закрыть").
2. Тут надо менять отступы в CSS части, т.к. у Вас на сайте наверняка другой шрифт, либо его размер и т.д.
3. Не знаю, что и предположить, возможно, где-то пересеклись стили.
Ответить

Sergey1917
-4
# 750
(13:33:26  06.04.2013 г.)

Показать сообщение
Большое спасибо за помощь. Кодировку исправил. Но теперь хотелось бы, чтоб «Открыть» тоже был в HTML. Это для добавления заголовка в сам спойлер, при верстке, и как сделать, чтобы они не зависели (спойлеры) друг от друга - на закрытие и открытие. Вроде идентификаторы (если я правильно понял) разные: tabindex=1 и tabindex=2. С остальным разобрался.
Ответить

Administrator
5
# 752
(14:07:29  06.04.2013 г.)

Может данный код Вам лучше подойдет - Спойлер на jQuery
Ответить

Sergey1917
2
# 753
(14:25:25  06.04.2013 г.)

Вопрос на счет переноса кода снимается. Спойлер на jQuery интересный конечно. Но этот красивый и без скрипта. У меня их, скриптов, и так уже набирается много, и нельзя упускать возможность обойтись без еще одного. Остался для меня нерешенным только вопрос: как сделать, чтобы они не зависели (спойлеры) друг от друга - на закрытие и открытие? Это не решаемо для этого спойлера?
Ответить

Administrator
1
# 755
(17:08:31  06.04.2013 г.)

Боюсь без JavaScript здесь не обойтись, т.к. в нашем случае все основано на элементе, получающем фокус. А когда фокус пропал (клик в другом месте), спойлер сворачивается.
Ответить

Sergey1917
0
# 769
(13:28:09  07.04.2013 г.)

Спойлер не виден в IE7. Так и должно быть? И можно ли это исправить?
Ответить

Administrator
0
# 772
(14:57:22  07.04.2013 г.)

На данной страничке тоже не работает? Если тут работает, то ищите ошибку у себя. У меня в IE8 все работает отлично.
Ответить

Sergey1917
2
# 774
(15:11:51  07.04.2013 г.)

На данной тоже не работает. Вместо спойлеров только две линии, ни на что не реагирующие.
Ответить

Administrator
3
# 788
(21:05:20  11.04.2013 г.)

Действительно, не работает еще и в IE6. На данный момент проблема не решена, но думаю это не так важно, т.к. количество пользователей, использующих IE версии ниже 8 ничтожно мало.
Ответить

Javascripter
-1
# 830
(23:08:44  08.05.2013 г.)

Главный минус: Спойлер закрывается при клике в любое место страницы.
Можно классы и анимацию в CSS прописать, а вот ставить их уже через JS. Это просто сделать и без jQ.
Ответить

7Lexus
-1
# 857
(10:46:56  16.05.2013 г.)

Мне кажется, что особого минуса в этом нет. Наверняка подавляющее большинство юзеров всё-таки не промахиваются.
Ответить

Федор
0
# 1447
(11:56:42  01.02.2014 г.)

Как перенести "Открыть" в html код?
Ответить

Drugman2
1
# 1450
(21:28:06  02.02.2014 г.)

Хорошая статья, все получилось, скажите, а можно что бы вместо "Открыть" был нужный мне текст и на каждом разный.
Ответить

Administrator
0
# 1717
(16:52:57  08.06.2014 г.)

Попробуйте обновленную версию - Скрипт CSS спойлера для сайта.
Ответить

Радуга
5
# 1483
(23:51:46  16.02.2014 г.)

Почему если в спойлере есть ссылка, то спойлер закрывается?
Ответить

Дмитрий
1
# 1621
(23:52:31  23.04.2014 г.)

Добрый вечер!
Хотелось бы подробнее узнать про механизм работы данного спойлера. На сколько я понял все базируется на tabindex т.к. без него ничего не работает. Но никак не пойму, почему теряется фокус при нажатии на кнопку закрыть, она ведь находится в блоке, который в фокусе.
Ответить

Алиса
0
# 1713
(23:59:14  07.06.2014 г.)

Как сделать, чтобы текст "Развернуть" можно было бы менять в коде html? Очень надо.
Ответить

Administrator
0
# 1714
(00:42:50  08.06.2014 г.)

Можно конечно попробовать через JavaScript изменять, но тогда это будет уже спойлер не на чистом CSS. Если очень надо, то воспользуйтесь одним из других скриптов спойлера на нашем сайте.
Ответить

Алиса
-1
# 1715
(01:45:06  08.06.2014 г.)

И как это сделать? Не проблема скрипт добавить, с кодом разобраться не могу. Просто именно этот спойлер крайне симпатично выглядит :) Хочу его поставить.
Ответить

Administrator
0
# 1716
(16:51:03  08.06.2014 г.)

Ну, что смог, то сделал - Скрипт CSS спойлера для сайта.
Ответить

Олег
0
# 2261
(00:31:26  12.02.2015 г.)

Очень интересный спойлер, а Вы не подскажете, как сделать что бы слова "Закрыть/Открыть" были расположены в различных местах (их несколько), а сам скрывающийся текст был расположен в одном месте.
Ответить

Сергей
1
# 2864
(23:12:19  03.12.2015 г.)

Очень помогло! Спасибо. Были бы ссылки на лайки, лайкнул бы.
Ответить

дэн
0
# 3636
(17:03:43  25.12.2016 г.)

Спасибо огромное :-) Отличный урок, а тем более спойлер открывается ПЛАВНО без ява скрипта! Ваш сайт меня часто выручает спасибо:)
Ответить

andr7
0
# 3715
(08:24:21  03.02.2017 г.)

Очень понравился спойлер. Но не могу решить проблему: использую спойлер для свертывания/развертывания меню при определенном сломе, а меню это ссылки. При клике по ссылке меню сворачивается, и ссылка не работает. Подскажите, что можно сделать?
Ответить

Administrator
1
# 3719
(13:50:49  05.02.2017 г.)

Спойлер сворачивается из-за потери фокуса и поэтому ссылки в теле спойлера работать не будут. Для разворачивающегося меня порекомендовал бы воспользоваться скриптом вертикального раздвижного меню.
Ответить

Закрыть
Ваше имя:
114 + 11 =
Добавить комментарий:
Ваше имя:
114 + 11 =

Перед публикацией все комментарии проходят обязательную модерацию!

Если Вы хотите задать какой-либо вопрос, то сделайте это на нашем форуме.
Таким образом, Вы сможете быстрее получить ответ на интересующий Вас вопрос.
Посетителей онлайн: 8

Какую CMS для сайта Вы предпочитаете?