width
プロパティは、コンテンツ ボックスに関連するものとして明示的に定義されておりbox-sizing
、親ではこれを変更しませんが、利用可能なトリックがあります。必要なのはスペースを消費しない境界線であり、ありがたいことに、それはまさにoutline
プロパティの機能です。
問題が 1 つあります。アウトラインはデフォルトでコンテンツ ボックスの外側に設定されています。outline
の関連プロパティの1 つがoutline-offset
負の値を受け入れるため、コンテンツ ボックス内にアウトラインが表示されるため、心配する必要はありません。
HTML
<!DOCTYPE html>
<html>
<head></head>
<body>
<div class="outer">
<div class="inner">
TEST
</div>
</div>
</body>
</html>
CSS
.outer {
position: relative;
width: 100px;
height: 100px;
outline:20px solid red;
border:1px solid black;
outline-offset: -20px;
}
.inner {
width: 50%;
height: 100%;
outline:1px solid yellow;
position: absolute; /* required so inner is drawn _above_ the outer outline */
background-color: blue;
}
JS ビン: http://jsbin.com/efUBOsU/1/
あなたの「ボーナス質問」に関して、幅のパーセンテージは要素のサイズではなく、コンテナのサイズに基づいています。width
これは、 、padding
およびに当てはまりますmargin
。コンテナーが 680px であるため、68px のパディングを取得しています。{width: 80%; padding: 10%;}
これは奇妙に思えるかもしれませんが、オブジェクトの合計サイズがコンテナーの 100% であり、子要素のコンテンツに基づく任意の値ではないことが保証されるため、次のようなルールがある場合に非常に便利です。
注: 今後は、追加の質問を個別に行ってください。特に、主要な質問にほとんど関係がない場合は特にそうです。