2017-07-22 8 views
0

短信質問:下の最初のリンクをクリックして、右に余白が表示される理由を教えてください。相対配置ブロックに存在しない右マージンが表示される

ロング質問

私はGoogle Chromeは絶対的および相対的位置付けのブロックは異なるグラフィカルな表現を示している理由を理解したいと思います。

絶対配置されたブロックでは、Chromeは予想通りに要素を表示します。

相対配置ブロックでは、要素の幅がさらに何かを示します。マージンやパディングのように見えますが、このdivの余白と余白をゼロにしていますが、Chrome Inspectツールでも同じように見えます。

相対divがその幅に対してどのように「拡張」しているかを見てください。

inspected relative div screenshot

そしてここで、絶対divが、この "拡張機能" を持っていません。

inspected absolute div screenshot

そして、ここではこれを証明することができるコードです。

.wrapper { 
 
    border: solid 1px red; 
 
    display: block; 
 
    width: 300px; 
 
    position: relative; 
 
    height: 150px; 
 
} 
 

 
.absolute-class, .relative-class { 
 
display: block; 
 
width: 100px; 
 
left: 20px; 
 
font-size: 24px; 
 
} 
 

 
.absolute-class { 
 
position: absolute; 
 
top: 10px; 
 
} 
 

 
.relative-class { 
 
position: relative; 
 
top: 30px; 
 
}
<body> 
 
    <div class="wrapper"> 
 
     <div class="absolute-class">Text 1</div> 
 
     <div class="relative-class">Text 2</div> 
 
    </div> 
 
</body>

私はこの余分な「余裕」は、私が開発していますページ上の水平方向のスクロールを引き起こしていると思うので、私は、このことについて心配しています。ですから、私はこの問題を解決できるように、これが何であるかを理解したいと思います。

+0

display: inline-block;を使用することができます使用します「マージン」が水平スクロールを引き起こしている私が開発しているページでは、ラッパーdivのために 'overflow:auto'を設定していますが、相対位置要素が実際にそれまで伸びていればスクロールバーが表示されますが、そうではありません。あなたが解決しようとしている、おそらくこのコードに反映されていません。 – CBroe

+0

オートマージンのようです。ラッパーdivを調べると、同様の仮想マージンが確認できます。実際には奇妙なのは、幅の横にある相対配置されたdivに左マージンを指定すると、Chromeはこの自動右マージンを再計算しないことです。左マージンが自動であるかのように自動右マージンを計算します左側)を指定すると同時に、指定した左余白を表示します。私はChromeがこれをやっている理由を知っていませんが、Chromeですから、このような奇妙な事実を引っ張っているのは驚きではありません。 – BoltClock

+0

@CBroeはい、そうです。私はあなたが言ったことを行うことによってスクロールを再現しようとしました、そして、本当にスクロールを表示しませんでした。しかし、私の実際のプロジェクトでは、スクロールに影響します。私はちょうどここにそれを持って来るのに十分な問題を分離しなかった。だから私はちょうどここに来て、このファントムマージンが何であるか尋ねる。 –

答えて

0

これはleft:20pxと固定幅を設定するのでdivの外に出るので、leftはdivをラッパーdivの外側にプッシュします。 "私はこの余分なと思うので、私は、このことについて心配している" _ padding-left:20px;

.wrapper { 
 
    border: solid 1px red; 
 
    display: block; 
 
    width: 300px; 
 
    position: relative; 
 
    height: 150px; 
 
} 
 

 
.absolute-class, .relative-class { 
 
display: block; 
 
width: 100px; 
 
padding-left: 20px; 
 
font-size: 24px; 
 
} 
 

 
.absolute-class { 
 
position: absolute; 
 
top: 10px; 
 
} 
 

 
.relative-class { 
 
position: relative; 
 
top: 30px; 
 
display: inline-block; 
 
}
<body> 
 
    <div class="wrapper"> 
 
     <div class="absolute-class">Text 1</div> 
 
     <div class="relative-class">Text 2</div> 
 
    </div> 
 
</body>

それとも、また.relative-class

.wrapper { 
 
    border: solid 1px red; 
 
    display: block; 
 
    width: 300px; 
 
    position: relative; 
 
    height: 150px; 
 
} 
 

 
.absolute-class, .relative-class { 
 
display: block; 
 
width: 100px; 
 
left: 20px; 
 
font-size: 24px; 
 
} 
 

 
.absolute-class { 
 
position: absolute; 
 
top: 10px; 
 
} 
 

 
.relative-class { 
 
position: relative; 
 
top: 30px; 
 
display: inline-block; 
 
}
<body> 
 
    <div class="wrapper"> 
 
     <div class="absolute-class">Text 1</div> 
 
     <div class="relative-class">Text 2</div> 
 
    </div> 
 
</body>

+0

おそらく私の問題は、パディング・レフトで解決します。しかし、それは質問に答えることはできません。 '.relative-class'から' display:inline-block'を削除すると、** right **にはまだこの_extra margin_が表示されます。私はちょうどこれが何であるか知りたい。 Chrome Inspect Toolsではmargin-rightで定義された数字は表示されないため、マージンではないことはわかりますが、それは何ですか? –

+0

最初の画像をもう一度確認してください。 Chromeがこの余分な幅を** margin **とみなす方法を示すものに置き換えました。 –

+0

これは、ラッパーに300pxの幅を、テキストdivに100pxの幅を与えているため、自動余白です。したがって、相対的な位置を使用すると、300pxの幅が必要になります。それはあなたがテキストのために与えた100pxをカバーし、他のスペースは空であるためデフォルトのマージンとして表示されます。そして20pxを左に置くと、divを20pxのラッパーの外側にプッシュします。だから、それは300pxの合計幅を維持するので、divの外のように見えます。 –

関連する問題