ボディに設定されたCSS3グラデーションの背景は伸縮せず、代わりに繰り返されますか?


430

<body>合計300ピクセルの高さのコンテンツを言います。

<body>使っている背景-webkit-gradient-moz-linear-gradient

次に、ウィンドウを最大化し(または単に300pxより高くします)、グラデーションの高さをちょうど300px(コンテンツの高さ)にし、残りのウィンドウを埋めるまで繰り返します。

これはwebkitとgeckoの両方で同じであるため、これはバグではないと想定しています。

しかし、グラデーションのストレッチを繰り返しではなくウィンドウ全体に拡大する方法はありますか?

回答:


718

次のCSSを適用します。

html {
    height: 100%;
}
body {
    height: 100%;
    margin: 0;
    background-repeat: no-repeat;
    background-attachment: fixed;
}

編集:margin: 0;コメントごとに本文の宣言に追加されました(Martin)。

編集:background-attachment: fixed;コメントごとに本文の宣言に追加されました(Johe Green)。


4
また、追加する必要があることmargin:0;bodyまたはページの下部にギャップがあることもわかりました。
Martin

8
ChromeとSafariでは、body {height:100%}を指定すると、ページ(グラデーションではなく)がビューポートから下に伸びます。
thSoft

13
背景添付ファイルを追加する必要がありました。修正しました。ボトムギャップを取り除くためにボディに(Webkit)。
j7nn7k 2011

4
本文に背景を設定し、htmlタグの高さを100%に設定すると、Internet Explorerで奇妙なことが起こります。以下に例を示します(png)。
ジャスティンフォース

21
そのことを確認してくださいbackground-repeatbackground-attachmentた後、あなたのbackgroundルール。そうしないと、背景が繰り返される可能性があります。
kellen 2014

159

以前の回答に関して、コンテンツをスクロールする必要がある場合、設定htmlbodyto height: 100%は機能しないようです。fixed背景に追加することで問題が解決するようです-いいえneed for height: 100%;

例えば:

body {
  background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#cbccc8)) fixed;
}


5
これは、テストしたすべてのブラウザー(Chrome [Mac]、Safari [Mac]、Firefox [Mac / Win7]、IE9 [Win7]、Opera [Mac])で機能し、「高さ:100%」のスクロールバーの副作用はありませんでした。解決。ありがとう!
pipwerks、

7
Sass / Compassを使用している人向けのメモ。mixinで「fixed」を直接設定することはできないため、fixedを追加するには、プロパティを追加しますbackground-attachment: fixed
Kyle Mathews

2
背景またはウィンドウのコンテンツ(どちらか大きい方)を塗りつぶしたい場合は、min-height:100%(互換性のあるブラウザで)使用します
cjk

コンパスを使用して次のコードを実行することができました。@ include background(linear-gradient(top、red 0%、blue 100%)fixed);
mcranston18 2013年

3番目の色を追加するにはどうすればよいですか?
2016年

17

私はパーティーに遅れていることはわかっていますが、ここではより確かな答えを示します。

あなたがする必要があるのは、min-height: 100%;ではなく使用することでheight: 100%;あり、グラデーションの背景は、コンテンツがスクロール可能であっても、繰り返すことなくビューポートの高さ全体を拡張します。

このような:

html {
    min-height: 100%;
}

