レスポンシブなアコーディオン効果を実現するための CSS3 の詳細な説明

レスポンシブなアコーディオン効果を実現するための CSS3 の詳細な説明

最近、外国人が CSS3 を使用してアコーディオン効果を実現しているビデオを見たので、自分で学習した後で書き留め、将来の復習のためにブログの形式で記録しました。コード構造は次のとおりです (使用されているフォントは Genericons です)。

最終的な効果は次のようになります。

全画面表示:

画面幅が960px未満の場合:

ページ (index.html) の基本構造を見てみましょう。

<!DOCTYPE html>
<html lang="ja">
<ヘッド>
  <メタ文字セット="UTF-8">
  <meta name="viewport" content="width=デバイス幅、初期スケール=1.0">
  <title>ドキュメント</title>
  <link rel="スタイルシート" href="style.css">
</head>
<本文>
  <div class="コンテナ">
      <!--タイトル-->
    <ヘッダー>
      <h1>ソーシャルメディアでフォローしてください</h1>
    </ヘッダー>
      
      <!--アコーディオンセクション-->
    <ul class="accordion">
      <li class="tab">
        <div class="ソーシャルYouTube">
          ユーチューブ
        </div>
        <div class="content">
          <h1>ユーチューブ</h1>
          <p>Lorem ipsum dolor sit amet consectetur 
            adipisicing elit.Culpa, consectetur.</p>
        </div>
      </li>
      <li class="tab">
        <div class="ソーシャル フェイスブック">
          <a href="#">フェイスブック</a>
        </div>
        <div class="content">
          <h1>フェイスブック</h1>
          <p>Lorem ipsum dolor sit amet consectetur 
            adipisicing elit.Culpa, consectetur.</p>
        </div>
      </li>
      <li class="tab">
        <div class="ソーシャルツイッター">
          ツイッター
        </div>
        <div class="content">
          <h1>ツイッター</h1>
          <p>Lorem ipsum dolor sit amet consectetur 
            adipisicing elit.Culpa, consectetur.</p>
        </div>
      </li>
      <li class="tab">
        <div class="ソーシャルインスタグラム">
          インスタグラム
        </div>
        <div class="content">
          <h1>インスタグラム</h1>
          <p>Lorem ipsum dolor sit amet consectetur 
            adipisicing elit.Culpa, consectetur.</p>
        </div>
      </li>
      <li class="tab">
        <div class="ソーシャルリンクトイン">
          <a href="#">LinkedIn</a>
        </div>
        <div class="content">
          <h1>リンクトイン</h1>
          <p>Lorem ipsum dolor sit amet consectetur 
            adipisicing elit.Culpa, consectetur.</p>
        </div>
      </li>
       <li class="tab">
        <div class="social github">
          ギットハブ
        </div>
        <div class="content">
          <h1>GitHub</h1>
          <p>Lorem ipsum dolor sit amet consectetur 
            adipisicing elit.Culpa, consectetur.</p>
        </div>
      </li>
    </ul>
  </div>
</本文>
</html>

スタイル (style.css):

*{
  マージン: 0;
  パディング: 0;
  境界線: なし;
}

体{
  フォントファミリー: Arial、Helvetica、sans-serif;
  背景色: #222;
  色: #fff;
}

/*次のアイコンで使用するフォントを設定する*/
@フォントフェイス {
  フォントファミリ: 'Genericons';
  src: url('font/genericons-regular-webfont.woff') フォーマット('woff'),
  url('font/genericons-regular-webfont.eot') フォーマット('truetype');
}

/*外側のコンテナの幅を設定する*/
。容器{
  幅: 80%;
  マージン: 20px 自動;
}

ヘッダー h1{
  フォントサイズ: 2rem;
  パディング: 1rem;
  テキスト配置: 中央;
}

/*ここでフォントサイズが 0 に設定されていることに注意してください。そうしないと、非常に悪い画像が表示されます。リンクではコンテンツを表示したくないので、後で表示する必要があるテキストのフォントサイズを設定します。*/
。アコーディオン{
  幅: 100%;
  最小幅: 800px;
  高さ: 200px;
  背景色: #333;
  リストスタイル: なし;
  表示: ブロック;
  オーバーフロー: 非表示;
  フォントサイズ: 0;
}

/*.tab の下の .content の幅は 360px で、.tab の幅は .content が表示されている状態ではホバーしたときにのみ 450px になるため、各 li を inline-block に設定して一列に並べ、オーバーフローを非表示にします。また、幅が滑らかに増加するように transition を設定します。*/
。タブ{
  幅: 80ピクセル;
  高さ: 100%;
  表示: インラインブロック;
  位置: 相対的;
  マージン: 0;
  背景色: #444;
  境界線: 1px 実線 #333;
  オーバーフロー: 非表示;
  トランジション: すべて .5 秒の緩和 .1 秒。
}

.タブ:ホバー{
  幅: 450ピクセル;
}
.tab:hover .social a:after{
  変換: translateX(-80px);
}
.tab:hover .social a:before{
  変換: translateX(-100px);
}

/* 相対配置に設定します。そうしないと、.content の一部が隠れてしまいます */
.タブ .コンテンツ{
  位置: 相対的;
  幅: 360ピクセル;
  高さ: 100%;
  背景色: #fff;
  色: #333;
  左マージン: 80px;
  パディング: 50px 0 0 15px;
}

.タブ .コンテンツ h1{
  フォントサイズ: 2.5rem;
  上マージン: 20px;
}
.タブ .コンテンツ p{
  フォントサイズ: .85rem;
  行の高さ: 1.6;
}

