Đặt kích thước trên ảnh nền bằng CSS?


Câu trả lời:


621

CSS2

Nếu bạn cần làm cho hình ảnh lớn hơn, bạn phải chỉnh sửa hình ảnh trong trình chỉnh sửa hình ảnh.

Nếu bạn sử dụng thẻ img, bạn có thể thay đổi kích thước, nhưng điều đó sẽ không mang lại cho bạn kết quả mong muốn nếu bạn cần hình ảnh làm nền cho một số nội dung khác (và nó sẽ không lặp lại như bạn muốn) ...

CSS3 giải phóng sức mạnh

Điều này có thể làm trong CSS3 với background-size.

Tất cả các trình duyệt hiện đại đều hỗ trợ điều này, vì vậy trừ khi bạn cần hỗ trợ các trình duyệt cũ, đây là cách để thực hiện.
Các trình duyệt được hỗ trợ:
Mozilla Firefox 4.0+ (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) và Chrome 3.0+.

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

Đặc biệt, tôi thích covercontaincác giá trị mang lại cho chúng ta sức mạnh kiểm soát mới mà trước đây chúng ta không có.

Tròn

Bạn cũng có thể sử dụng background-size: roundcó nghĩa kết hợp với lặp lại:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

Điều này sẽ điều chỉnh độ rộng hình ảnh để nó phù hợp với toàn bộ số lần trong khu vực định vị nền.


Lưu ý bổ sung
Nếu kích thước bạn cần là kích thước pixel tĩnh, vẫn rất thông minh để thay đổi kích thước vật lý của hình ảnh thực tế. Điều này vừa để cải thiện chất lượng thay đổi kích thước (cho rằng phần mềm hình ảnh của bạn hoạt động tốt hơn trình duyệt) và để tiết kiệm băng thông nếu hình ảnh gốc lớn hơn những gì sẽ hiển thị.


7
Lưu ý rằng cũng có câu hỏi về màn hình retina trên iPad và iPhone và có lẽ các thiết bị có độ phân giải cao khác sẽ xuất hiện. Điều này có nghĩa là có thể thay đổi kích thước hình ảnh lớn hơn bằng CSS và sử dụng nhiều tệp CSS và các thủ thuật khác để phục vụ hình ảnh cụ thể. Giới thiệu tuyệt vời về nó ở đây: webmonkey.com/2012/03/ Mạnh
Leo

Đây là giải pháp tồi tệ nhất hiện nay, vì không phải mọi cửa hàng thương mại điện tử sẽ định cỡ lại hình ảnh như đề xuất. Trong năm 2009, rất có thể nó đã gần với tùy chọn tốt nhất, bây giờ chỉ cần sử dụng các thuộc tính kích thước như bên dưới.
ShaunOReilly

332

Chỉ CSS 3 hỗ trợ điều đó,

background-size: 200px 50px;

Nhưng tôi sẽ tự chỉnh sửa hình ảnh để người dùng cần tải ít hơn và nó có thể trông đẹp hơn hình ảnh được thu nhỏ mà không khử răng cưa.


32
Thật không may, mọi người vẫn sử dụng
eg8

16
Thật xấu hổ cho Microsoft vì trình duyệt khủng khiếp này
Mahmoodvcs

Kết thúc năm 2013, vẫn cần thêm background: url('resized_image.png')\9;cho IE lt 9
skobaljic

Đây là con đường để đi ngay cả trong năm 2017!
Francisco Ochoa

Tôi cũng đến từ năm 2017 và đây là cách chúng tôi làm điều đó.
Ska

23

Nếu người dùng của bạn chỉ sử dụng Opera 9.5+, Safari 3+, Internet Explorer 9+ và Firefox 3.6+ thì câu trả lời là có. Mặt khác, không.

Các nền có kích thước bất động sản là một phần của CSS 3, nhưng nó sẽ không hoạt động trên hầu hết các trình duyệt.

Đối với mục đích của bạn chỉ cần làm cho hình ảnh thực tế lớn hơn.


1
kích thước nền: 100%; vị trí nền: trung tâm; - điều này hoạt động trong IE6 chạy trên Máy ảo của tôi trên XP Home.
InnateDev

