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

UsefulScript.ruСкриптыРазныеСпойлер для сайта на CSS

105

293

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

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

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


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

Закрыть

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

Закрыть

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

HTML код:

<style type="text/css">
 .spoiler_desc {
    background: #333333;
    padding: 0 5px;
    border-radius: 0 0 5px 5px;
    margin-top: 22px;
 }
 .spoiler_desc p {
    cursor: text;
    color: #FFFFFF;
 }
 .spoiler_close {
    display: none;
    width: 100%;
    height: 22px;
    background: #FFFF66;
    border-radius: 5px 5px 0 0;
    text-indent: 10px;
    cursor: default;
    border-bottom: 1px dotted #000000;
    position: absolute;
    top: 0;
    left: 0;
 }
 .spoiler_close:hover { background: #F5FF27; }
 .spoiler_open:before {
    content: 'Открыть';
    border-bottom: 1px dotted #000000;
    cursor: default;
    text-indent: 10px;
    border-radius: 5px 5px 0 0;
    width: 100%;
    height: 22px;
    background: #FFFF66;
    display: block;
    position: absolute;
    top: 0;
    left: 0;
 }
 . spoiler_open:hover:before { background: #F5FF27; }
 .spoiler_open {
    margin: 5px 0 0 15px;
    height: 23px;
    width: 240px;
    outline: none;
    float: left;
    position: relative;
    overflow: hidden;
    -webkit-transition: height 0.3s ease;
    -moz-transition: height 0.3s ease;
    -ms-transition: height 0.3s ease;
    -o-transition: height 0.3s ease;
    transition: height 0.3s ease;
 }
 .spoiler_open:focus { height: 122px; }
 .spoiler_open:focus .spoiler_close { display: block; }
 .spoiler_open:focus:before { display: none; }
</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></div>.

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

к. не приходится подгружать библиотеку jQuery.

Дата создания: 20:43:58 27.03.2013 г.

Дата обновления: 20:15:33 25.10.2014 г.

Посещений: 29758 раз(а).

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

Закрыть

Ваше имя:

525 + 16 =

Добавить комментарий:

Ваше имя:

525 + 16 =

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

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

— HTML | MDN

HTML-элемент <details> используется для раскрытия скрытой (дополнительной) информации.

Виджет раскрытия обычно представлен на экране с использованием небольшого треугольника, который поворачивается, чтобы показать состояние открытия / закрытия, с меткой рядом с треугольником. Если первый дочерний элемент элемента <details> является <summary>, содержимое элемента <summary> используется в качестве метки для виджета раскрытия.

Content categoriesFlow content, sectioning root, interactive content, palpable content.
Permitted contentOne <summary> element followed by flow content.
Tag omissionНет, открывающий и закрывающий теги обязательны.
Permitted parentsAny element that accepts flow content.
Permitted ARIA rolesNone
DOM interfaceHTMLDetailsElement (en-US)

Элемент поддерживает только глобальные атрибуты.

open

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

<details>
  <summary>Some details</summary>
  <p>More info about the details. </p>
</details>
<details open>
  <summary>Even more details</summary>
  <p>Here are even more details about the details.</p>
</details>

Result

**Примечание:**Если приведённый выше пример не работает, см. Browser compatibility , чтобы определить поддерживает ли вообще ваш браузер эту функцию.

Следуя более новой спецификации, Firefox отображает элемент summary как display: list-item и маркер можно стилизовать так же, как и элементы списка.

Следуя более старой спецификации, в Chrome and Safari существует пользовательский псевдо-элемент ::-webkit-details-marker, с помощью которого можно стилизовать маркер.

Для кроссбраузерной стилизации маркера, чтобы скрыть дефолтный и добавить кастомный, необходимо для Firefox установить элементу summary {display: block;}, а для Chrome и Safari’s установить ::-webkit-details-marker {display: none;}.

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

HTML

<details>
  <summary>Some details</summary>
  <p>More info about the details.</p>
</details>

CSS

summary {
  display: block;
}
  summary::-webkit-details-marker {
  display: none;
}
summary::before {
  content: '\25B6';
  padding-right: 0.5em;
}
details[open] > summary::before {
  content: '\25BC';
}

Result

SpecificationStatus
Comment
HTML Living Standard
Определение ‘<details>’ в этой спецификации.
Живой стандарт
HTML 5.1
Определение ‘<details>’ в этой спецификации.
РекомендацияInitial definition

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.

  • <summary>

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.
Want to get more involved?

Learn how to contribute.

This page was last modified on by MDN contributors.

Только CSS и HTML выпадающий спойлер

спросил

5 лет, 7 месяцев назад

Изменено 5 лет, 7 месяцев назад

Просмотрено 4к раз

Я пытаюсь создать раскрывающийся спойлер CSS и HTML с открытой анимацией.

Я начал с этого jsfiddle но margin-top:-100%; работает не очень хорошо.

 margin-top:-100%;
 

Любое решение для гладкого анимированного выпадающего контейнера?

  • HTML
  • CSS
  • раскрывающийся список
2

У вас ошибка в CSS. Вы указали .spoiler > div для показать состояние и только .spoiler для скрыть состояние . Вы должны указать одно и то же для обоих, и анимация будет работать гладко.

 .spoilerbutton {
    дисплей:блок;
    поле: 5px 0;
}
.спойлер {
    переполнение: скрыто;
    фон: #f5f5f5;
}
.спойлер > раздел {
    -webkit-transition: все 0.2s проще;
    -moz-transition: маржа 0.2s легкость;
    -o-transition: все 0,2 секунды облегчены;
    переход: маржа 0,2 с легкость;
}
.spoilerbutton[value="Показать"] + .spoiler > div {
    маржа-верх:-100%;
}
.spoilerbutton[value="Скрыть"] + .spoiler > div {
    отступ: 5px;
} 
 <тип ввода = "кнопка" значение = "Показать">
<дел><дел>
ПОМЕСТИТЕ КОНТЕНТ, КОТОРЫЙ ХОТИТЕ СКРЫТЬ ЗДЕСЬ
    ПОМЕСТИТЕ КОНТЕНТ, КОТОРЫЙ ХОТИТЕ СКРЫТЬ ЗДЕСЬ
    ПОМЕСТИТЕ КОНТЕНТ, КОТОРЫЙ ХОТИТЕ СКРЫТЬ ЗДЕСЬ
    ПОМЕСТИТЕ КОНТЕНТ, КОТОРЫЙ ХОТИТЕ СКРЫТЬ ЗДЕСЬ
    ПОМЕСТИТЕ КОНТЕНТ, КОТОРЫЙ ХОТИТЕ СКРЫТЬ ЗДЕСЬ
    ПОМЕСТИТЕ КОНТЕНТ, КОТОРЫЙ ХОТИТЕ СКРЫТЬ ЗДЕСЬ