1

クリックするとulが開くドロップダウンメニューを作成しようとしています。問題は、「もっと見る」ボタンを常に正確な場所に配置し、ドロップダウンをその下の中央に開くことです。

下のリンクに行くと、私が何を意味するかがわかります。希望どおりに開きますが、[もっと見る] をクリックしてドロップダウンを閉じると、ヘッダーをそのままにしておきたいときにヘッダーが左に移動します。

これをさまざまな場所で使用できるように構築しているため、「ハードコーディング」サイズはオプションではありません。

助けてください!:)

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

4

1 に答える 1

0

display: none;ドキュメント フローから要素を削除します。これが、親 div のサイズが変更される理由です。一方、visibility: hidden;要素をドキュメント フロー内に保持しながら非表示にします。

できることは、<ul>要素の表示プロパティを操作する代わりに設定visibility: hidden;するheight: 0;ことです。これにより、展開されていないリンクは、バンドルされている UL 要素の幅を引き続き使用します。

ちょっとハックですが、仕事を終わらせる必要があります。

jQuery UI で何も表示しない代わりに可視性を操作するには.animate({opacity: 1})、fadeIn() と fadeOut() に使用し.animate({opacity: 0})ます。

于 2012-05-27T19:42:03.310 に答える