Nền gradient CSS3 được đặt trên cơ thể không kéo dài mà thay vào đó lặp lại?


429

ok nói nội dung bên trong <body>tổng số cao 300px.

Nếu tôi đặt nền của <body>việc sử dụng -webkit-gradienthoặc-moz-linear-gradient

Sau đó, tôi tối đa hóa cửa sổ của mình (hoặc chỉ làm cho nó cao hơn 300px), độ dốc sẽ chính xác cao 300px (chiều cao của nội dung) và chỉ cần lặp lại để lấp đầy phần còn lại của cửa sổ.

Tôi cho rằng đây không phải là một lỗi vì nó giống nhau trong cả webkit và tắc kè.

Nhưng có cách nào để làm cho độ dốc kéo dài để lấp đầy cửa sổ thay vì lặp lại không?

Câu trả lời:


717

Áp dụng CSS sau:

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

Chỉnh sửa: Đã thêm vào margin: 0;tuyên bố cơ thể trên mỗi bình luận ( Martin ).

Chỉnh sửa: Đã thêm vào background-attachment: fixed;tuyên bố cơ thể trên mỗi bình luận ( Johe Green ).


4
Tôi cũng phát hiện ra rằng tôi cần phải thêm margin:0;vào bodynếu không tôi có một khoảng trống ở cuối trang của tôi.
Martin

8
Trong Chrome và Safari, phần thân {height: 100%} trong trang (nhưng không phải là gradient) kéo dài ra khỏi chế độ xem.
thSoft

13
Tôi đã phải thêm một tập tin đính kèm nền: đã sửa; để cơ thể thoát khỏi khoảng cách dưới cùng (Webkit).
j7nn7k

4
Đặt nền cho phần thân và sau đó chiều cao của thẻ html thành 100% sẽ thực hiện những điều kỳ lạ trong Internet Explorer. Đây là một ví dụ (png).
Justin Force

21
Hãy chắc chắn rằng background-repeatbackground-attachmentđến sau các backgroundquy tắc của bạn . Nếu không, nền vẫn có thể lặp lại.
kellen

158

Liên quan đến một câu trả lời trước, thiết lập htmlbodyđể height: 100%dường như không làm việc nếu nhu cầu nội dung để di chuyển. Thêm fixedvào nền dường như để khắc phục điều đó - khôngneed for height: 100%;

Ví dụ:

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


5
Điều này hoạt động với tôi trong mọi trình duyệt tôi đã thử nghiệm (Chrome [Mac], Safari [Mac], Firefox [Mac / Win7], IE9 [Win7] và Opera [Mac]) mà không có hiệu ứng phụ của thanh cuộn của "height: 100%" giải pháp. Cảm ơn!
pipwerks

7
Một lưu ý cho những người sử dụng Sass / La bàn. Bạn không thể đặt "cố định" trực tiếp trong mixin để thêm cố định, bạn thêm thuộc tínhbackground-attachment: fixed
Kyle Mathews

2
Nếu bạn muốn có nền lấp đầy cửa sổ hoặc nội dung (tùy theo giá trị nào lớn hơn) thì hãy sử dụng min-height:100%(trong các trình duyệt tương thích)
cjk

Tôi đã có thể thực thi mã sau bằng cách sử dụng La bàn: nền @include (tuyến tính-gradient (trên cùng, đỏ 0%, xanh 100%) cố định);
mcranston18

Làm thế nào tôi có thể thêm một màu thứ ba?
sbaden

17

Tôi biết tôi đến bữa tiệc muộn, nhưng đây là một câu trả lời chắc chắn hơn.

Tất cả những gì bạn cần làm là sử dụng min-height: 100%;chứ không phải height: 100%;và nền gradient của bạn sẽ mở rộng toàn bộ chiều cao của chế độ xem mà không lặp lại, ngay cả khi nội dung có thể cuộn được.

Như thế này:

html {
    min-height: 100%;
}

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

Trừ khi bạn cần đặt chiều cao html thành 100%, ví dụ: nếu bạn cần chân trang dính
apieceofbart

15

Đây là những gì tôi đã làm để giải quyết vấn đề này ... nó sẽ hiển thị độ dốc cho toàn bộ chiều dài của nội dung, sau đó chỉ đơn giản là chuyển sang màu nền (thường là màu cuối cùng trong gradient).

   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>

Tôi đã thử nghiệm điều này trong FireFox 3.6, Safari 4 và Chrome, tôi giữ màu nền trong cơ thể cho bất kỳ trình duyệt nào vì một số lý do không hỗ trợ tạo kiểu thẻ HTML.


13

Cài đặt html { height: 100%}có thể tàn phá IE. Đây là một ví dụ (png). Nhưng bạn biết những gì làm việc tuyệt vời? Chỉ cần đặt nền của bạn trên <html>thẻ.

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

Bối cảnh kéo dài đến tận cùng và không có hành vi cuộn lạ nào xảy ra. Bạn có thể bỏ qua tất cả các bản sửa lỗi khác. Và điều này được hỗ trợ rộng rãi. Tôi chưa tìm thấy trình duyệt không cho phép bạn áp dụng nền cho thẻ html. Đó là CSS hoàn toàn hợp lệ và đã được một thời gian. :)


