CSSの背景を伸縮する


回答:


267

最新のブラウザの場合、これを使用してこれを実現できますbackground-size

body {
    background-image: url(bg.jpg);
    background-size: cover;
}

cover 画像を垂直方向または水平方向に引き伸ばして、タイル状になったり繰り返したりしないようにすることを意味します。

これは、Safari 3以降、Chrome、Opera 10以降、Firefox 3.6以降、Internet Explorer 9以降で機能します。

Internet Explorerの下位バージョンで動作するようにするには、次のCSSを試してください。

filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";

2
Clementへ:以前のIEのフィルターに対して提案したことは、部分的にしか機能しません。それは画像の幅を適切にスケーリングしますが、高さのスケーリングはそれを何にも制限しないことによって間違っています。ページが高いほど、背景画像も同じです。=(私はIE8でこれを試しました。また、これらの「カバー」コマンドを使用して、どういうわけかこれをiphoneなどのモバイルと互換性があるようにすることはできますか?ビューポートがあります。問題ですが、背景がここで拡大縮小されるようにビューポートを画面全体に拡大縮小することはできますか?回答ありがとうございます!

3
IE固有のフィルターは理想的なソリューションではないため、CSS代替を使用してIEを自由に調整してください。私は自分のサイトでCSS3の「カバー」を個人的に使用していますが、iOSデバイスでは問題なく機能します。デバイスの幅を定義してください。
クレメント

9
カバーはBGを伸ばしません。100%100%はい。
neoswf 2012

この解決策は、実際の解像度よりも水平方向または垂直方向に画像を引き伸ばしたくない場合に最適です。ありがとう.. !!
Noddy氏、2017

1
注意:Chromium 78.0.3904.97以降、各軸に沿ってsvg画像を個別にスケーリングすることはできません。拡大してラスターイメージに変換する必要がある場合があります。
Mike

567

CSS 3プロパティを使用しますbackground-size

#my_container {
    background-size: 100% auto; /* width and height, can be %, px or whatever. */
}

これは、2012年以降、最新のブラウザーで使用できます。


93
画像のアスペクト比を維持するには、「background-size:cover」を使用する必要があります。または「background-size:contains;」。私はポリフィルを構築したことが実装IE8でそれらの値:github.com/louisremi/background-size-polyfill
ルイ・レミ

6
私はこれが1歳であることを知っていますが、「まともなブラウザ」の部分に(笑って)同意する必要があります。すべてのブラウザーを確認してください。ただし、IEには他のブラウザーよりも多くの問題がありました。
ErocM 2013年

36
それがbackground-size: 100% 100%;他の誰かを助けるなら、私が望んでいた望ましい効果を得るために設定しなければなりませんでした。
グアノメ2013年

1
MDNcoverとその説明contain
mohas 2014年

2
これは実際には機能しません。問題は、コンテナを充填することです。つまり、繰り返さないようにコンテナを伸ばしたいということです。一方、高さが領域をカバーしない場合、この回答は高さ方向に繰り返されます。「ストレッチして埋める」とはストレッチを意味しますが、繰り返さないようにする必要があります。正解は下から「カバー」です。これは実際にはこれが対応しないケースを処理します。
gman 2015

171

CSSを使用して画像をスケーリングすることは不可能ですが、次の方法でも同様の効果を得ることができます。

このマークアップを使用します。

<div id="background">
    <img src="img.jpg" class="stretch" alt="" />
</div>

次のCSSで:

#background {
    width: 100%; 
    height: 100%; 
    position: absolute; 
    left: 0px; 
    top: 0px; 
    z-index: 0;
}

.stretch {
    width:100%;
    height:100%;
}

そしてあなたはやるべきです!

画像を「フルブリード」に拡大縮小してアスペクト比を維持するには、代わりに次のようにします。

.stretch { min-width:100%; min-height:100%; width:auto; height:auto; }

それはかなりうまくいきます!ただし、1つの寸法が切り取られる場合は、両側で均等に切り取られる(中央揃えされる)のではなく、画像の片側でのみ切り取られます。Firefox、Webkit、およびInternet Explorer 8でテストしました。


2
これはうまく機能します...しかし、それを中央に配置し、画像が横向きか縦向きかに基づいて調整されるもう少し堅牢な(おそらくJavaScriptで)何かを探していました。誰かがその脈絡に解決策を持っているなら、リンクが大好きです...ありがとう!
ブライアンアームストロング

4
他の誰かが興味を持っている場合、これはうまくいくように見えました:buildinternet.com/project/supersized
Brian Armstrong

1
margin: 0 autoonで水平方向のセンタリングを行うことができます.stretchwidthまたはを設定するだけheightで、アスペクト比は変わりません。max-widthおよびmax-heightを使用してズーム係数を制限してください...
ロナルド