/要素の幅と高さ、フォントをGenericonsに設定します。そうしないとアイコンは表示されず、白い空のフレームのみが表示されます。/
.social a:前、
.social a:after{
  位置: 絶対;
  幅: 80ピクセル;
  高さ: 200px;
  表示: ブロック;
  テキストインデント: 0;
  パディング上部: 90px;
  左パディング: 25px;
  font:normal 30px ジェネリコン;
  色: #fff;
  遷移: すべて 0.5 秒の緩和;
}

/*アイコンはマウスオーバーすると大きくなるため、after 疑似クラスのフォントとパディングをリセットし、margin-left を 80px に設定する必要があります。これにより、before 疑似クラスの小さいアイコンがデフォルトで表示されます */
.social a:after{
  フォントサイズ: 48px;
  パディング上部: 80px;
  左パディング: 20px;
  左マージン: 80px;
}

/*アイコンを追加*/
.youtube a:前、
.youtube a:after{
  コンテンツ: '\f213';
}

.youtube a:after{
  背景色: #fc0000;
}

.twitter a:以前、
.twitter a:after{
  コンテンツ: '\f202';
}

.twitter a:after{
  背景色: #6dc5dd;
}

.facebook a:前、
.facebook a:after{
  コンテンツ: '\f204';
}

.facebook a:after{
  背景色: #3b5998;
}

.linkedin a:before、
.linkedin a:after{
  コンテンツ: '\f208';
}

.linkedin a:after{
  背景色: #00a9cd;
}

.instagram a:前、
.instagram a:after{
  コンテンツ: '\f215';
}

.instagram a:after{
  背景色: #6dc993;
}

.github a:before、
.github a:after{
  コンテンツ: '\f200';
}

.github a:after{
  背景色: #6e5494;
}

/*最大画面幅が960pxの場合*/
@media(最大幅:960px){
  。容器{
    幅: 70%;
  }
    /*高さを自動に設定する*/
  。アコーディオン{
    最小幅: 450px;
    高さ: 自動;
  }

    /*li をブロックとして表示し、順番に並べます*/
  。タブ{
    幅: 100%;
    表示: ブロック;
    下部境界線: 1px 実線 #333;
  }
    /* 元の .tab:hover の幅は 450px なので、これを設定する必要があります。.tab の幅が 600px の場合、ホバー時に 150px の空白スペースができてしまい、望んでいる効果が得られません */
  .タブ:ホバー{
    幅: 100%;
  }
  .タブ .コンテンツ{
    幅: 85%;
  }
    /*対応する疑似クラスのパディング値を、ほぼ中央に表示されるように設定します*/
  .social a:before{
    パディング上部: 60px;
    左パディング: 25px;
  }
  .social a:after{
    パディング上部: 50px;
    左パディング: 20px;
  }
}

CSS3 でレスポンシブ アコーディオン効果を実現する方法についての記事はこれで終わりです。CSS3 レスポンシブ アコーディオンに関する関連コンテンツをさらにご覧になりたい場合は、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続きご覧ください。今後も 123WORDPRESS.COM をよろしくお願いいたします。

<<:  LeetCode の SQL 実装 (197. 気温上昇)

>>:  画像ソーシャルネットワーキングサイトのUIアプリケーションの比較分析(図)

推薦する

MACでMYSQLデータベースのパスワードを忘れた場合の解決策

Mac オペレーティングシステムで MYSQL データベースのパスワードを忘れた場合の簡単な解決策1...

反応ジャンプ後にルートが変更されてもページが更新されない場合の解決策

目次質問解決質問この問題には多くの理由があるようです。私の問題は、パラメータ付きのURLを更新できな...

Centos 7.4 サーバーの時刻同期設定方法 [NTP サービスに基づく]

この記事では、CentOS 7.4 サーバーで時刻同期を構成する方法について説明します。ご参考までに...

HTML スクロールバーのテキストエリア属性の設定

1.オーバーフローコンテンツのオーバーフロー設定(設定されたオブジェクトにスクロールバーを表示するか...

JavaScript の構造化代入の一般的なシナリオと例 5 つ

目次序文1. データを抽出する2. エイリアス値3. 動的プロパティ4. オブジェクトの分解における...

フォーム OnSubmit と input type=image の使用の概要

ここに <input type="image"> がある場合、この画...

MySQLのマスタースレーブレプリケーションと読み取り書き込み分離を理解するための記事

目次導入1. MySQL マスタースレーブレプリケーション1. MySQLレプリケーションタイプ2....

いくつかの重要なMySQL変数

MySQL 変数は数多くありますが、その中には注目に値するものもあります。ここでは、参考までに、注目...

Vue再帰コンポーネントの簡単な使用例

序文多くの学生は既に再帰に精通していると思います。アルゴリズムの問​​題を解決するために再帰がよく使...

Windows での MySQL スケジュールバックアップ スクリプトの実装

Windows サーバーでデータベース データを定期的にバックアップする場合は、Windows タス...

Ubuntu 18.04 MySQL 8.0 のインストールと設定方法のグラフィックチュートリアル

この記事では、MySQL 8.0のインストールと設定方法を参考までに紹介します。具体的な内容は以下の...

MySQL 5.7.18 のダウンロードとインストールの詳細な手順

MySql ダウンロード1. 公式サイトを開き、ダウンロード パスを見つけます。ダウンロード アドレ...

Ubuntu での mysql のインストールと使用 (一般版)

Ubuntu のバージョンに関係なく、MySQL データベースのインストールは基本的に同じです。具...

WeChatミニプログラムは同時通訳を利用して音声認識を実装します

私は同時通訳音声認識機能を使用して、WeChatアプレットのホームページの音声検索機能を実現しました...

HTML で自動ページジャンプを実現する 5 つの方法

前回の記事では、HTML ページが 3 秒後に自動的にジャンプする一般的な 3 つの方法を紹介しまし...