1
@Lynda Đó không phải là phản hồi rất hữu ích. Bạn có phiền khi cung cấp một trường hợp không hoạt động?
Justin Force

Xin lỗi vì mơ hồ. Tôi không chắc tại sao nó không hoạt động. Bạn có thể thêm một gradient vào htmlnhưng nó dừng một phần xuống trang trong trường hợp của tôi. Thêm background-attachment:fixedkhông giải quyết vấn đề. Tôi đã thấy điều này xảy ra trên nhiều trang web nhưng không thể tìm ra nguyên nhân.
L84

Điểm của giải pháp này là nó hoạt động trên các trình duyệt (vào năm 2012, nhân tiện). Nhưng bạn vẫn không cho biết bạn đang nói về trình duyệt nào. Nếu bạn vẫn gặp sự cố, hãy thử thêm html, body { height: 100%; }.
Lực lượng Justin

Thật. Nó xảy ra trong Firefox và Chrome (không thử nghiệm trên các trình duyệt khác) và tôi đã thử độ cao và nhiều cài đặt khác mà không gặp may (ngoại trừ tệp đính kèm nền). Oh tốt, không phải là một vấn đề lớn và hy vọng câu trả lời của bạn vẫn hoạt động cho hầu hết. =>
L84

Vẫn phải đánh lừa không lặp lại và cố định.
MarsAndBack

12

Có rất nhiều thông tin một phần trên trang này, nhưng không phải là một thông tin đầy đủ. Đây là những gì tôi làm:

  1. Tạo một gradient ở đây: http://www.colorzilla.com/gradient-editor/
  2. Đặt độ dốc trên HTML thay vì BODY.
  3. Sửa nền trên HTML bằng "nền-đính kèm: đã sửa;"
  4. Tắt lề trên và dưới trên CƠ THỂ
  5. (tùy chọn) Tôi thường tạo một <DIV id='container'>cái mà tôi đặt tất cả nội dung của mình vào

Đây là một ví dụ:

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;
}

Điều này đã được thử nghiệm với IE, Chrome và Firefox trên các trang có kích thước và nhu cầu cuộn khác nhau.


1
Tuyệt quá! Tôi đã sử dụng colorzilla và câu trả lời chính không hiệu quả với tôi. Cái này đã làm. Cảm ơn bạn! :)
Filly

Tại sao sở thích của bạn là làm điều đó trên HTML chứ không phải trên CƠ THỂ?
sashaikevich

@sashaikevich Câu hỏi hay. Tôi hầu như không nhìn vào câu trả lời này trong 5 năm vì vậy tôi không nhớ gì cả. Lý do tôi đã làm nó thậm chí có thể vẫn không áp dụng với tất cả các bản cập nhật trình duyệt. Nếu bạn chuyển tất cả sang cơ thể, tôi sẽ tò mò nếu nó hoạt động như vậy.
Rick Smith

@RickSmith Không, tôi đã tạo kiểu html. Nhưng, tôi đã di chuyển các quy tắc để áp dụng cho cơ thể ngay bây giờ để kiểm tra, và điều đó không có gì khác biệt. Có lẽ đó là một thứ trình duyệt cũ ...
sashaikevich

4

Dơ bẩn; có thể bạn chỉ cần thêm một chiều cao tối thiểu: 100%; vào thẻ html và thẻ cơ thể? Điều đó hoặc ít nhất là đặt màu nền mặc định cũng là màu gradient cuối.


1
Nền mặc định được đặt làm màu gradient kết thúc sẽ là một giải pháp tuyệt vời nếu gradient dừng lại, nhưng nó không chỉ dừng lại lặp lại để nền mặc định sẽ chỉ được nhìn thấy nếu gradient không được hỗ trợ.
JD Isaacks

2

Tôi gặp khó khăn khi nhận được câu trả lời ở đây để làm việc.
Tôi thấy nó hoạt động tốt hơn để sửa một div kích thước đầy đủ trong cơ thể, cung cấp cho nó một chỉ số z âm và gắn gradient vào nó.

<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>

Đây là một mẫu đầy đủ https://gist.github.com/morefromalan/8a4f6db5ce43b5240a6ddab611afdc55


0

Tôi đã sử dụng mã CSS này và nó hoạt động với tôi:

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;
}

Một thông tin liên quan là bạn có thể tạo độ dốc tuyệt vời của riêng mình tại 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
Vui lòng thêm một số giải thích về các khía cạnh chính của giải pháp của bạn.
Rachcha

-1

Đây là những gì tôi đã làm:

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%;
}

trước khi tôi nổi cơ thể, có một khoảng trống trên đầu và nó đang hiển thị màu nền của html. nếu tôi loại bỏ bgcolor của html, khi tôi cuộn xuống, gradient sẽ bị cắt. Vì vậy, tôi thả nổi cơ thể và đặt vị trí của nó thành tương đối và chiều rộng thành 100%. nó hoạt động trên safari, chrome, firefox, opera, internet expl .. oh chờ đã. : P

các bạn nghĩ sao?


-4

thay vì 100% tôi chỉ cần thêm một số pixxel có ngay bây giờ và nó hoạt động cho toàn bộ trang mà không có khoảng cách:

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

3
Còn những trang có chiều cao> 1420 px thì sao?
veritas
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.