Làm cách nào để kích thước nền hoạt động trong IE?


188

Có cách nào để làm cho kiểu CSS background-sizehoạt động trong IE không?


1
Bạn đang cố gắng để đạt được hiệu quả gì?
ZippyV

@ZippV Tôi có một div rộng khoảng 250 pixel. nhưng hình nền rộng 300px. Tôi muốn hình nền phù hợp hoàn toàn (kích thước nền: 100%) để nó không bị cắt. Sau đó, :hovertôi muốn kích thước nền thay đổi thành chiều rộng 300px đầy đủ (kích thước nền: tự động) để tạo ảo giác thu phóng
JD Isaacks

1
Bạn có thể đạt được hiệu quả tương tự bằng cách sử dụng thẻ img. Nếu bạn cần bất cứ thứ gì trên nó, hãy sử dụng chỉ số z.
ZippyV

1
@ John cân nhắc thay đổi câu trả lời được chấp nhận nếu cách giải quyết của Dan có hiệu quả với bạn!
Pekka

@ZippyV Thẻ IMG đôi khi có các tác dụng phụ không cần thiết, ví dụ: nó có thể được chọn hoặc nhấp chuột phải. Những điều này đôi khi OK, đôi khi không.
peterh - Phục hồi Monica

Câu trả lời:


312

Một chút muộn, nhưng điều này cũng có thể hữu ích. Có một bộ lọc IE, dành cho IE 5.5+, bạn có thể áp dụng:

filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='images/logo.gif',
sizingMethod='scale');

-ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(
src='images/logo.gif',
sizingMethod='scale')";

Tuy nhiên, điều này chia tỷ lệ toàn bộ hình ảnh để phù hợp với khu vực được phân bổ, vì vậy nếu bạn đang sử dụng một sprite, điều này có thể gây ra vấn đề.

Đặc điểm kỹ thuật: Bộ lọc AlphaImageLoader @microsoft


12
Tôi tự hỏi tại sao MS không chỉ thực hiện chức năng đó bằng CSS. Cảm ơn rất nhiều!
Martin Andersson

2
Phiên bản IE nào hỗ trợ điều này?
ᆼ ᆺ ᆼ

8
Nếu bạn đang sử dụng các liên kết và nút bên trong phần tử mà chúng tôi đã xác định, các liên kết và nút đó sẽ không hoạt động. Có ai biết một phương pháp để khắc phục điều này?
rubyprince

2
Tôi đã phải thêm position: relative; z-index: 999đầu vào, một nút, bên trong các div như vậy
rubyprince

10
Phương pháp tỷ lệ không giữ tỷ lệ mặc dù .. Vì vậy, tốt nhất là phần tử của bạn có cùng tỷ lệ với hình ảnh của bạn.
Yves Van Broekhoven

45

Tôi đã tạo jquery.backgroundSize.js : plugin jquery 1,5K có thể được sử dụng làm dự phòng IE8 cho các giá trị "cover" và "chứa". Có một cái nhìn vào bản demo .


12
Theo tài liệu của jquery.backgroundSize.js, plugin không được dùng nữa và họ đề xuất thay thế kích thước nền-polyfill .
VOIDHand

Phiên bản cập nhật không hoạt động với background-position: fixed.
Ryan Burney

@VOIDHand Cả bộ lọc và polyfill đều không hoạt động với tôi, tôi đã sử dụng jquery.backgroundSize để thành công
Chris Marisic

21

Nhờ bài đăng này, css đầy đủ của tôi cho hạnh phúc trên trình duyệt là:

<style>
    .backgroundpic {
        background-image: url('img/home.jpg');
        background-size: cover;
        filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
        src='img/home.jpg',
        sizingMethod='scale');
    }
</style>

Đã quá lâu kể từ khi tôi làm việc với đoạn mã này, nhưng tôi muốn thêm tính tương thích trình duyệt hơn. Tôi đã thêm nó vào CSS của mình để tương thích trình duyệt hơn:

-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;

@ Gaurav123 thử-webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover;
honk31

5
điều này làm cho eg8 của tôi hiển thị ảnh nền hai lần - một với kích thước được chia tỷ lệ và lần thứ hai là nền lớn không có kích thước.
arekk

eg7: Có vẻ ổn, nhưng không thể nhấp vào liên kết nữa. (Tại sao tức là7? Các trang web của Govt rất chậm cập nhật)
Robbie Matthews

5

Ngay cả sau này, nhưng điều này cũng có thể hữu ích. Có plugin jQuery-backstretch mà bạn có thể sử dụng làm polyfill cho kích thước nền: cover. Tôi đoán nó phải có thể (và khá đơn giản) để lấy thuộc tính css-background-url với jQuery và đưa nó vào plugin backstretch của jQuery. Thực hành tốt sẽ là kiểm tra hỗ trợ kích thước nền với Modernizr và sử dụng plugin này làm dự phòng.

Backstretch-plugin đã được đề cập trên SO ở đây . JQuery-backstretch-plugin-site ở đây .

Theo cách tương tự, bạn có thể tạo một plugin jQuery hoặc tập lệnh làm cho kích thước nền hoạt động trong tình huống của bạn (kích thước nền: 100%) và trong IE8-. Vì vậy, để trả lời câu hỏi của bạn: Có một cách nhưng atm không có giải pháp plug-and-play (tức là bạn phải tự thực hiện một số mã hóa).

(từ chối trách nhiệm: Tôi đã không kiểm tra kỹ lưỡng plugin backstretch nhưng nó dường như làm tương tự như kích thước nền: bìa)


5

Có một polyfill tốt cho điều đó: louisremi / background-size-polyfill

Để trích dẫn tài liệu:

Tải hình nềnizeize.min.htc lên trang web của bạn, cùng với .htaccess sẽ gửi loại mime theo yêu cầu của IE (chỉ dành cho Apache - được tích hợp trong nginx, nút và IIS).

Ở mọi nơi bạn sử dụng kích thước nền trong CSS của mình, hãy thêm một tham chiếu đến tệp này.

.selector { 
    background-size: cover;
    /* The url is relative to the document, not to the css file! */
    /* Prefer absolute urls to avoid confusion. */
    -ms-behavior: url(/backgroundsize.min.htc);
}

Polyfill này chỉ hoạt động. kích thước nền: che hoặc chứa trong IE8. Không ầm ĩ, không ồn ào.
jimlongo

phương pháp này hỗ trợ cả containcover. Nó chứa 5,7KB không tệ lắm vì nó sẽ truyền trong một gói mạng.
SMMousavi

2

Trong IE11 Windows 7, nó hoạt động với tôi,

background-size: 100% 100%;


0

Tôi đã thử với đoạn script sau -

.selector { 
background-image: url("img/image.jpg");
background-size: 100%;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-repeat: no-repeat;
}

Nó làm việc cho tôi!


cho phiên bản nào?
nihiser
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.