固定divを親コンテナの100%幅に設定します


83

いくつかのパディングのあるラッパーがあり、次にパーセンテージ幅(40%)のフローティング相対divがあります。

フローティング相対divの中に、親と同じサイズにしたい固定divがあります。固定divがドキュメントのフローから削除されているため、ラッパーのパディングが無視されていることを理解しています。

HTML

<div id="wrapper">
  <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
  </div>
</div>

CSS

body { 
  height: 20000px 
}  
#wrapper {
  padding: 10%;
}  
#wrap { 
  float: left;
  position: relative;
  width: 40%; 
  background: #ccc; 
} 
#fixed { 
  position: fixed;
  width: inherit;
  padding: 0px;
  height: 10px;
  background-color: #333;
}

これが義務的なフィドルです:http//jsfiddle.net/C93mk/489/

誰かがこれを達成する方法を知っていますか?

混乱して申し訳ありませんが、私が達成しようとしていることの詳細を示すためにフィドルを修正しました: http //jsfiddle.net/EVYRE/4/

回答:


41

.wrapperのパディングの代わりに、.wrapコンテナのマージンを使用できます。

body{ height:20000px }
#wrapper { padding: 0%; }
#wrap{ 
    float: left;
    position: relative;
    margin: 10%;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px; 
    height:10px;
    background-color:#333;    
}

jsfiddle


私がしていることをよりよく説明するために私のフィドルを更新しました:jsfiddle.net/EVYRE/4
Jack Murdoch

@ JackMurdoch、jsなしで私が見つける唯一の方法は、calcforrightleftプロパティを使用することです。jsfiddleを
YD1m 2013

ラッパーが最大幅(例では600px)未満に縮小されている場合、これは機能しませんが、JavaScriptの外部で実行することはできません。助けてくれてありがとう。
ジャックマードック

5
それは実際には機能しません。このフィドルjsfiddle.net/EVYRE/4を見てください。#sidebarの幅は彼の親(#sidebar_wrap)を基準にしていますが、そうではなく、彼の親をオーバーフローさせます。
mlb 2014

これは、固定要素とウィンドウの間にdivが1つしかないためにのみ機能すると思います。これは、ウィンドウ幅の100%ではない要素に固定要素が何度もネストされている場合は機能しません
Jay

3

どの程度、この

$( document ).ready(function() {
    $('#fixed').width($('#wrap').width());
});

jqueryを使用することで、あらゆる種類の幅を設定できます:)

編集:コメントの夢で述べられているように、この効果のためだけにJQueryを使用することは無意味であり、逆効果ですらあります。この例は、ページ上の他のものにJQueryを使用している人々のために作成し、この部分にも使用することを検討しています。ご不便をおかけして申し訳ございません。


「フローティング相対div内に、親と同じサイズにしたい固定divがあります」-「#wra​​p」内に、「#wra​​p」divと同じサイズにしたい「#fixed」があります。 (高さはすでに設定されているので、変更しませんでした)。どこが取れなかったのか教えてください。そして、結果のどの部分が他の答えと異なりますか?
Hristo Valkanov 2013

2
ねえバディ、攻撃はありません。実際の質問は、jQueryを導入したcssで回答を提供することでした。これは、回答よりも提案であるはずです。
dreamweiver 2013

余白を付けて他のソリューションに賛成したことも知っていますが、なぜ誰もjqueryソリューションを配置できないのかわかりません。今から5〜6か月後に誰かがグーグルでこの質問を見つけて、jqueryソリューションが彼のケースにより適していると考えると想像してみてください。
Hristo Valkanov 2013

1
私はあなたのソリューションがjqueryスコープに関しては完璧であるが、単純なcssでは完璧ではないことに同意します。私がJquerylibを使用していないとき、あなたが投稿したようなjqueryで簡単な解決策を見つけたので、私がそれを使用することを期待しますか?Jquerylibファイルは圧縮された32KB / 91.6 KB(プロダクションモード)/ 252 KB(開発モード)。価値がない場合、jQuerylibを使用することは実際には実行可能ではありません。サイトでのパフォーマンスに関するjQueryまたはキーポイントの1つの考えられる欠点
dreamweiver 2013

4
ウィンドウのサイズを変更すると、これが壊れます。今、あなたはサイズ変更の計算をしなければなりません、かっこいい、高価に聞こえます。nty
ジェイ

3

親に変換を追加してみて(何もする必要はなく、変換がゼロになる可能性があります)、固定された子の幅を100%に設定します

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 40%; 
    background:#ccc; 
    transform: translate(0, 0);
}
#fixed{ 
    position:fixed;
    width:100%;
    padding:0px;
    height:10px;
    background-color:#333;
}
<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>


1

絶対配置を使用して、フッターを親divのベースに固定できます。また、ラップに10pxのpadding-bottomを追加しました(フッターの高さに一致します)。絶対位置は、すでに位置相対属性を指定しているため、フローの外側ではなく、親divを基準にしています。

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    padding-bottom: 10px;
    position: relative;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:absolute;
    width:100%;
    left: 0;
    bottom: 0;
    padding:0px;
    height:10px;
    background-color:#333;

}

http://jsfiddle.net/C93mk/497/


私は最初にこれを試しましたが、問題は、スクロールすると残りの
div

1

コンテナは親要素の幅の40%です

ただし、position:fixedを使用すると、幅はビューポート(ドキュメント)の幅に基づきます。

考えてみると、親要素には10%のパディング(左と右)があることに気付きました。これは、要素のページ幅全体の80%を意味します。したがって、固定要素は全幅の80%に基づいて40%にする必要があります

したがって、#fixedクラスを次のように変更する必要があります。

#fixed{ 
    position:fixed;
    width: calc(80% * 0.4);
    height:10px;
    background-color:#333;
}

sass、postcss、または別のcssコンパイラを使用する場合は、変数を使用して、親要素のパディング値を変更するときにレイアウトが壊れないようにすることができます。

これが更新されたフィドルです http://jsfiddle.net/C93mk/2343/

私はそれが役立つことを願っています、よろしく


0

あなたの最新のの上にjsfiddle、あなただけ一つのことを逃しました:

#sidebar_wrap {
  width:40%;
  height:200px;
  background:green;
  float:right;
}
#sidebar {
  width:inherit;
  margin-top:10px;
  background-color:limegreen;
  position:fixed;
  max-width: 240px; /*This is you missed*/
}

しかし、これはどのようにあなたの問題を解決しますか?簡単です。最初に予想よりも大きい理由を説明しましょう。

固定要素は#sidebar、この要素で定義されると、他のすべての固定要素と同様、独自のサイズを取得するためのベースとしてサイズ幅ウィンドウを使用しますwidth:inheritと、#sidebar_wrap幅の値として40%を持っている、そして計算されますwindow.width * 40%、そして、あなたの窓の幅は、あなたよりも大きいときであれば.container幅は、#sidebarより大きくなり#sidebar_wrapます。

このように、を#sidebar_wrap大きくしないように、にmax-widthを設定する必要があります#sidebar_wrap

動作するコードを示すこのjsfiddleを確認し、これがどのように機能するかをよりよく説明してください。


-3

パーセントの代わりにpxを削除Padding: 10%;または使用するのために.wrap

例を参照してください:http//jsfiddle.net/C93mk/493/

HTML:

<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>

CSS:

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 200px; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px;
    height:10px;
    background-color:#333;

}

彼は幅が#wrapのパーセンテージである必要があります。しかし、あなたは修正を入れました。
Achintha Samindika 2013

これは、固定要素の幅を手動で設定するのと同じことであり、まったく役に立ちません
Jay
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.