レスポンシブなアコーディオン効果を実現するための 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アプリケーションの比較分析(図)

推薦する

nginxのシンプル転送リクエストのサーバーとロケーション設定の詳しい説明

nginx のサーバーと場所の構成を簡単に整理してみましょう。たとえば、URL: www.mask_...

Docker プライマリ ネットワーク ポート マッピング構成

ポートマッピングDocker コンテナを起動する前にポート マッピングを行わないと、コンテナ外部のネ...

VUE+Canvasはデスクトップピンボールブロック破壊ゲームのサンプルコードを実装します

誰もがピンボールやレンガ崩しのゲームをプレイしたことがあるでしょう。左と右のキーを使用して、下にある...

Linux でリモート MySQL データベースを手動で展開する方法の詳細な説明

1. mysql をインストールします。次のコマンドを実行して、YUM ソースを更新します。 rpm...

K8S クラスターを構築し、Hyper-V で Docker をインストールする方法

Win10 システムをインストールしていて、k8s クラスターを構築する場合、Win10 に付属する...

HTMLハイパーリンクタグAのTARGET属性の詳細な説明

ハイパーリンク <a> タグはリンク ポイントを表します。これは英語の単語「anchor...

JavaScriptの浅いコピーと深いコピーについての簡単な説明

目次1. 直接譲渡2. 浅いコピー3. ディープコピー1. JSONオブジェクトメソッド2. 再帰コ...

Linux インストール MySQL チュートリアル (バイナリ配布)

このチュートリアルでは、LinuxにMySQLをインストールする詳細な手順を参考までに紹介します。具...

Vueはプログレスバーの変更効果を実現します

この記事ではVueを使ってプログレスバーの変更を簡単に実装してみましたので参考にしてください。具体的...

Nginx で Angular プロジェクトを展開する際の落とし穴

コンパイル後にAngularプロジェクトをNginxにデプロイする方法をオンラインで検索すると、ほと...

JavaScript排他的思考の具体的な実装

前回のブログで、Xiao Xiong は関連する要素の操作方法を更新しましたが、同じ要素のグループが...

HTML におけるメタの役割について (インターネットから収集および分類)

W3Cschoolではこのように説明しています<meta> 要素は、検索エンジン向けの説...

HTMLの行間設定方法と問題点

<p></p> の行間隔を設定するには、style="line-h...

TypeScript 開発のための 6 つの実用的なヒント

目次1. 開発前にエンティティの種類を決定する2. インターフェースをリクエストするときは、使用する...

Centos サーバーに MySql をデプロイし、Navicat に接続するプロセスの詳細な説明

(1)サーバー構成: [root@localhost ~]# cd /usr/local/src/ ...