<div>
<p></p>
</div>
div, p {
padding: 0;
border : none;
height : 100px;
margin-top : 0;
margin-bottom: 0;
}
div {
width: 80%;
background:#ccc;
}
p {
width: 200px;
background:#ddd;
}
pの右マージンを0, 左マージンをautoにします。
p {
margin-right: 0;
margin-left : auto;
}
auto
の値は以下の式から導かれ、結果としてpはdivの中で右寄せされます。
margin-left
+ width
+ margin-right
(padding, borderはともに0である)p {
float :right;
margin: 0;
}
浮動化という副作用を伴いますが、pはdivの中で右寄せされます。
pをdivの右端に絶対配置する方法です。
divがpの包含ブロックを形成するように、divにはposition:relative
を指定します。
div {
position: relative;
}
p {
position: absolute;
right : 0;
margin : 0;
}
right
の代わりにleft
を使っても同様の表示結果にできます。
ブラウザのバグによりright
が効かない状況(IE6で実際にあります)で有効な方法です。
div {
position: relative;
}
p {
position : absolute;
left : 100%;
margin-left: -200px;
}
絶対配置の基準位置をdivではなく初期包含ブロックにする方法です。
pがちょうどdivの右端に位置するように、bodyとhtmlのmargin
とpadding
を0にしておきます。
body, html {
padding: 0;
margin : 0;
}
p {
position: absolute;
right : 20%;
margin : 0px;
}
position:relativeによりpを本来の位置からずらします。
ボックスサイズが内容物に合わせた大きさへ強制的に調整される(IE6)バグのため、IE6ではうまくいきません。
p {
margin-left: 100%;
position : relative;
right : 200px;/* left: -200pxでも可 */
}
ただし、この方法ではdirection:rtl
の場合に、margin-left
の値が無視されautoとして計算されるので右寄せにはなりません(たとえmargin-right:autoを指定しても、「マージン詰め」が行われ、margin-right:0になる)。
p {
margin-left : -200px;
margin-right: auto;
position : relative;
left : 100%;/* right: -100%でも可 */
}
margin-right:auto
はpのwidthと左右マージンが「制約過多」にならないようにするためで、これがないとdirection:rtl
の場合にmargin-left
の値が無視されてしまいます。
div {
max-width: 201px;
}
p {
margin-left : 1px;
}