2012-06-21 10 views
13

CSSでbox-sizing:border-boxを使用する場合、要素の合計幅が "width"値で定義されると仮定します。したがって、分割の幅が20ピクセルで、右側の境界が10ピクセルだとすると、20ピクセルのスペースを占めるボックスで終わり、その半分は右の境界です。私は10pxのと右の境界に幅を設定ポイントにそれを押す、あまりにも、ここのように:box-sizing:border-boxにはまだ幅が0pxのボーダーが表示されるのはなぜですか?

#box{ 
    overflow: hidden; 
    width: 10px; 
    box-sizing: border-box; 
    height: 100px; 
    background: black; 
    border-right: 10px solid red; 
}​ 

ボックスは、赤い枠で構成されます。幅を0pxに設定するとどうなりますか?私はそれがすべて消えるだろうと思ったが、いいえ、結果は上記のようにまったく同じです:jsFiddle

これは期待された動作であれば私の質問です。私に矛盾しているようだ。ボックスを幅/高さのみを操作して消えるようにしたいと思います。どのような入力をありがとう。

+0

あなたはどのブラウザを使用していますか?すべてのブラウザが直接ボックスサイズをサポートするわけではありません。 '-moz-box-sizing'や' -webkit-box-sizing'のような独自のボックスサイズを持つものもあります。何かを消したい場合は、 'display:none;'や 'visibility:hidden;'を使うことを考えてください。 – Jrod

+0

ハンマーで卵を壊すこともできます。そのような要素が消える必要があります...スリットを考えてみましょう... – Seka

+0

あなたはゆっくりと幅を減らす何らかのアニメーションを意味しますか?スリットが何を意味しているかは正確には分かりません。あなたが達成しようとしていることを正確に精緻化することができれば、もう一つのより適切な解決策かもしれません。ほとんどの場合と同様に、多くの方法があります。おそらく爪のハンマーは貧しい選択ですが、おそらくリッピングハンマーがあなたの路地の上にあるかもしれません。 – Jrod

答えて

14

コンテンツ領域は、境界線の幅を引いた後に残るものです。

コンテンツの幅と高さは、境界を指定された「幅」 から各辺の パディング幅と「高さ」の特性を減算することにより計算されます。

指定された幅= 10ピクセル
境界線の幅= 10ピクセル
コンテンツ幅=指定された幅(10 PX) - ボーダーの幅(10ピクセル)
コンテンツ幅10 - 指定10 = 0

幅= 0 PX
ボーダー幅= 10ピクセル
コンテンツ幅=指定された幅(0ピクセル) - ボーダーの幅(10ピクセル)
コンテンツ幅0 - 10 = -10(ボーダーによって使用さ10ピクセルを除去することになります)コンテンツの幅と高さ

しかし

が否定([CSS21]、セクション 10.2)ことができない、この計算は、0

指定された幅= 0 PX
で床のさborder width = 10 px
コンテンツの幅=指定された幅(0 px) - 境界の幅(10 px)
コンテンツの幅0 - 10 = 0(ボーダーによって使用される10ピクセルは削除されません) )

display:none;またはvisibility:hidden;を使用しない場合は、width:XX;border-right:XX;の両方をゼロに設定する必要があります。

+0

ありがとうございました。その鍵は、否定的な結果のために国境が残っていることを理解することにあったと私は推測する。しかし、あなたの意見では、それは一貫した行動だと思いますか?この最後のケースでは、border-boxとcontent-boxが同じように振舞うので、私にとっては直感的ではないように思えます。どう思いますか? – Seka

+0

私は同意します、問題はあなたがそれに対処することを決めた方法であるので、ネガティブサイズのブロックを許可することができないということです。私はより良い選択肢を考えることができません。 – codewaggle

+1

これはあなたがトライアングルを作る方法です! https://css-tricks.com/examples/ShapesOfCSS/ –

0

は、このスクリーンショットを見てみましょう:

box metrics

全体ボックスでは、期待通りに100x100pxですが、実際の幅は90px10px +右の境界となります。したがって、幅を0に設定すると、幅はまだ0(負の幅を持つことはできません)ですが、10pxの境界線はあります。

+0

しかし、なぜあなたはまだ国境を持っていますか?スペックの後にあるべきではないので、コンテンツの幅と高さは指定された 'width'と 'height'プロパティからそれぞれの辺の境界とパディング幅を引いて計算されます。 ([CSS21]、セクション10.2)、この計算は0でフロアされます。 [border-boxを参照](http://www.w3.org/TR/css3-ui/#box-sizing0) – Seka

+1

これは何が起こっているのかです。ボーダーやパディングを引いた後では、幅が負のままになっているため、コンテンツの幅(ボーダーやパディングを含まない幅)は0です。注目すべき点は、あなたが "コンテンツ"をどのように定義するかです。 – sachleen

+0

...要素の合計「幅」は0になるはずですか? width:10pxとborder-right:10pxを定義すると、10pxのボックスが表示されます。幅を0pxに定義すると、0pxのボックスが表示されます。 Paul Irish氏の言葉を引用しています:「もし幅が200pxだとすると、20pxの境界線を持っていても200pxの幅の箱になります」 [* {box-sizing:border-box} FTW](http://paulirish.com/2012/box-sizing-border-box-ftw/) – Seka

関連する問題