2017-08-06 1 views
2

が動作していない私は、このHTMLコードを持っている:位置:スティッキー

<div class="header"> 
<div class="desc">Description</div> 
<div class="logo"><img src=""/></div> 
<div class="navbar"></div></div> 

.headerが150ピクセルの高さを有します。 .navbarの高さは20pxです。ユーザーがスクロールすると、.navbarが一番上に表示されます。だから私はCSSに行き、位置を設定しました:stickyとtop:0。しかし、これはうまくいかなかった。私は当初、firefoxは支持的な立場ではないと考えました。しかし、それは実際のデモを見ることができたためではありません。私はそれについてgoogledしかし何も役に立たなかった。なぜこれが機能していないのか誰もが知っていますか?

+2

あなたのCSSを表示していないので...スティッキーは、含まれているdiv(ヘッダー)にオーバーフローが隠されているか、またはautoでない場合にのみ機能します。チェックするものかもしれない。 – pinkfloydx33

+0

これを調べている他の人にとって、直接の親が 'display:flex'の場合、' position:sticky'はしばしばうまくいきません。 – user568458

答えて

3

あなたはヘッダの外にナビゲーションバーを移動する場合、それは正常に動作します。下記参照。そのため、MDNによれば

要素は、文書の通常の流れに従って配置し、次いで右その流れのルートにと上部の値に基づいてブロックを含むを、相対オフセットされています、下部、および左。

含むブロックについて:

含むブロックは、要素が比較的だから、

を配置されている祖先、私は誤解していないとき、ナビゲーションバーが配置されていますビューポートの外にスクロールされるとすぐにヘッダー内のオフセット0になります(明らかに、それはもう見ることができません)。

.navbar { 
 
    background: hotpink; 
 
    width: 100%; 
 
    height: 50px; 
 
    position: -webkit-sticky; 
 
    position: sticky; 
 
    top: 0; 
 
} 
 

 
.header { 
 
    height: 150px; 
 
    background: grey; 
 
} 
 

 
body { 
 
    height: 800px; 
 
    position: relative; 
 
}
<div class="header"> 
 
<div class="desc">Description</div> 
 
<div class="logo"><img src=""/></div> 
 
</div> 
 

 
<div class="navbar"></div>

+0

あなたの答えをありがとう! – Wolfuryo

+1

質問のようにヘッダーの要素としてnavbarを使うと、やはり粘着性があります。しかし、その容器が終わるまでのみ。最初は「説明」のすぐ下に表示され、下にスクロールすると灰色のヘッダーを移動します。灰色の領域の終わりでは、コンテナ(=ヘッダ)が終了すると停止します。この答えでは、navbarコンテナは本体なので、最初は灰色のヘッダの後ろから始まり、すべて下にスクロールします。 – Neepsnikeep

0

あなたのHTMLコードには、ナビゲーションバー

.header { 
height: 150px; 
background-color: #d1d1d1; 
} 

.navbar { 
    background: #999; 
    border-bottom: 1px solid #333; 
    border-top: 1px solid #333; 
    color: #FFF; 
    margin: 0; 
    padding: 2px 0 0 12px; 
    position: -webkit-sticky; 
    position: sticky; 
    top: -1px; 
} 

ホープ

<div class="header"> 
<div class="desc">Description</div> 
<div class="logo"><img src=""/></div> 
<div class="navbar"></div></div> 

と書き込みCSSクラスがあるとして、これは役立ちます

+0

私はすでにこれを試みています。私はposition:stickyとtop:0を.header要素に追加しようとしましたが、それは動作しますが、それは私が望むものではありません。 – Wolfuryo

+0

私はヘッダーコンテナからnavbarを移動しようとしました、それは動作しています –

0

.navbar要素は、ヘッダのような別の容器内にないときにどういうわけか、あなたのコードにのみ機能します。私はそれを移動し、それは正常に動作します。 I created a codepen snippet for that, check it out

<header> 
    <div class="logo">Logo</div> 
    <div class="description"><div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Quo, veritatis.</div></div> 
</header> 
<div class="navbar"> 
    <ul> 
     <li><a href="#">navitem1</a></li> 
     <li><a href="#">navitem2</a></li> 
     <li><a href="#">navitem3</a></li> 
     <li><a href="#">navitem4</a></li> 
    </ul> 
</div> 

position:stickyあなたがcanIuse上で見ることができるように、非常に良いサポートされています。もちろんIEは現在のところサポートはありませんが、新しいEdgeバージョンはこれを完全にサポートします!

しかし、私はこのトピックに関するいくつかの興味深い記事を見つけました地平線に良いニュースがあります。私は次の時に、より良いブラウザサポートが続くと思います。

+0

答えをありがとう! – Wolfuryo

3

bodyの要素がoverflow-x: hidden;に設定されているため、これに該当する他の人には、ポジティブスティッキーが機能しませんでした。

+0

あなたは私に多くの時間を節約しました。いくつかのリスタイルをしていて、私の人生の理由を突き止めることができなかった理由は、スティッキーの動きが止まった理由です。第三者がHTMLや本文にオーバーフロースタイルを追加していたことが判明しました。うん! – mysticflute

+0

これも私を助けてくれました。ありがとう! – Popmatik