これを行うには多くの方法がありますが、これが私の見解です。
これは私が使用するレイアウトです。は、真下のノッチ用の で<nav>
上部に固定されています。<div>
コンテンツは、ナビゲーションとノッチの高さに等しいパディング トップを持つ両方の下にあります。
+--------------------------------+--+
| | |
| nav (fixed) | | <-- the content is below these fixeds,
| | | which have a higher z-index
+--------------------------------+ |
| notch (fixed) | |
+--------------------------------+ |
| |
| |
| |
| content |
| section |
| (padding-top = nav+notch heights) |
| |
| |
+-----------------------------------+
流動的なレイアウトが必要であると想定するので、FlexBox (http://www.w3.org/TR/css3-flexbox/) を使用して、ブラウザーのサイズが変更されたときにノッチを所定の位置に維持することにしました。レイアウトが固定されている場合は、FlexBox を必要とせず、フレキシブル コンテナーにノッチを配置する場所を計算する必要のない、より簡単なソリューションがいくつかあります。
他の部分はかなり簡単なはずなので、ノッチの内訳は次のとおりです<div>
+---------------------------------------------------+
| | | | |
| spacing | notch | notch | spacing |
| (flexible) | left | right | (flexible) |
| | | | |
+---------------------------------------------------+
外側<div>
の 2 つの は曲げられ、 と同じbackground-color
です<nav>
。次に、内側の 2 つのノッチでグラデーションを使用して三角形を作成します。
background: -webkit-linear-gradient(
top left,
rgba(145, 145, 145, 1) 0%,
rgba(145, 145, 145, 1) 50%,
transparent 50%,
transparent 100%
);
左上と右上からグラデーションを開始することで、<div>
s は対角線の途中まで埋められます。
残りは、ナビゲーション リンクをクリックしたときにノッチを配置する場所を決定するだけです。<div>
これを行うには、ユーザーがクリックした場所を特定した後、フレキシブル s に幅を追加および削除します。屈曲している要素の幅を加算および減算するときに FlexBox がどのように機能するかを理解するには少し時間がかかりますが、コードを調べることでそれを確認できます。
-webkit- プレフィックスを使用して Chrome でこれらすべてを行ったので、Chrome または Safari でこの JSFiddle を実行してください: http://jsfiddle.net/dwJbq/
前に述べたように、これを行う方法は他にもいくつかあります。また、流動的なレイアウトを使用しない場合は、はるかに簡単になります。あなたが試すことができる別のアイデアは、すべてのナビゲーションリンクにノッチを付け、クリックされたリンクの下にノッチを表示/非表示にすることです. これには何も計算する必要はなく、ノッチの背景を変更するだけです。
これを行う方法の例を次に示します: http://jsfiddle.net/V4K6K/1/