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()

Другие вопросы по тегам