Phản hồi hình ảnh nền css


195

Tôi có một trang web (g-floors.eu) và tôi muốn tạo nền (trong css tôi đã xác định hình ảnh bg cho nội dung) cũng đáp ứng. Thật không may, tôi thực sự không có bất kỳ ý tưởng nào về cách làm điều này ngoại trừ một điều mà tôi có thể nghĩ ra nhưng đó là một cách giải quyết. Tạo nhiều hình ảnh và sau đó sử dụng kích thước màn hình css để thay đổi hình ảnh nhưng tôi muốn biết liệu có cách nào thực tế hơn để đạt được điều này không.

Về cơ bản những gì tôi muốn đạt được là hình ảnh (với hình mờ 'G') sẽ tự động thay đổi kích thước mà không hiển thị ít hình ảnh hơn. Nếu nó có thể tất nhiên

liên kết: g-floors.eu

Mã tôi có cho đến nay (phần nội dung)

#content {
  background-image: url('../images/bg.png');
  background-repeat: no-repeat;
  position: relative;
  width: 85%;
  height: 610px;
  margin-left: auto;
  margin-right: auto;
}

7
Hãy xem liên kết này, nó có thể là những gì bạn đang tìm kiếm? css-tricks.com/perinf-full-page-background-image
Christofer Vilander

Tôi cảm thấy như giải pháp này mà Christofer Vilander đã đăng là một giải pháp tốt hơn câu trả lời được chọn.
CU3ED

Chỉ tự hỏi tại sao trang web không thực sự thực hiện tính năng thay đổi kích thước này mà bạn đã hỏi về, kể từ tháng 2 năm 2015? Có một số vấn đề với nó?
LegendLpm 20/2/2015

Câu trả lời:


367

Nếu bạn muốn cùng một hình ảnh chia tỷ lệ dựa trên kích thước của cửa sổ trình duyệt:

background-image:url('../images/bg.png');
background-repeat:no-repeat;
background-size:contain;
background-position:center;

Không đặt chiều rộng, chiều cao hoặc lề.

EDIT: Dòng trước về việc không đặt chiều rộng, chiều cao hoặc lề đề cập đến câu hỏi ban đầu của OP về tỷ lệ với kích thước cửa sổ. Trong các trường hợp sử dụng khác, bạn có thể muốn đặt chiều rộng / chiều cao / lề nếu cần.


3
Cũng có thể tự động thay đổi kích thước chiều rộng và để cho chiều cao được cố định?
jochemke

3
Có, bạn có thể đặt chiều cao của hình ảnh bằng pixel và chiều rộng tính theo phần trăm, nhưng hình ảnh sẽ bị phá hủy. Nó sẽ không đẹp.
Andrei Volgin

2
Bạn có thể sử dụng hình ảnh nhỏ hơn nhiều nếu bạn sử dụng định dạng vectơ: en.m.wikipedia.org/wiki/Scalable_Vector_Graphics
Andrei Volgin

9
Gì? Không đặt chiều rộng, chiều cao cho container sẽ không hiển thị hình ảnh.
tuyết

3
(1) Câu hỏi ban đầu là về tỷ lệ dựa trên kích thước cửa sổ trình duyệt. (2) Các yếu tố như divcó được chiều cao của riêng chúng từ nội dung của riêng chúng hoặc lấy không gian có sẵn trong mô hình flexbox. Nói rằng không có chiều rộng / chiều cao rõ ràng, container sẽ không hiển thị là không chính xác. Rõ ràng, nếu bạn muốn hiển thị một div trống với hình nền, bạn sẽ cần đặt chiều cao và có thể là chiều rộng, nhưng sau đó bạn sẽ chỉ thấy một phần của hình ảnh, trừ khi tỷ lệ khung hình hoàn toàn giống với hình ảnh chính nó.
Andrei Volgin

69

bằng mã này, hình nền của bạn đi vào trung tâm và sửa kích thước của nó bất kể kích thước div của bạn thay đổi, tốt cho kích thước nhỏ, lớn, bình thường, tốt nhất cho tất cả, tôi sử dụng nó cho các dự án của tôi khi kích thước nền hoặc kích thước div của tôi có thể thay đổi

