Интересный вариант FAQ страницы с помощью CSS3
Как правило, FAQ страницы содержат в себе большое количество вопросов и ответов, что делает их очень массивными. Но практически каждый сайт не может обойтись без такой страницы. По-этому в этой статье я расскажу как с помощью CSS3 создать очень привлекательный и компактный вариант такой страницы.
Идея
Если вы посещали FAQ страницу Facebook'а, то вы тоже заметили этот интересный эффект: показывать только часть ответа на вопрос, а при нажатии открывается полный ответ. Конечно, я сразу захотел сделать подобное только с помощью СSS3.
HTML
Как обычно, начнем с начала:
<section class="faq-section">
<input type="checkbox" id="q1">
<label for="q1">Question?</label>
<p>... The intro paragraph that will be clipped ...</p>
<p>... Extra and optional paragraph ...</p>
</section>
- На картинке выше я обернул вопрос в label. Но если вы привыкли к "более правильному" подходу, можете обернуть его в заголовок.
- Использование label::before позволит нам создать правильную треугольную форму.
Как это работает?
Здесь не ракетостроение, все намного проще. Мы используем технику checkbox hack, которая опирается на переключение на с помощью .
CSS
Ниже находиться список стилей. Я привел некоторые комментарии для лучшего понимания.
/*Добавим немного пространства*/
.faq-section{
margin: 40px 0;
position: relative;
}
/*Прячем параграф*/
.faq-section p{
display: none;
}
/*Прячем чекбокс */
.faq-section input{
position: absolute;
z-index: 2;
cursor: pointer;
opacity: 0;
display: none\9; /* IE8 and below */
margin: 0;
width: 100%;
height: 36px;
}
/*Показать часть параграфа */
.faq-section label+p{
display: block;
color: #999;
font-size: .85em;
transition: all .15s ease-out;
/* Clipping text */
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
/*Если чекбокс отмечен, показуем весь параграф*/
.faq-section input[type=checkbox]:checked~p{
display: block;
color: #444;
font-size: 1em;
/* restore clipping defaults */
text-overflow: clip;
white-space: normal;
overflow: visible;
}
/*Стили для label*/
.faq-section label{
font-size: 1.2em;
background: #eee;
display: block;
position: relative;
height: 20px;
padding: 7px 10px;
font-weight: bold;
border: 1px solid #ddd;
border-left: 3px solid #888;
text-shadow: 0 1px 0 rgba(255,255,255,.5);
transition: all .15s ease-out;
}
.faq-section label::selection{
background: none;
}
.faq-section label:hover{
background: #f5f5f5;
}
/*Стили для отмеченого чекбокса*/
.faq-section input[type=checkbox]:checked~label{
border-color: #ff7f50;
background: #f5deb4;
background-image: linear-gradient(to bottom, #fff, #f5deb4);
box-shadow: 0 0 1px rgba(0,0,0,.4);
}
.faq-section label::before{
content: '';
position: absolute;
right: 4px;
top: 50%;
margin-top: -6px;
border: 6px solid transparent;
border-left-color: inherit;
}
.faq-section input[type=checkbox]:checked~label::before{
border: 6px solid transparent;
border-top-color: inherit;
margin-top: -3px;
right: 10px;
}
Готово!
Надеюсь вам понравилась эта статья, и она поможет вам в ваших проектах.
Рубрика: CSS





Очень интересная статья!
Согласен! Не менее интереснее твоего аватара 😉