CSS выпадающее выравнивание
Я пытаюсь создать выпадающее меню, которое, когда вы нажимаете, откроет ул. Дело в том, что я хочу, чтобы кнопка "Просмотреть больше" всегда была точно там, где она есть, и раскрывающийся список, чтобы он находился по центру под ней.
если вы перейдете по ссылке ниже, вы поймете, что я имею в виду. он открывается точно так, как я хочу, но если вы закроете раскрывающийся список, нажав "Просмотреть больше", вы увидите, что заголовок переместится влево, когда я хочу, чтобы он оставался именно там, где он есть.
Я строю это так, чтобы его можно было использовать во многих разных местах, поэтому "жесткое" кодирование размеров не вариант.
Пожалуйста помоги!:)
HTML
<div id="testcontainer">
<a href="javascript:;" class="dropdown-activator" dropdownContent="#dropdown-content-340">
<span>View More!</span>
</a>
<ul class="dropdown-content" id="dropdown-content-340">
<li><a href="http://www.google.com" class="googleIcon">Google</a></li>
<li><a href="http://www.yahoo.com" class="yahooIcon">Yahoo</a></li>
<li><a href="http://www.bing.com" class="bingIcon">Bing</a></li>
</ul>
</div>
<div id="testcontainer2">
<a href="javascript:;" class="dropdown-activator" dropdownContent="#dropdown-content-350">
<span>View More!</span>
</a>
<ul class="dropdown-content" id="dropdown-content-350">
<li><a href="http://www.google.com" class="googleIcon">Google</a></li>
<li><a href="http://www.yahoo.com" class="yahooIcon">THIS IS A TEST FOR WIDER SHIT</a></li>
<li><a href="http://www.bing.com" class="bingIcon">Bing</a></li>
</ul>
</div>
<div id="testcontainer3">
<a href="javascript:;" class="dropdown-activator" dropdownContent="#dropdown-content-400">
<span>View More!</span>
</a>
<ul class="dropdown-content" id="dropdown-container-400">
<li><a href="http://www.google.com" class="googleIcon">GOOOOOOOOOOOOOOOOOOOOOGLEASDASDSASD</a></li>
<li><a href="http://www.yahoo.com" class="yahooIcon">Yahoo</a></li>
<li><a href="http://www.bing.com" class="bingIcon">Bing</a></li>
</ul>
</div>
CSS
#testcontainer {
position: absolute;
top: 20px;
left: 100px;
text-align: center;
}
#testcontainer2 {
position: absolute;
top: 20px;
left: 150px;
text-align: center;
}
#testcontainer3 {
position: absolute;
top: 200px;
left: 500px;
text-align: center;
}
.dropdown-activator-active {
background-color: #000;
color: #fff;
}
.dropdown a {
display: inline-block;
}
.dropdown-activator {
display: inline-block;
border: 1px solid black;
padding: 3px;
}
.dropdown-content {
visibility: hidden;
height: 0;
opacity: 0;
position: relative;
text-align: left;
margin: 0 auto;
border: 1px solid black;
}
.dropdown-content-active {
visibility: visible;
height: auto;
opacity: 1;
}
.dropdown-content ul li {
list-style: none;
}
JQuery
$(function(){
$(".dropdown-activator").click(function() {
$this = $(this);
var current = $this.attr('dropdownContent');
if (!$(current).hasClass('dropdown-content-active')) {
$this.addClass("dropdown-activator-active", 100);
$(current).addClass('dropdown-content-active', 100, function() {
$('html').unbind('click');
$('html').not($this).one('click', function() {
$(current).prev().removeClass("dropdown-activator-active", 100);
$(current).removeClass('dropdown-content-active', 100);
});
});
} else {
$this.removeClass("dropdown-activator-active", 100);
$(current).removeClass('dropdown-content-active', 100)
}
});
});
Вы можете увидеть пример этого здесь www.chrisworrell.com (временно)
1 ответ
display: none;
удаляет ваш элемент из потока документов, поэтому размер родительского элемента div изменяется. С другой стороны, visibility: hidden;
скрывает ваш элемент, сохраняя его в потоке документов.
Что вы можете сделать, это вместо манипулирования свойством display вашего <ul>
элемент, набор visibility: hidden;
а также height: 0;
Таким образом, нерасширенная ссылка будет продолжать использовать ширину элемента UL, с которым она связана.
Это отчасти хакерски, но должно закончить работу.
Чтобы манипулировать видимостью вместо отображения ни одного с помощью пользовательского интерфейса jQuery, используйте .animate({opacity: 1})
для fadeIn() и .animate({opacity: 0})
для fadeOut()