background-repeat:no-repeat;
-webkit-background-size:cover;
-moz-background-size:cover;
-o-background-size:cover;
background-size:cover;
background-position:center;

Ở kích thước màn hình 800x1280px, hình ảnh bị cắt ở bên phải cạnh hộp. Tất cả các kích thước khác có vẻ tốt.
Mugé

52

Thử cái này :

background-image: url(_images/bg.png);
background-repeat: no-repeat;
background-position: center center;
background-attachment: fixed;
background-size: cover;

33

CSS:

background-size: 100%;

Điều đó sẽ làm các trick! :)


27
Điều này sẽ làm biến dạng hoàn toàn hình ảnh dựa trên tỷ lệ khung hình của cửa sổ trình duyệt. Không bao giờ làm điều đó.
Andrei Volgin

8
Chỉ để tham khảo trong tương lai, nó thực sự sẽ không tệ theo cách này. kích thước nền: 100% 100% sẽ, nhưng chỉ khai báo x là 100% giữ cho nó trông không tệ. Trường hợp thử nghiệm: codepen.io/howlermiller/pen/syduB
Timothy Miller

1
nó sẽ không bị "méo" nhưng nó sẽ kéo dài hình ảnh vượt quá tỷ lệ dự định của nó nếu nó nhỏ hơn container ...
Code Novitiate 23/11/13

1
Vì vậy, câu trả lời sẽ được chấp nhận. OP đã không hỏi về vấn đề đó, chỉ là liệu có thể làm cho nó thay đổi kích thước độc đáo hay không.
Timothy Miller

1
Giải pháp này đã khắc phục vấn đề của tôi. +1
JPeG

22

Đây là sass mixin cho hình nền phản hồi mà tôi sử dụng. Nó hoạt động cho bất kỳ blockyếu tố. Tất nhiên, điều tương tự có thể hoạt động trong CSS đơn giản, bạn sẽ chỉ phải tính toán paddingthủ công.

@mixin responsive-bg-image($image-width, $image-height) {
  background-size: 100%;
  height: 0;
  padding-bottom: percentage($image-height / $image-width);
  display: block;
}


.my-element {
  background: url("images/my-image.png") no-repeat;

  // substitute for your image dimensions
  @include responsive-bg-image(204, 81);
}

Ví dụ http://jsfiddle.net/XbEdW/1/


mã trong fiddle (sử dụng khung) khác với mã trong câu trả lời.
tuyết

14

Đây là một điều dễ dàng =)

body {
    background-image: url(http://domains.com/photo.jpeg);
    background-position: center center;
    background-repeat: no-repeat;
    background-attachment: fixed;
    background-size: cover;
}

Hãy xem bản demo jsFiddle


13

Đây là cách tốt nhất tôi có.

#content   {
    background-image:url('smiley.gif');
    background-repeat:no-repeat;
    background-size:cover;
}

Kiểm tra trên w3schools

Nhiều tùy chọn có sẵn hơn

background-size: auto|length|cover|contain|initial|inherit;

9

Tôi đã sử dụng

#content {
  width: 100%;
  height: 500px;
  background-size: cover;
  background-position: center top;
}

mà làm việc rất tốt


Đó là mã tôi cần! Cảm ơn :)) Tôi đang cố gắng thực hiện thị sai trên 100% màn hình nhưng chiều cao 200px và tôi chỉ cần phần trên cùng của nền nhưng vẫn giữ tỷ lệ của toàn bộ hình ảnh.
thinklinux

8
#container {
    background-image: url("../images/layout/bg.png");
    background-repeat: no-repeat;
    background-size: 100% 100%;
    height: 100vh;
    margin: 3px auto 0;
    position: relative;
}

6

Trang web đáp ứng bằng cách thêm phần đệm vào chiều cao / chiều rộng hình ảnh dưới cùng x 100 = phần đệm dưới cùng%:

http://www.outsidethebrquet.com/responsive-web-design-fluid-background-images/