1
これは私にとってie8 / ie9では機能しませんが、ie6 / ie7(およびもちろん他のすべてのブラウザー)では機能します。ie8 / ie9では、画像はdivの約3/4しか表示されません。誰か同じ問題がありますか?

3
SOの欠陥:正しくない解答にマークを付ける方法がなく、@ Ullasのような人々を迷わせています。最新のすべてのブラウザで背景を簡単に拡大縮小できます。developer.mozilla.org/en/CSS/background-size
Glenn Maynard

161

使用する背景-size属性を CSS3で:

.class {
     background-image: url(bg.gif);
     background-size: 100%;
}

編集: Modernizr、背景サイズのサポートの検出をサポートしています。動作するように記述されたJavaScriptの回避策を使用できますが、必要な場合はサポートがなく動的にロードします。これにより、特定のブラウザでの煩わしいCSSハッキングに頼ることなく、コードを保守しやすくなります。

個人的に私はjimgを使用してスクリプトを処理します。これはimgsizerを応用したものです。ほとんどのデザインで、デバイス全体の流動的なレイアウトに幅%を使用しているので、ループの1つにわずかな調整があります(常に100%とは限らないサイズを考慮します)。

for (var i = 0; i < images.length; i++) {
    var image = images[i],
        width = String(image.currentStyle.width);

    if (width.indexOf('%') == -1) {
        continue;
    }

    image.origWidth = image.offsetWidth;
    image.origHeight = image.offsetHeight;

    imgCache.push(image);
    c.ieAlpha(image);
    image.style.width = width;
}

編集:jQuery CSS3 Finaliz [s] eに も興味があるかもしれません。


3
強調するだけですが、Modernizrは、ネイティブでサポートしていないブラウザーでのバックグラウンドサイズのサポートを有効にしません。それはちょうどそれのための便利なクロスブラウザーテストがあります。テストが偽を返したときにそれを偽造するのはあなた次第です。
Chris Moschini、2012年

34

記事background-sizeを試してください。以下のすべてを使用すると、Internet Explorerを除くほとんどのブラウザーで機能します。

.foo {
    background-image: url(bg-image.png);
    -moz-background-size: 100% 100%;
    -o-background-size: 100% 100%;
    -webkit-background-size: 100% 100%; 
    background-size: 100% 100%;
} 

1
ありがとうございました!これは「背景サイズ:表紙」とは異なります
Pavel Vlasov '28

1
これはipadで私のために伸びましたが、スケーリングしませんでした。投稿用thx。
ドンコート

1
これは、背景を縮小させるのにも最適です。ありがとう!
BealeX

1
背景画像がSVGの場合、SVG preserveAspectRatio="none"内で指定することも必要です。これに関する詳細はこちら。デモはこちら
メンタリスト

background-size:coverを使用できます。背景添付ファイル:修正。あなたはそれをスケーリングすることができます
Siraj Ahmed

15

現在はありません。CSS 3で利用できるようになりますが、ほとんどのブラウザで実装されるまでにはしばらく時間がかかります。


2
A List Apartで入手できるすばらしい記事:背景をスー​​パーサイズにしてください!
jensgram 2010年

3
-1私はこの答えはあまり関係がないと思います...そしてそれはどんな種類の解決策も提供しません。
Potherca '15年

1
@Pothercaこの回答は当時(ほぼ3年前)正しかった。
エランガルペリン2011年

4
日付が表示されるのには理由があります。それは歴史的な参照のために保持されるべきです。あなたはサイト上のすべての古い答えを調べ、それらに反対投票していますか?それ以来、さらに情報が追加されていても、答えは正しいです。また、ここでの他の回答は基本的に同じことを述べていることにも注意してください(実際に正しくないものもあり、不可能だと述べています)。いくつかの投票があるので、あなたはこれを選んだ感じがします。
エランガルペリン

3
いいえ、2008年にさえこの問題にはいくつかの解決策があるにもかかわらず、「コンピュータはノーと言う」だけであるので、これを選びました;-)
Potherca '13 / 10/13

15
.style1 {
        background: url(images/bg.jpg) no-repeat center center fixed;
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
}

で動作します:

  • Safari 3以降
  • Chrome Whatever +
  • IE 9以降
  • Opera 10+(Opera 9.5はbackground-sizeをサポートしていますが、キーワードはサポートしていません)
  • Firefox 3.6+(Firefox 4はベンダー以外の接頭辞付きバージョンをサポートしています)

さらに、IEソリューションでこれを試すことができます

    filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='.myBackground.jpg', sizingMethod='scale');
    -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='myBackground.jpg', sizingMethod='scale')";
    zoom:1;

Chris Coyierによるこの記事のクレジット http://css-tricks.com/perfect-full-page-background-image/


これは、単に「背景サイズ:カバー」よりも優れている、または異なるのですか?
PKHunter 2017

