Как сделать плавно раскрывающийся DIV
Столкнулся с задачкой. Нужно было сделать плавно открывающуюся форму.
Результат будет вот таким:
[hana-code-insert name=’JavaScriptPost’ /]
Опишу более подробно как я все сделал.
Для начала я сверстал все необходимые элементы кнопки, поля формы, саму форму:
<div class="forma"> <div class="open_form">Открыть форму</div> <div class="sama_forma" > <form> <input type="text" value="" size="40" placeholder="Ваше Имя" /> <input type="email" value="" size="40" placeholder="Ваш мэйл" /> <input type="text" value="" size="40" placeholder="Заголовок статьи" /> <textarea placeholder="Ваша статья"></textarea> Решите пример: <input type="text" value="" size="2" maxlength="2" /> + 14 = 24 <input type="submit" value="Отправить" /> </form> </div> </div>
Опишу подробнее классы:
.forma — Блок для всех элементов.
.open_form — Кнопка для открытия формы.
.sama_forma — Форма для обратной связи со всеми полями
Затем добавил немного стилей, чтобы все смотрелось более органично:
.forma {
text-align: center;
width: 400px;
padding: 20px;
background: #fefefe;
border: 1px solid #000;
border-radius: 10px;
}
.open_form {
border: 1px solid #fc5f00;
border-radius: 20px;
font-size: 20px;
padding: 10px 25px;
background: #fa9050;
box-shadow: inset 0 1px 5px rgba(255,255,255,.6), inset 0 -15px 10px 5px #fc5f00, 0 1px 2px rgba(0,0,0,.2);
text-shadow: 1px 1px 0px #cc4f03;
width: 200px;
margin: 0 auto;
cursor: pointer;
}
.open_form:hover {
background: #fa9050;
box-shadow: inset 0 1px 5px rgba(255,255,255,.6), inset 0 -15px 5px 0px #fc5f00, 0 1px 2px rgba(0,0,0,.2);
}
.forma .sama_forma {
margin-top: 20px;
display: none;
}
Обратите внимание, что изначально для .forma .sama_forma стоит display:none
Отлично код мы подготовили.
Теперь заставим всю эту конструкцию шевелиться. Обязательно подключаем jQuery вот таким образом:
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
Когда все готово, добавим после формы скрипт:
<script>
$(document).click( function(event){
if( $(event.target).closest(".sama_forma").length )
return;
$(".sama_forma").slideUp("slow");
event.stopPropagation();
});
$('.open_form').click( function() {
$(this).siblings(".sama_forma").slideToggle("slow");
return false;
});
</script>
Строки скрипта со 2 по 7 заставляют скрыться объект с классом .sama_forma, при клике за его полями.
Строки с 8 по 11 — заставляют объект .sama_forma появиться при клике на объект с классом .open_form
Разбирался я с этим долго, но зато получилось. )
Вот такой код в итоге:
<!DOCTYPE html>
<html>
<head>
<title>Плавно откроем форму</title>
<!--Подключаем jQuery-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<style>
.forma {
text-align: center;
width: 400px;
padding: 20px;
background: #fefefe;
border: 1px solid #000;
border-radius: 10px;
}
.open_form {
border: 1px solid #fc5f00;
border-radius: 20px;
font-size: 20px;
padding: 10px 25px;
background: #fa9050;
box-shadow: inset 0 1px 5px rgba(255,255,255,.6), inset 0 -15px 10px 5px #fc5f00, 0 1px 2px rgba(0,0,0,.2);
text-shadow: 1px 1px 0px #cc4f03;
width: 200px;
margin: 0 auto;
cursor: pointer;
}
.open_form:hover {
background: #fa9050;
box-shadow: inset 0 1px 5px rgba(255,255,255,.6), inset 0 -15px 5px 0px #fc5f00, 0 1px 2px rgba(0,0,0,.2);
}
.forma .sama_forma {
margin-top: 20px;
display: none;
}
</style>
</head>
<body>
<div class="forma">
<div class="open_form">Открыть форму</div>
<div class="sama_forma" >
<form>
<input type="text" value="" size="40" placeholder="Ваше Имя" />
<input type="email" value="" size="40" placeholder="Ваш мэйл" />
<input type="text" value="" size="40" placeholder="Заголовок статьи" />
<textarea placeholder="Ваша статья"></textarea>
Решите пример: <input type="text" value="" size="2" maxlength="2" /> + 14 = 24
<input type="submit" value="Отправить" />
</form>
</div>
</div>
<script>
$(document).click( function(event){
if( $(event.target).closest(".sama_forma").length )
return;
$(".sama_forma").slideUp("slow");
event.stopPropagation();
});
$('.open_form').click( function() {
$(this).siblings(".sama_forma").slideToggle("slow");
return false;
});
</script>
</body>
</html>