Phương pháp phức tạp hơn:

http://voormedia.com/blog/2012/11/responsive-background-images-with-fixed-or-fluid-aspect-ratios


Hãy thử thay đổi kích thước nền eq Firefox Ctrl + M để xem kịch bản hay, tôi nghĩ là hay nhất:

http://www.minimit.com/demos/fullscreen-backgrounds-with-centered-content


4

Bạn có thể sử dụng này. Tôi đã thử nghiệm và nó hoạt động đúng 100%:

background-image:url('../images/bg.png'); 
background-repeat:no-repeat;
background-size:100%;
background-position:center;

Bạn có thể kiểm tra trang web của mình với khả năng phản hồi tại Trình mô phỏng kích thước màn hình này: http://www.infobyip.com/testwebsiteresolution.php

Xóa bộ nhớ cache của bạn mỗi khi bạn thực hiện thay đổi và tôi muốn sử dụng Firefox để kiểm tra nó.

Nếu bạn muốn sử dụng một hình ảnh Trang web / URL khác và không thích: background-image:url('../images/bg.png'); // Cấu trúc này là sử dụng hình ảnh từ máy chủ được lưu trữ của riêng bạn. Sau đó sử dụng như thế này: background-image: url(http://173.254.28.15/~brettedm/wp-content/uploads/Brett-Edmonds-Photography-14.jpg) ;

Thưởng thức :)


4

Nếu bạn muốn toàn bộ hình ảnh hiển thị không phân biệt tỷ lệ khung hình, hãy thử điều này:

background-image:url('../images/bg.png');
background-repeat:no-repeat;
background-size:100% 100%;
background-position:center;

Điều này sẽ hiển thị toàn bộ hình ảnh cho dù kích thước màn hình.


3
    <style> 
         * {
  padding: 0;
  margin: 0;
  box-sizing: border-box;
}

#res_img {
  background: url("https://s15.postimg.org/ve2qzi01n/image_slider_1.jpg");
  width: 100%;
  height: 500px;
  background-repeat: no-repeat;
  background-size: 100% 100%;
  background-position: center;
  border: 1px solid red;
}

@media screen and (min-width:300px) and (max-width:500px) {
  #res_img {
    width: 100%;
    height: 200px;
  }
}

    </style>

<div id="res_img">
</div>

3

Chỉ cần hai dòng mã, nó hoạt động.

#content {
  background-image: url('../images/bg.png');
  background-size: cover;
}

2

Thích ứng cho tỷ lệ vuông với jQuery

var Height = $(window).height();
var Width = $(window).width();
var HW = Width/Height;

if(HW<1){
      $(".background").css("background-size","auto 100%");
    }
    else if(HW>1){
      $(".background").css("background-size","100% auto");
    }

2
background:url("img/content-bg.jpg") no-repeat;
background-position:center; 
background-size:cover;

hoặc là

background-size:100%;

0

Tôi nghĩ, cách tốt nhất để làm điều này là:

body {
    font-family: Arial,Verdana,sans-serif;
    background:url("/images/image.jpg") no-repeat fixed bottom right transparent;
}

Theo cách này, không cần phải làm gì thêm và nó khá đơn giản.

Ít nhất, nó làm việc cho tôi.

Tôi hy vọng nó sẽ giúp.


0

Hãy thử sử dụng background-sizenhưng sử dụng TWO ARGUMENT One cho chiều rộng và cái còn lại cho chiều cao

background-image:url('../images/bg.png'); 
background-repeat:no-repeat;
background-size: 100% 100%; // Here the first argument will be the width 
// and the second will be the height.
background-position:center;

0
background: url(/static/media/group3x.6bb50026.jpg);
background-size: contain;
background-repeat: no-repeat;
background-position: top;

thuộc tính vị trí có thể được sử dụng để căn chỉnh đáy và tâm trên cùng theo nhu cầu của bạn và kích thước nền có thể được sử dụng cho vùng trung tâm (bìa) hoặc hình ảnh đầy đủ (chứa hoặc 100%)

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.