🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

1回答

4795閲覧

Bootstrapでz-indexの指定

退会済みユーザー

退会済みユーザー

総合スコア0

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

3クリップ

投稿2019/10/05 16:21

HTML

1<nav class="navbar navbar-expand-lg navbar-light bg-light custom-vh-top2"> 2 <button type="button" class="navbar-toggler mx-auto" data-toggle="collapse" data-target="#aaa" name="button"> 3 <span class="navbar-toggler-icon"></span> 4 </button> 5 <div class="collapse navbar-collapse mt-5" id="aaa"> 6 <div class="container custom-vh-top2"> 7 <div class="row"> 8 <div class="col-12 col-lg-3 cus-index20"> 9 <button type="button" class="cus-btn w-75 " name="button" onclick="location.href='#about'">ABOUT</button> 10 </div> 11 </div> 12 </div> 13 </div> 14 </nav>

css

1@charset "utf-8"; 2 3.cus-btn{ 4 border: 3px solid #3498db; 5 background:none; 6 border-radius:10px; 7 padding:10px 20px; 8 font-size:30px; 9 font-family:"montserrat"; 10 cursor:pointer; 11 transition:.8s; 12 position:relative; 13 overflow:hidden; 14 color:#3498db; 15} 16 17.cus-btn:hover{ 18 color:#fff ; 19} 20 21.cus-btn::before{ 22 content:""; 23 position:absolute; 24 left:0; 25 width:100%; 26 height:0%; 27 background:#3498db; 28 z-index:-1; 29 transition:.8s; 30 top:0; 31 border-radius:0 0 50% 50%; 32} 33 34.cus-btn:hover::before{ 35 height:200%; 36} 37 38.cus-index20{ 39 z-index:20; 40}

navbar内で、ホバーすると動きが出るボタンを作りました。
このときのCSSにおける
.cus-index20{
z-index:20;
}

z-index:-1;
の関係がわかりません。
colに指定されているposition:relative;とz:index:20の組み合わせると、
子要素でのz-index:-1は効かないと理解しています。

それなれなのにz-index:-1が必要な理由がよくわかりません。

また、cus-index20はcolのところに書かないとならず、rowやcontainerのところに書くとうまく動きが出ないこともわかりません。

わかるかたよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

s8_chu

2019/10/19 13:00

個人的には、 CSS タグも付与されているほうがより適切に感じるので、もしよろしければ対応をよろしくお願いします。
guest

回答1

0

前提

今回の回答では、以下のコードを用います。これは今回生じている問題に関係のない部分を省いたコードです。このコードでは、 .z-index20 クラスを div.col-12 要素の祖先へ適用すると、ボタンのホバー時のアニメーションが正常に動作しないようになっています (動作確認用リンク)。

HTML

1<div class="container bg-dark"> 2 <div class="row"> 3 <div class="col-12 z-index20"> 4 <button type="button" class="btn">ABOUT</button> 5 </div> 6 </div> 7</div>

CSS

1*, 2::after, 3::before { 4 box-sizing: border-box; 5} 6 7button, 8html [type="button"] { 9 -webkit-appearance: button; 10} 11 12body { 13 margin: 0; 14} 15 16.bg-dark { 17 background-color: #343a40; 18} 19 20.container { 21 width: 100%; 22 padding: 0 15px; 23 margin: 0 auto; 24} 25 26.row { 27 display: flex; 28 flex-wrap: wrap; 29 margin: 0 -15px; 30} 31 32.col-12 { 33 flex: 0 0 100%; 34 max-width: 100%; 35} 36 37.btn { 38 border: 3px solid #3498db; 39 background: none; 40 border-radius: 10px; 41 padding: 10px 20px; 42 font-size: 30px; 43 font-family: "montserrat"; 44 cursor: pointer; 45 position: relative; 46 overflow: hidden; 47 color: #3498db; 48} 49 50.btn:hover { 51 color: #fff; 52} 53 54.btn::before { 55 content: ""; 56 position: absolute; 57 top: 0; 58 left: 0; 59 width: 100%; 60 background: #3498db; 61 z-index: -1; 62} 63 64.btn:hover::before { 65 height: 200%; 66} 67 68.z-index20 { 69 z-index: 20; 70}

回答

colに指定されているposition:relative;とz:index:20の組み合わせると、
子要素でのz-index:-1は効かないと理解しています。

それなれなのにz-index:-1が必要な理由がよくわかりません。

いいえ、「子要素での z-index プロパティ」は祖先要素で生成されたスタックコンテキストにおいて効果がありますz-index: -1 は祖先要素におけるスタックコンテキストでの描画順序を変更しています。


また、cus-index20はcolのところに書かないとならず、rowやcontainerのところに書くとうまく動きが出ないこともわかりません。

この挙動は、 z-index プロパティやスタックコンテキストの効果について理解しておくと理解がしやすくなります。以下でこれら二つについて説明します。

z-index プロパティとは

z-index プロパティに整数値を指定することで、スタックコンテキストにおける要素の描画順序 (重なる順序) を指定することが出来ます。また、 z-index プロパティに整数値を指定すると、その要素がスタックコンテキストを確立します。ここで、 z-index プロパティは位置指定された要素を適用対象の要素としています。そのため、 position プロパティの値が static の要素では z-index プロパティの値は auto となります。

9.9.1 Specifying the stack level: the 'z-index' property

z-indexプロパティの適用対象が位置指定要素であることが示されている。
z-indexプロパティに整数値を指定するとスタックコンテキストを生成し、autoであれば生成しないことが書かれている。

スタックコンテキストとは

スタックコンテキストは、 z-index プロパティによる描画順序の影響が及ぶ範囲を示した概念です。スタックコンテキスト内での z-index プロパティの描画順序は、その他のスタックコンテキストに影響を及ぼしません。スタックコンテキストは主に、特定の CSS プロパティが指定されている場合に生成されますが、ルート要素は常にスタックコンテキストを生成します。

9.9.1 Specifying the stack level: the 'z-index' property

Each box belongs to one stacking context. Each positioned box in a given stacking context has an integer stack level, which is its position on the z-axis relative other stack levels within the same stacking context. Boxes with greater stack levels are always formatted in front of boxes with lower stack levels. Boxes may have negative stack levels. Boxes with the same stack level in a stacking context are stacked back-to-front according to document tree order.

The root element forms the root stacking context. Other stacking contexts are generated by any positioned element (including relatively positioned elements) having a computed value of 'z-index' other than 'auto'. Stacking contexts are not necessarily related to containing blocks. In future levels of CSS, other properties may introduce stacking contexts, for example 'opacity' [CSS3COLOR].

ここで、今回問題となっている挙動を理解するにあたって必要となるスタックコンテキストの生成条件を挙げておきます。

  • ルート要素は常にスタックコンテキストを生成する。
  • z-index プロパティの値が auto 以外の位置指定要素はスタックコンテキストを生成する。
  • z-index プロパティの値が auto 以外のとき、 flex アイテムはスタックコンテキストを生成する。

    § 4.3. Flex Item Z-Ordering

    Flex items paint exactly the same as inline blocks [CSS21], except that order-modified document order is used in place of raw document order, and z-index values other than auto create a stacking context even if position is static (behaving exactly as if position were relative).


以上を踏まえたうえで、改めて回答文の冒頭に載せたコードをみます (動作確認用リンク)。 div.col-12 要素に .z-index20 クラスが指定されているとき、生成されているスタックコンテキストは、

  • ルート要素
  • div.col-12 要素
  • button.btn::before 擬似要素

の三つです。そして、 button.btn::before 擬似要素は、 div.col-12 要素のスタックコンテキストに所属しており、 z-index プロパティの値は -1 であるため、 div.container.bg-dark 要素よりも上で、 button.btn 要素よりも下の位置に配置されます。

次に、 div.col-12 要素の祖先要素 (今回は .row 要素とする) へ .z-index20 クラスが指定されたときを考えてみます (動作確認用リンク)。このとき生成されているスタックコンテキストは、

  • ルート要素
  • button.btn::before 擬似要素

の二つになります。すると、 button.btn::before 擬似要素はルート要素のスタックコンテキストに所属します。これにより、 button.btn::before 擬似要素はルート要素より上で、 div.container.bg-dark 要素や body 要素よりも下の位置に配置されます。そうすると、 button.btn::before 擬似要素は隠れ、ホバー時に button 要素の文字色のみが変化しているように見えます。これが .cus-index20 クラスを移動させたときの挙動の変化の原因です。この動作は、適切な位置でスタックコンテキストを生成することで解決することが出来ます (動作例)。

投稿2019/10/19 13:09

s8_chu

総合スコア14731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問