サイド ナビゲーションのあるサイトがあり、画面の残りの部分を画像で埋めたいと思います。サイド ナビゲーションは左側にあり、幅は 150px です。
理想的には全画面画像を に設定しwidth:100% -150px;
たいのですが、これは適切な CSS ではないと確信しています。
同じ効果を達成する方法はありますか?width:90%;
幅の広い画面では、150px は幅の 10% ではなく 5% のようになるため、使用できません。
実際、そうです!(css3あり)
width: calc(100% -150px);
width: -moz-calc(100% - 150px);
width: -webkit-calc(100% - 150px);
動作しますが、最新のブラウザでのみ... caniuse
これを使用したくない場合は、 margin を使用して offset: を作成できますmargin-left:150px;
。ただし、これには、幅が 100% の親要素と、画像がブロックレベルの要素 ( display:block
) である必要があります。
別のオプションは、box-sizingを使用することです。これにより、要素幅へのマージンとパディングを計算しない別のボックスモデルを選択できます。これは、いくつかの典型的な「100% 幅 - Xpx 境界線が必要」の場合にも役立ちます。
@BerkerYüceer のコメントに応えて、次のように計算内で動的な値を使用することもできます。
/* declare css variable */
--leftmargin:150px;
/* use the variable like following */
calc(100% - var(--leftmargin));
#content { margin-left:150px }
#content
あなたのアイテムが、display:block
デフォルトで利用可能な幅を埋める要素であると仮定します。
タイリングではなく単一の画像で幅を埋める場合は、background-size
最新のブラウザーで背景画像を使用できます。
#content {
background:url(myimage.jpg) no-repeat;
background-size:100% auto;
}
非position:static
要素の場合は、設定を試すことができますright: 150px;
これを実現するには、 #image-full div の周りにラッピング div を使用できます。
#image-wrapper
{
position:absolute;
width:100%;
padding-right:150px;
}
#image-full
{
width:100%;
background-image:url(...);
/* ... */
}
#navigation
{
position:absolute;
width:150px;
}