7
IE 6,7,8 không phải là 'hầu hết các trình duyệt'.
Mahmoodvcs

1
Ngay cả trong năm 2013 - trong khi nhận xét "IE6,7,8 không phải là 'hầu hết các trình duyệt'" có thể đúng một phần liên quan đến IE6; IE7 và IE8 vẫn có một thị phần khá đáng tiếc. Cách tốt nhất mà tôi đã tìm thấy để làm điều này là sử dụng Javascript kết hợp với Modernizr (hoặc các phương tiện khác để gắn thẻ 'OLDIE').
AndrewPK

19

Không thể được . Nền sẽ luôn lớn như có thể, nhưng bạn có thể ngăn nó lặp lại với background-repeat.

background-repeat: no-repeat;

Thứ hai, nền không đi vào khu vực lề của hộp, vì vậy nếu bạn muốn có nền chỉ nằm trên nội dung thực tế của hộp, bạn có thể sử dụng lề thay vì đệm.

Thứ ba, bạn có thể kiểm soát nơi hình ảnh nền bắt đầu. Theo mặc định, đó là góc trên cùng bên trái của hộp, nhưng bạn có thể điều khiển nó bằng background-position, như thế này:

background-position: center top;

hoặc có lẽ

background-position: 20px -14px;

Định vị tiêu cực được sử dụng rất nhiều với các họa tiết CSS .


Không, nó không lớn như tôi có thể. Nó luôn có cùng kích thước, nhưng tôi cần phải làm nó lớn hơn.
Johan

Chà, điều đó là không thể. Có thể có các tùy chọn để thực hiện điều đó trong các phiên bản CSS trong tương lai, nhưng đó là một chặng đường dài.
mikl

Câu trả lời này là sai. CSS3 có thuộc tính kích thước nền được hỗ trợ trong IE9 +.
Downpour046

3
Hãy nhìn vào dấu thời gian. Vào năm 2009, kích thước nền chỉ là một chút lấp lánh trong mắt WebKit. Vui lòng cập nhật nó, nếu bạn muốn, nhưng đã có nhiều câu trả lời khác mô tả kích thước nền.
mikl

12

Không quá khó, nếu bạn không sợ đi sâu hơn một chút :)

Có một đối số bị lãng quên :

background-size: contain;

Điều này sẽ không kéo dài của bạn background-imagenhư nó sẽ làm với cover. Nó sẽ kéo dài cho đến khi cạnh dài hơn đạt đến chiều rộng hoặc chiều cao của thùng chứa bên ngoài và do đó giữ được hình ảnh.

Chỉnh sửa: Cũng có -webkit-background-size-moz-background-size.

Thuộc tính kích thước nền được hỗ trợ trong IE9 +, Firefox 4+, Opera, Chrome và Safari 5+.

- Nguồn: Trường W3


3

kích thước nền: 200px 50px thay đổi thành 100% 100% và nó sẽ mở rộng theo nhu cầu của thẻ nội dung như ul li hoặc div ... đã thử nó


3

Để hỗ trợ cho câu trả lời mà @tetra đưa ra, tôi muốn chỉ ra rằng nếu hình ảnh là một SVG, thì việc thay đổi kích thước hình ảnh thực tế là không cần thiết.

Vì tệp SVG chỉ là XML, bạn có thể chỉ định bất kỳ kích thước nào bạn muốn nó xuất hiện trong XML.

Tuy nhiên, nếu bạn đang sử dụng cùng một hình ảnh SVG ở những nơi khác nhau và cần nó có kích thước khác nhau, thì việc sử dụng background-sizelà rất hữu ích. Các tệp SVG vốn đã nhỏ hơn hình ảnh raster dù sao và thay đổi kích thước nhanh chóng bằng CSS có thể rất hữu ích mà không phải trả bất kỳ chi phí hiệu năng nào mà tôi biết và chắc chắn sẽ không làm giảm chất lượng.

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

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}

(Lưu ý: điều này hoạt động với tôi trong OS X 10.7 với Firefox 8, Safari 5.1 và Chrome 16.0.912.63)


3

Bạn hoàn toàn có thể với CSS3:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

