想像してみてください:
<div class="outer">
<div class="inner">
</div>
</div>
どこ:
.outer
は列構造の一部であり、その幅はパーセンタイルであるため流動的です。.inner
は、fixed
の位置要素を表します。この要素は、.outer
要素。ただし、その位置は垂直方向に同じままであるため、fixed
です。次のCSSを使用してこのレイアウトを実装しようとしました。
.outer {
position: relative;
width: %;
}
.inner {
position: fixed;
width: 100%;
}
しかしながら、 .inner
は、その幅をrelative
親のパーセンテージとして計算しません。代わりに、ウィンドウ/ドキュメントの全幅を埋めます。 left
またはright
プロパティを試行すると、同じ親が品質を無視します。
これを回避する方法はありますか?
.outer {
position: relative;
width: %;
}
.inner {
position: fixed;
width: inherit;
}
それでうまくいくはずです。
position: fixed
は常にウィンドウ/ブラウザに関連しているため、問題の解決に使用することはできません。固定配置は、要素をDOMの自然な順序から削除するため、外部div内に残りません。したがって、コンテナーではなくブラウザーの全幅を使用するのはなぜですか。使用する必要があるのは、position: absolute
を.inner
に対して相対的に配置するための.outer
です。要素を配置し、その幅を.outer
divに含めることができます。
これを使って :
.inner {位置:固定;左:0;右:0;
}
固定要素は、幅として絶対値のみを取ります。親コンテナが流動的である場合(幅はパーセンテージ)、固定要素の幅を動的に設定する必要があります。包装容器の幅を取得し、粘着性のある要素に設定する必要があります。
CSS
.outer {width: 25%;}
.inner {position: fixed;}
JS
var fixedWidth = $('.outer').css('width');
$('.inner').css('width', fixedWidth);
さらに、ウィンドウのサイズが変更された場合に備えて、イベントリスナーを追加できます。
JS
window.addEventListener('resize', resize);
function resize() {
var fixedWidth = $('.outer').css('width');
$('.inner').css('width', fixedWidth);
}
このようなものを使用するのはどうですか フィドル ?
.outer {
width: 20%;
height: 1200px;
margin-left: 5%;
float: left;
}
.inner {
height: 200px;
position: fixed;
top: 0;
background: orange;
right: 75%;
left: 5%;
}
position:fixed
は常にビューポート/ブラウザウィンドウに相対的であり、祖先には相対的ではありません。
あなたはこれを見ることができます jsfiddle あなたの問題の修正を説明するために私が作った、あなたはそれがあなたが望むことをするのとまったく同じようにこのコードを使うことができます。