右サイドバー
↑のように左側が幅可変、右側が幅固定の場合は逆の場合より難しいです。(↑の例は左も幅固定)
float:rightを指定してHTML上で先に右の固定幅領域を記述する場合は簡単ですが、普通は左から記述と思います。
まず、
左側の可変部分に
floatを指定しないと横幅は最大値がとられ、次の領域は右ではなく下になります。
↑は左の可変幅領域に
float:leftを指定し、右の固定幅領域に
float:rightを指定しています。
この場合だと、左の可変幅領域の幅がブラウザによって確保される大きさが違い、
場合によっては左の領域内で%指定の
widthを使いたい場合に最大幅分とれなくなります。
また、もし全体の横幅から左の領域の最小幅を引いた残りの幅が右の領域の横幅よりも少ない場合、右の領域は下に落ちます。
↑は左の領域に
padding-right:100px、右の領域に
margin-left:-100pxを指定しています。
参考のため左の領域に
width:180pxを指定しています。
ブラウザによって
paddingと
borderの位置関係が変わるのですが、
左領域の
borderが右領域にはみだしても右の領域は落ちずに表示されます。
これで左領域の幅を指定しなければ右の領域は落ちません。
左領域には
paddingを100px指定しているため、右領域と左領域の文章は重なりません。
左領域に%で
min-widthや
widthを指定すればある程度の横幅を確保できます。
100%-
widthが右分の100px未満の場合はブラウザによっては崩れます。
親領域を
position:relative
左を
width:100%;
padding-right:100px
右を
position:absolute;
top:0px;
right:0px;
width:100px
してます。
左の
widthが100%ですが、右領域は
position:absoluteで
top:0pxなので重なって表示される。
左の
padding-right:100pxで、領域が重なっても中の文章は重ならない。
これなら崩れることはなく左の可変幅領域に最大幅をとらせられますが、
右に
top:0pxを指定するため、
position:relative;な親要素で囲む必要があります。
また、
position:absolute;な右領域分の高さは確保されないので
右領域より左領域の方が確実に高さが大きいか親要素で高さを確保する必要がある。