2016-07-15 16 views
0

水平方向にスクロール可能な固定幅のラッパーに含まれる項目の水平リストが必要です。外側ラッパーは相対位置を持ちます。アイテムの1つに、絶対配置されたdivが含まれています。white-space:nowrapは内部要素に影響を与えるようです。位置:absolute

アウターラッパーをスクロールするとき、緑のオーバーレイが同じ位置にとどまることを期待していました。私はポジションを考えました:アブソリュートは常に、定義された位置(外側のラッパーになる)を持つ最初の祖先に相対的ですか?

私は空白を使用しています:#raprapperが行内の項目を取得するためのnowrapです。

#outer-wrapper { 
 
    position: relative; 
 
    width: 300px; 
 
    height: 150px; 
 
    overflow: scroll; 
 
} 
 

 
#wrapper { 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 

 
#one { 
 
    background-color: red; 
 
} 
 

 
#two { 
 
    background-color: blue; 
 
} 
 

 
.box { 
 
    white-space: normal; 
 
    display: inline-block; 
 
    width: 200px; 
 
    height: 150px; 
 
} 
 

 
.overlay { 
 
    background-color: green; 
 
    position: absolute; 
 
    bottom: 0px; 
 
    left: 0px; 
 
    width: 100%; 
 
    height: 40px; 
 
}
<div id="outer-wrapper"> 
 
    <div id="wrapper"> 
 
    <div id="one" class="box"> 
 
     <div class="overlay"></div> 
 
    </div> 
 
    <div id="two" class="box"></div> 
 
    </div> 
 
</div>

これは完全に固定されていないが、私は、それは一例であるとして残留するマークアップをしたいと思います。

そして私は本当に水平リストの固定幅を定義することはできません。

+0

をそれは同じ位置に滞在していることはありません..です '左:?0 ' –

+0

はそれがでスクロールさ@Paulie_D #wrapper。少なくとも私のクロムとファイアフォックスに。それはあなたには当てはまりませんか? –

+1

期待どおりに動作しています。絶対配置された要素はスクロールし、固定された位置決め要素を検索していますが、固定されているのは、最も近い位置にある親要素ではなく、ビューポートに関連付けられています。 –

答えて

0

質問が正しく表示されていれば、HTMLとCSSだけでは不可能です。ただし、次のようにあなたはjQueryを使ってそれを達成することができます

$(function() { 
 
    var wrapper = $('#outer-wrapper'); 
 
    
 
    $('#outer-wrapper').scroll(function() { 
 
    $('.overlay').css({ 
 
     'marginLeft': wrapper.scrollLeft() 
 
    }); 
 
    }); 
 
});
#outer-wrapper { 
 
    position: relative; 
 
    width: 300px; 
 
    height: 150px; 
 
    overflow: scroll; 
 
} 
 

 
#wrapper { 
 
    white-space: nowrap; 
 
    display: inline-block; 
 
} 
 

 
#one { 
 
    background-color: red; 
 
} 
 

 
#two { 
 
    background-color: blue; 
 
} 
 

 
.box { 
 
    white-space: normal; 
 
    display: inline-block; 
 
    width: 200px; 
 
    height: 150px; 
 
} 
 

 
.overlay { 
 
    background-color: green; 
 
    position: absolute; 
 
    bottom: 0px; 
 
    left: 0px; 
 
    width: 100%; 
 
    height: 40px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<div id="outer-wrapper"> 
 
    <div id="wrapper"> 
 
    <div id="one" class="box"> 
 
     <div class="overlay"></div> 
 
    </div> 
 
    <div id="two" class="box"></div> 
 
    </div> 
 
</div>

+0

私はあなたが正しく質問を持っていることを確認できます;-)あなたの答えをありがとう! –

+0

@MatthiasKrieft他の人も恩恵を受けることができるようにあなたの問題を解決したら、投票して、回答を受け入れてください(必ずしも私のものではありません)。 –

+0

私はあなたの答えを受け入れました。私の問題は純粋なCSSで解決できないからです。私はアプリケーションの反応部分に余裕のためのロジックを実装します –

関連する問題