要素のposition
をabsolute
に設定し、margin-bottom
が、margin-bottom
は効果がありません。
HTML:
<div id='container'></div>
CSS:
#container {
border: 1px solid red;
position: absolute;
top: 0px;
right: 0px;
width: 300px;
margin-bottom: 50px; // this line isn't working
}
何を期待していますかmargin-bottom
要素がその上側に配置されている場合に行うことは?
margin-bottom
は、エレメントにabsolute
プロパティがない場合にのみ、top
ly-positionedエレメントに対して何かを行います。
これはあまりタイムリーな答えではないことは知っていますが、これを解決する方法はあります。 absolute
lyに配置された要素内に、負の下部マージンと負の下部マージンと同じサイズの高さの「スペーサー」要素を追加できます。
HTML:
<div id="container">
<div class="spacer"></div>
</div>
CSS:
// same container code, but you should remove the margin-bottom as it has no effect
// spacer code, made it a class as you may need to use it often
.spacer {
height: 50px;
margin: 0 0 -50px 0;
/* margin: 20px 0 -50px 0; use this if you want #container to have a 'bottom padding', in this case of 20px */
background: transparent; /* you'll need this if #container's parent element has a different background from #container itself */
}
構築 Joey's answer 、よりクリーンなマークアップのために、CSS :after
- selectorを使用して、目的の下部マージンにスペーサーを追加します。
#container:after {
position: absolute;
content: "";
bottom: -40px;
height: 40px;
width: 1px;
}
position
を設定するには、relative
をmargin
に設定する必要があります。
margin-bottom
、margin-left
およびmargin-right
will [〜#〜] not [〜#〜]要素がposition: absolute
。
例:HTML:
<img src="whatever.png"/>
CSS:
img {
position: relative;
margin: 0 auto;
}
私は解決策を見つけました!!!
コンテナの最小高さを設定し、位置を絶対位置から継承位置に変更する必要があり、topプロパティを選択した値に設定し、表示をインラインブロックにする必要があります。
これは、絶対位置を使用して、topプロパティで要素を移動し、マージンを追加しようとしたときに機能しました。
min-height: 42px;
display: inline-block;
top: 6px;
position: inherit;
ユースケースによっては、position: absolute
からposition: relative
はこの問題も解決します。位置を変更できる場合、問題を解決する最も簡単な方法になります。それ以外の場合、Joeyのスペーサーがトリックを行います。
私は前もって高さがわからないので、代わりに、マージンにしたい高さで絶対的に配置されたの最後に目に見えない要素を追加しました。
私の場合、絶対に配置された要素はテーブルなので、高さ100pxの空の行を追加しました。次に、テーブルの下部にあるはずの境界線が、代わりに「tr:nth-last-of-type(2)td」に進みました。
お役に立てれば。