相対(フロートなし)の無次元マークアップ

このテーマに触発されました
これがどのように機能するかの例

1.はじめに


相対クラスがあり、その中にテキストがあり、幅を設定しないと想像してください。
#bar{
position:relative;
border:5px solid #00FFFF;
padding:10px;
height:200px;
}
ラバーブロックを取得します。
<div id="bar">
text
</div>


同時に、ブロックには不変のパディング+ボーダーとラバー幅があり、width_px + padding_px + border_px = 100%になります。
絶対ブロックの場合、このトリックはロールしません。

2.レベルによるブロックの分離


相対ブロックの相互関係は、z-indexのようにレイヤーで発生します。 つまり、1つのレイヤーのみで、ブロックは相互作用し、他のブロックには影響しません。

たとえば、黒のブロックは灰色の内側にあり、緑のブロックは黒の内側にあります。

絶対ブロックは、それらが横たわるレイヤーの上隅を基準とした座標を持ちます。 正確な座標(上、左、右、下)が指定されていない場合、それらは相対として機能し、他のブロックに対してシフトします。

3.フロートなしのサイドバーの実装


最初の2つのプロパティに基づいて、高さ= 0で、同じレイヤー上にいくつかの相対(または特定の絶対長さで拡張不可能な)ブロックを作成できます。 つまり、パディングプロパティを使用して、相互に関連するブロックは水平方向にのみシフトします(垂直方向にはシフトしません)。 そして、これらの各ブロック(レイヤー)の内部では、メニューやその他の知恵を実現できます。


唯一の制限は、幅を使用できないことです:ストレッチブロックでは100%。

CSS:
#leftbar{
position:absolute;
height:0px;
width:198px;
margin:0px;
padding:0px;
top:0px;
}
#rightbar{
position:relative;
padding:0px 0px 0px 200px;
margin:0px;
height:0px;
}
#sidebar{
position:relative;
border:1px solid black;
background:#808080;
height:200px;
}
#menu{
position:relative;
border:1px solid black;
background:red;
height:20px;
}
#text{
position:relative;
background:white;
}


HTML:
<div id="rightbar">
<div id="menu">
menu
</div>
<div id="text">
text bar
</div>
</div>
<div id="leftbar">
<div id="sidebar">
left side bar
</div>
</div>

結果:


ps IEとの互換性のために、左のバーの絶対値が使用されていると言わなければなりません。 Opera / FireFoxでは、相対+高さ= 0で取得できます。
仕組みの例

Source: https://habr.com/ru/post/J48453/


All Articles