jQueryのslideToggleでdisplay:flex;を保つ方法【JS/jQuery】

最終更新日:

公開日:2024-09-09

記事内に広告が含まれています。
jQueryのslideToggleでdisplay:flex;を保つ方法【JS/jQuery】

アコーディオンメニューなどでよく使われるjQueryのslideToggle
slideToggleで開閉させると、開閉する要素のdisplayプロパティの値がblockになってしまいflexで動作しない、なんて事がありました。その際にdisplay: flex;を保つ方法を詳しく解説していきます。

要素をhide();で非表示にする

まずは、以下のように開閉させたい要素を用意します。

<dl>
    <dt>開閉ボタン</dt>
    <dd>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
        <p>コンテンツ</p>
    </dd>
</dl>
dt {
    font-weight: bold;
    padding: 20px;
    background-color: #8FC051;
    cursor: pointer;
}
dd {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    gap: 20px;
    padding: 20px;
    background-color: #F2F2F2;
}
dd p {
    width: calc((100% - 20px) / 2);
    padding: 10px;
    background-color: #FFF;
}
開閉ボタン

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

上の状態の開閉メニューのddを最初に閉じた状態にし、jQueryを使用してdtをクリックで開閉するようにしていきます。

$(function(){
    $('dd').hide();
    $('dt').on('click', function(){
        $('dd').slideToggle();
    });
});
開閉ボタン

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

このように記述する事で、開閉した際にもddがdisplay: flex;を保ったまま開閉できます。
ポイントは、最初にjQueryでdisplay: flex;を保ちたい要素をhide()で非表示にする事です。その後は通常通りslideToggleで開閉させてください。

インラインスタイルでdisplay: flex;にする

次に、cssを使ってslideToggleを使用してもdisplay: flex;を保つ方法を紹介します。
あまり良い方法では無いかと思いますが、以下のようなcssでも可能でした。

dd {
    display: none;
}
dd[style*="display: block"] {
    display: flex!important;
}
$(function(){
    $('dt').on('click', function(){
        $('dd').slideToggle();
    });
});
開閉ボタン

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

コンテンツ

slideToggleでインラインスタイルでdisplay: block;になるのを利用して、importantを使用しdisplayをflexに設定しています。

いずれの方法でもslideToggleでdislayをflexに保つ事が可能ですので、場面に合わせて使い分けていただけらばと思います。

さいごに

いかがでしたでしょうか。
jQueryのslideToggleはよく使用するかと思いますので、いざという時に困らないよう覚えておくといいかと思います。

おすすめ記事

当ブログ運営者 ヒデ

北海道札幌市在住のフリーランスでWeb制作を行っているヒデです。Webコーディング(HTML・CSS・JSなど)やWordpressのカスタマイズ等のテクニック、困った時に確認できる分かりやすい解説を目標にして情報を発信していければと思っています。

当サイトに関するご意見・ご感想・ご要望または仕事のご依頼は以下のフォームよりお願い致します。

お問い合わせ お仕事のご依頼
PAGE TOP