body {
    background: linear-gradient(#ff7241, #ff4a1f);
}

あなたはスティッキーフッターが必要な場合は、例えば100%に設定し、HTMLの高さ、する必要がない限り
apieceofbart

15

これがこの問題を解決するために私がしたことです...コンテンツ全体のグラデーションを表示してから、背景色(通常はグラデーションの最後の色)にフォールバックします。

   html {
     background: #cbccc8;
   }
   body {
     background-repeat: no-repeat;
     background: #cbccc8;
     background: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#cbccc8));
     background: -moz-linear-gradient(top, #fff, #cbccc8);
     filter: progid: DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#cbccc8');
   }
<body>
  <h1>Hello world!</h1>
</body>

私はこれをFireFox 3.6、Safari 4、およびChromeでテストしましたが、何らかの理由でHTMLタグのスタイル設定をサポートしていないブラウザーの場合、背景色を本体に保持します。


13

設定html { height: 100%}はIEで大混乱をもたらす可能性があります。以下に例を示します(png)。しかし、あなたは何が素晴らしいのか知っていますか?<html>タグに背景を設定するだけです。

html {
  -moz-linear-gradient(top, #fff, #000);
  /* etc. */
}

背景は下まで拡張され、奇妙なスクロール動作は発生しません。その他の修正はすべてスキップできます。そして、これは広くサポートされています。HTMLタグに背景を適用できないブラウザは見つかりませんでした。これは完全に有効なCSSであり、しばらくの間使用されています。:)


1
@Lyndaそれはあまり役に立たないフィードバックです。それが機能しないケースを提供していただけませんか?
ジャスティンフォース

あいまいになって申し訳ありません。なぜ動かないのかわかりません。グラデーションを追加できhtmlますが、私の場合、ページの途中で止まります。追加background-attachment:fixedすると問題は解決します。これが複数のサイトで発生することを確認しましたが、原因を特定できませんでした。
L84 2015年

このソリューションの要点は、ブラウザー間で動作したことです(ところで2012)。しかし、あなたはまだあなたが話しているブラウザを示していません。それでも問題が解決しない場合は、を追加してみてくださいhtml, body { height: 100%; }
ジャスティンフォース

本当です。これは、FirefoxとChromeで発生し(他のブラウザーではテストしていません)、私は高さやその他のさまざまな設定を運試しなしで試しました(バックグラウンドアタッチメントを除く)。まあ、大したことではなく、うまくいけばあなたの答えはまだほとんどの場合うまくいきます。=>
L84

それでも、リピートなしで修正する必要があります。
MarsAndBack 2018

12

このページには多くの部分的な情報がありますが、完全ではありません。これが私がすることです:

  1. ここでグラデーションを作成:http : //www.colorzilla.com/gradient-editor/
  2. BODYの代わりにHTMLにグラデーションを設定します。
  3. 「background-attachment:fixed;」を使用して、HTMLの背景を修正します。
  4. BODYの上と下のマージンをオフにする
  5. (オプション)私は通常、<DIV id='container'>すべてのコンテンツを入れるを作成します

次に例を示します。

html {  
  background: #a9e4f7; /* Old browsers */
  background: -moz-linear-gradient(-45deg,  #a9e4f7 0%, #0fb4e7 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, right bottom, color-stop(0%,#a9e4f7), color-stop(100%,#0fb4e7)); /* Chrome,Safari4+ */ 
  background: -webkit-linear-gradient(-45deg,  #a9e4f7 0%,#0fb4e7 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(-45deg,  #a9e4f7 0%,#0fb4e7 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(-45deg,  #a9e4f7 0%,#0fb4e7 100%); /* IE10+ */
  background: linear-gradient(135deg,  #a9e4f7 0%,#0fb4e7 100%); /* W3C */ 
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#a9e4f7', endColorstr='#0fb4e7',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */

  background-attachment: fixed;
}

body {
  margin-top: 0px;
  margin-bottom: 0px;
}

/* OPTIONAL: div to store content.  Many of these attributes should be changed to suit your needs */
#container
{
  width: 800px;
  margin: auto;
  background-color: white;
  border: 1px solid gray;
  border-top: none;
  border-bottom: none;
  box-shadow: 3px 0px 20px #333;
  padding: 10px;
}

これは、さまざまなサイズとスクロールのニーズのあるページでIE、Chrome、Firefoxでテストされています。


1
すごい!colorzillaを使用していて、主な回答がうまくいきませんでした。これはしました。ありがとうございました!:)
2014年

BODYではなくHTMLで実行するのが望ましいのはなぜですか?
sashaikevich 2017

@sashaikevichいい質問ですね。私はこの答えを5年間ほとんど見ていなかったので、まったく覚えていません。私がそれをした理由は、すべてのブラウザのアップデートにまだ当てはまらないかもしれません。それをすべて体に移した場合、同じように機能するかどうか興味があります。
リックスミス

@RickSmithいいえ、HTMLのスタイルを設定しました。しかし、私は今チェックするためにルールをボディに適用するように移動しました、そしてそれは違いがありませんでした。多分それは古いブラウザのものだったのかもしれません...
sashaikevich

4

汚れた; 多分あなたはちょうど最小高さを追加することができます:100%; html、およびbodyタグに?または、少なくともグラデーションの終了色であるデフォルトの背景色を設定します。


1
グラデーションが終了した場合、グラデーションの終了色として設定されたデフォルトの背景は優れたソリューションになりますが、グラデーションを繰り返すだけで停止しないため、グラデーションがサポートされていない場合にのみデフォルトの背景が表示されます。
JD Isaacks、

2

ここで答えを出すのに苦労しました。
本文のフルサイズのdivを修正し、負のz-indexを指定し、それにグラデーションをアタッチする方が効果的であることがわかりました。

<style>

  .fixed-background {
    position:fixed;
    margin-left: auto;
    margin-right: auto;
    top: 0;
    width: 100%;
    height: 100%;
    z-index: -1000;
    background-position: top center;
    background-size: cover;
    background-repeat: no-repeat;
  }

  .blue-gradient-bg {
    background: #134659; /* For browsers that do not support gradients */
    background: -webkit-linear-gradient(top, #134659 , #2b7692); /* For Safari 5.1 to 6.0 */
    background: -o-linear-gradient(bottom, #134659, #2b7692); /* For Opera 11.1 to 12.0 */
    background: -moz-linear-gradient(top, #134659, #2b7692); /* For Firefox 3.6 to 15 */
    background: linear-gradient(to bottom, #134659 , #2b7692); /* Standard syntax */
  }

  body{
    margin: 0;
  }

</style>

<body >
 <div class="fixed-background blue-gradient-bg"></div>
</body>

これが完全なサンプルです https://gist.github.com/morefromalan/8a4f6db5ce43b5240a6ddab611afdc55


0

私はこのCSSコードを使用しましたが、うまくいきました:

html {
  height: 100%;
}
body {
  background: #f6cb4a; /* Old browsers */
  background: -moz-linear-gradient(top, #f2b600 0%, #f6cb4a 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2b600), color-stop(100%,#f6cb4a)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #f2b600 0%,#f6cb4a 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #f2b600 0%,#f6cb4a 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, #f2b600 0%,#f6cb4a 100%); /* IE10+ */
  background: linear-gradient(top, #f2b600 0%,#f6cb4a 100%); /* W3C */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f2b600', endColorstr='#f6cb4a',GradientType=0 ); /* IE6-9 */
  height: 100%;
  background-repeat: no-repeat;
  background-attachment: fixed;
  width: 100%;
  background-position: 0px 0px;
}

関連情報は、http://www.colorzilla.com/gradient-editor/で独自の素晴らしいグラデーションを作成できることです

/ Sten


-1
background: #13486d; /* for non-css3 browsers */
background-image: -webkit-gradient(linear, left top, left bottom, from(#9dc3c3),   to(#13486d));  background: -moz-linear-gradient(top,  #9dc3c3,  #13486d);
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9dc3c3', endColorstr='#13486d');
background-repeat:no-repeat;

1
ソリューションの重要な側面について説明を追加してください。
Rachcha、2014年

-1

これは私がやったことです:

html, body {
height:100%;
background: #014298 ;
}
body {
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#5c9cf2), color-stop(100%,#014298));
background: -moz-linear-gradient(top, rgba(92,156,242,1) 0%, rgba(1,66,152,1) 100%);
background: -o-linear-gradient(top, #5c9cf2 0%,#014298 100%);

/*I added these codes*/
margin:0;
float:left;
position:relative;
width:100%;
}

ボディを浮かす前に、上部に隙間があり、htmlの背景色が表示されていました。htmlのbgcolorを削除すると、下にスクロールするとグラデーションがカットされます。だから私は体を浮かせて、その位置を相対的に、幅を100%に設定しました。それはサファリ、クロム、firefox、オペラ、インターネットexplで動作しました。:P

皆さんはどう思いますか?


-4

100%の代わりに、私はいくつかのpixxelを追加するだけでこれを取得し、ページ全体でギャップなしで機能します。

html {     
height: 1420px; } 
body {     
height: 1400px;     
margin: 0;     
background-repeat: no-repeat; }

3
高さが1,420ピクセルを超えるページはどうなりますか?
veritas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.