@PKHunter、私はあなたが何を参照しているのか正確にわかりません。これはbackground-size: cover、ブラウザの接頭辞とIEソリューションを除いて使用しています
Blowsie

8

一言で言えば、いいえ。画像を引き伸ばす唯一の方法は<img>タグを使用することです。あなたは創造的である必要があります。

これは、答えが書かれた2008年には真実でした。今日のブラウザーは、background-sizeこの問題を解決するをサポートしています。IE8がサポートしていないことに注意してください。


6
@Blowsie-かわいい。回答日を確認してください。ブラウザーの状況は、過去5年間で少し変わっています。
Vilx- 2013

5

「ストレッチとスケール」を定義します...

あなたがビットマップフォーマットを持っているなら、それを引き延ばして引っ張るのは一般に(グラフィックス的に言えば)素晴らしいことではありません。繰り返し可能なパターンを使用して、同じ効果のような錯覚を与えることができます。たとえば、ページの下部に向かって明るくなるグラデーションがある場合は、幅が1ピクセルでコンテナと同じ高さのグラフィックス(またはできればスケーリングを考慮して大きい)を使用し、それをページ。同様に、グラデーションがページ全体にわたる場合、高さは1ピクセルで、コンテナーよりも幅が広く、ページの下まで繰り返されます。

通常、コンテナが拡大または縮小したときに、コンテナがいっぱいになるように引き伸ばされているように見せるために、イメージをコンテナより大きくします。オーバーラップはコンテナの境界の外には表示されません。

カーブしたエッジを持つボックスのようなものに依存するエフェクトが必要な場合は、ボックスの左側をコンテナの左側に、十分なオーバーラップで(理由の範囲内で)コンテナの大きさに関係なく、コンテナの左側に貼り付けます。背景が不足している場合は、ボックスの右側の画像を湾曲したエッジでレイヤー化し、コンテナーの右側に配置します。したがって、コンテナが縮小または拡大すると、湾曲したボックス効果がそれに伴って縮小または拡大しているように見えます-実際にはそうではありませんが、何が起こっているかのような錯覚を与えます。

コンテナで実際に画像を縮小および拡大する場合、画像を背景として機能させるためにいくつかのレイヤートリックを使用し、コンテナで画像のサイズを変更するにはJavaScriptを使用する必要があります。CSSでこれを行う現在の方法はありません...

ベクターグラフィックスを使用している場合、私が恐れている私の専門知識の範囲をはるかに超えています。


Stretch = xとyの寸法を個別に変更して画像のアスペクト比を変更し、Scale = xとyの寸法を変更して画像のアスペクト比を維持します。
Lawrence Dol

@SoftwareMonkey:背景として、そうではありません。ストレートCSSの用語の本当の意味でストレッチとスケールを変更することはできません。私が説明したように、これが起こっていると錯覚させるには、さまざまなCSSトリックを使用する必要があります。
BenAlabaster 2008

4

これは私が作ったものです。ストレッチクラスでは、高さをに変更しましたauto。このようにして、背景画像は常に画面の幅と同じサイズになり、高さは常に適切なサイズになります。

#background {
    width: 100%;
    height: 100%;
    position: absolute;
    margin-left: 0px;
    margin-top: 0px;
    z-index: 0;
}

.stretch {
    width:100%;
    height:auto;
}

2

background-attachment行を追加します。

#background {
    background-attachment:fixed;
    width: 100%; 
    height: 100%; 
    position: absolute; 
    margin-left: 0px; 
    margin-top: 0px; 
    z-index: 0;
}

.stretch {
    width:100%;
    height:auto;
}

2

これは次のことと同じであることを指摘しておきます。

html { width: 100%; height: 100%; }
body { width: 100%; height: 100%; /* Add background image or gradient to stretch here. */}

2

-このためのもう一つの大きな解決策は、ページ上の身体または任意の要素に適用することができSrobbinのバックストレッチでhttp://srobbin.com/jquery-plugins/backstretch/


ニック、私たちは通常、あなたの回答に顕著な部分を提供し、さらに詳細のためにのみ外部リンクを提供することを求めます-これは、リンクが腐敗した場合でも回答が有用であり続けるのに役立ちます。
ローレンスドル

1
私の悪い。一般的に言えば、ドキュメントの<head>にバックストレッチを追加して、次のように初期化します。$( "。your-element")。backstretch( "path / to / image.jpg");
nickff


1

SolidSmileのチートのための追加のヒントは、幅を設定し、高さとしてautoを使用することにより、スケーリング(比例的なサイズ変更)することです。

例:

#background {
    width: 500px;
    height: auto;
    position: absolute; 
    left: 0px; 
    top: 0px; 
    z-index: 0;
}

0

border-image : yourimageプロパティを使用して画像を設定し、画面またはウィンドウの境界線全体に拡大縮小します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.