Điều này sẽ kích thước hình ảnh nền tới 100% chiều rộng của phần tử cơ thể và sau đó sẽ điều chỉnh lại kích thước nền cho phù hợp khi phần tử cơ thể thay đổi kích thước cho độ phân giải nhỏ hơn.

Dưới đây là ví dụ: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css/


2

Chỉ cần các div lồng nhau để tương thích trình duyệt chéo

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   

2

Bạn có thể sử dụng hai <div>yếu tố:

  • Một là một thùng chứa (nó là cái mà ban đầu bạn muốn hình nền xuất hiện).

  • Cái thứ hai được chứa trong. Bạn đặt kích thước của nó thành kích thước của hình nền (hoặc kích thước bạn muốn xuất hiện).

Các div chứa sau đó được thiết lập để được định vị absolute. Bằng cách này, nó không can thiệp vào dòng chảy bình thường của các mục trong div chứa.

Nó cho phép bạn sử dụng hình ảnh sprite hiệu quả.


1

Bạn không thể đặt kích thước của hình nền của mình bằng phiên bản CSS hiện tại (2.1).

Bạn chỉ có thể đặt: position, fix, image-url, repeat-mode, và color.


1
put the below code in the body of you css file

background-image: URL('../images/wave-green-plain-colour.jpg') ;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
width:100px;

1

Bạn đã viết

background: url('bg.gif') top repeat-y;    
background-size: 490px;

nhưng bạn sẽ chỉ nhìn thấy nền tùy thuộc vào kích thước của container.

nếu bạn có một thùng chứa trống với url nền và kích thước nền là gì, bạn sẽ không thấy bg.gif.

Nếu bạn đặt kích thước của lục địa thành

background: url('bg.gif') top repeat-y;    
background-size: 490px;
height: 490px;
width: 490px;

kết hợp với mã bạn đã viết ở trên, bạn sẽ có thể thấy tệp bg.gif.


0

background-size đang hoạt động trong Chrome 4.1, nhưng cho đến nay tôi không thể làm cho nó hoạt động trong Firefox 3.6.


0

Tôi sử dụng hình nền cho các nút, nhưng nó chỉ hiển thị hình ảnh có cùng kích thước với văn bản, ngay cả khi tôi đặt chiều rộng và chiều cao. Thay vào đó, tôi đệm văn bản của mình bằng các &nbsp;ký tự (khoảng trắng không phá vỡ). Tôi tát vào càng nhiều càng tốt, về cơ bản, cho đến khi tất cả các nút nền xuất hiện. Vì vậy, tôi có thể có mã như thế này:

Trong biểu định kiểu:

#v2menu-home {
    background-image:url(../v2-siteimages/button.png);
    background-repeat:no-repeat;
}

Trong tài liệu HTML:

<div id="v2menu">
    <a id="v2menu-home" href="/index.php">home&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</a>
</div><!-- v2menu -->

2
Một cách khác là đặt kích thước của liên kết thành kích thước của hình nền. Trong biểu định kiểu, (dưới # v2menu-home trong ví dụ trên) sử dụng display: block và đặt chiều cao và chiều rộng ở đó. Điều đó thực sự hoạt động. Không cần cho các nhân vật không phá vỡ sau đó.
Martin Thompson

0

Ví dụ:
Ảnh nền sẽ luôn vừa với kích thước vùng chứa (chiều rộng 100% và chiều cao 100px).
CSS trình duyệt chéo:

.app-header {
background: url("themes/default/images/background.jpg") no-repeat;
-moz-background-size: 100% 100px;
-webkit-background-size: 100% 100px;
-o-background-size: 100% 100px;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src = "themes/default/images/background.jpg", sizingMethod = 'scale');
background-size: 100% 100px;

}


0

Điều này có thể thực hiện trong CSS3 với kích thước nền

.backgroungImage {
    background: url('../imageS/background.jpg') no-repeat;
    background-size: 32px 32px;
}

0

Nếu bạn muốn đặt background-sizetrong cùng một thuộc backgroundtính, bạn có thể sử dụng:

background:url(my-bg.png) no-repeat top center / 50px 50px;

Tôi không thể kiểm tra, nhưng có lẽ.
Ratata Tata

Tôi nghĩ rằng ipad không nhận ra nền tốc ký @ orlando-leite
DGRFDSGN
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.