Hỗ trợ IE8 cho CSS Media Query


178

IE8 không hỗ trợ truy vấn phương tiện CSS sau:

@import url("desktop.css") screen and (min-width: 768px);

Nếu không, cách viết thay thế là gì? Điều tương tự cũng hoạt động tốt trong Firefox.

Bất kỳ vấn đề với mã dưới đây?

@import url("desktop.css") screen; 
@import url("ipad.css") only screen and (device-width:768px);

đối với những người muốn thử css nội tuyến với phương tiện và sử dụng phản hồi (.min) .js hồi đáp không hoạt động trong tình huống này - có vẻ như nó hoạt động cho các tệp .css
NoWomenNoCry 17/03/2017

Câu trả lời:


77

Các phiên bản Internet Explorer trước IE9 không hỗ trợ truy vấn phương tiện .

Nếu bạn đang tìm cách làm giảm thiết kế cho người dùng IE8, bạn có thể thấy nhận xét có điều kiện của IE hữu ích. Sử dụng điều này, bạn có thể chỉ định một biểu định kiểu cụ thể IE 8/7/6 ghi đè lên các quy tắc trước đó.

Ví dụ:

<link rel="stylesheet" type="text/css" media="all" href="style.css"/>
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ie.css"/>
<![endif]-->

Điều này sẽ không cho phép thiết kế đáp ứng trong IE8, nhưng có thể là một giải pháp đơn giản và dễ truy cập hơn so với sử dụng plugin JS.


94
Tôi không thấy các bảng định kiểu có điều kiện sẽ giải quyết vấn đề thiết kế đáp ứng như thế nào.
James Westgate

8
Tôi không hiểu giải pháp này sẽ giải quyết thiết kế đáp ứng trong IE như thế nào? Tải các biểu định kiểu khác nhau tùy thuộc vào trình duyệt không liên quan gì đến việc sử dụng các thuộc tính kiểu khác nhau tùy thuộc vào kích thước trình duyệt chẳng hạn.
Klikerko

13
Tôi nghĩ rằng câu trả lời đúng là IE8 không hỗ trợ truy vấn phương tiện . Câu trả lời này nói lên điều đó nhưng nó không hoàn toàn rõ ràng ngay từ cái nhìn đầu tiên. Bất kể, tôi nghĩ rằng nó đã có hỗ trợ và câu trả lời này đã giúp tôi nhận ra điều khác.
Jason

54
Đúng là câu trả lời này không phải là một giải pháp đáp ứng NHƯNG và với tôi đó là một "NHƯNG" khổng lồ, thực tế là IE8 không được sử dụng trên iPad hoặc máy tính bảng Android. IE8 có thể được sử dụng trên PC XP / Vista chủ yếu từ 2003 đến 2009, màn hình chủ yếu rộng khoảng 1024px. Windows Mobile thuộc IE6 và Windows Pone dưới IE9 +. Câu hỏi thực sự ở đây là hãy tự hỏi mình rằng việc làm responsive cho IE8 có thực sự hữu ích không?
Gregoire D.

16
@GregoireD. Vâng, đúng vậy. Bởi vì có những người xem các trang web với zoom. Trong công ty của tôi, chúng tôi định dạng các trang kể từ phóng to 4x trong 800x600, cho độ chính xác. Điều đó làm cho một màn hình như chiều rộng 400px. Truy vấn phương tiện thực sự hữu ích cho việc đó, mặc dù trình duyệt bạn chọn (và bao gồm IE8).
Arkana

341

css3-mediaqueries-js có lẽ là thứ bạn đang tìm kiếm: tập lệnh này mô phỏng các truy vấn phương tiện. Tuy nhiên (từ trang của tập lệnh), nó "không hoạt động trên các @importbảng định kiểu ed (dù sao bạn không nên sử dụng vì lý do hiệu suất). Cũng sẽ không nghe thuộc tính đa phương tiện của các phần tử <link><style>".

Trong bối cảnh đó bạn có đơn giản hơn Respond.js , cho phép chỉ min-widthmax-widthphương tiện truyền thông truy vấn.


7
Tại sao điều này không được dán nhãn là câu trả lời? Hoàn hảo cho tôi cảm ơn. Bằng cách này, bạn không nên sử dụng truy vấn css nhập khẩu do chi phí chung.
RichW

hoàn hảo, chính xác những gì tôi đang tìm kiếm!
một

Cảm ơn bạn!! Câu trả lời này và answer.js đã giúp tôi tiết kiệm rất nhiều thời gian khi cố gắng thực hiện một cách giải quyết cho các phương tiện truyền thông trong eg8.
Ingusmat

3
nevermind -> nên bao gồm .js sau các tệp .css ... xD
kaljak

4
Đáp ứng đã làm việc, nhưng css3-mediaqueries thì không. Tôi cho rằng đó là vì Phản hồi là khép kín, nhưng css3-mediaqueries dựa vào một số hàm jQuery như phát hiện tác nhân người dùng và các hàm này không được dùng nữa và bị xóa (xem tài liệu jQuery).
Anton Boritskiy

50

Giải pháp tốt nhất mà tôi đã tìm thấy là Respond.js đặc biệt nếu mối quan tâm chính của bạn là đảm bảo thiết kế đáp ứng của bạn hoạt động trong IE8. Nó khá nhẹ với tốc độ 1kb khi min / gzip và bạn có thể chắc chắn rằng chỉ có các máy khách IE8 tải nó:

<!--[if lt IE 9]>
<script src="respond.min.js"></script>
<![endif]-->

Đây cũng là phương pháp được đề xuất nếu bạn đang sử dụng bootstrap: http://getbootstrap.com/getting-started/#support-ie8-ie9


14

IE8 (và các phiên bản thấp hơn) và Firefox trước 3.5 không hỗ trợ truy vấn phương tiện. Safari 3.2 hỗ trợ một phần cho nó.

Có một số cách giải quyết sử dụng JavaScript để thêm hỗ trợ truy vấn phương tiện vào các trình duyệt này. Thử những thứ này xem:

Plugin jQuery Queries Media (chỉ giao dịch với độ rộng tối đa / phút)

css3-mediaqueries-js - một thư viện nhằm mục đích thêm hỗ trợ truy vấn phương tiện vào các trình duyệt không hỗ trợ


Ok..Tôi chỉ bao gồm css3-mediaqueries.js trong trang của mình..Sẽ không hoạt động trong IE..ie truy vấn phương tiện "@import url (" desktop.css ") không chỉ màn hình và (chiều rộng thiết bị: 768px); " cũng như "@import url (" desktop.css ") không phải màn hình và (chiều rộng thiết bị: 768px);"
testndtv

Không chắc chắn nếu tôi cũng cần phải làm gì đó bổ sung..bên bao gồm cả kịch bản ..
testndtv

Xin lưu ý rằng nó không hoạt động trên css nhập khẩu. hãy thử điều này: <link rel = "styleheet" type = "text / css" media = "not screen và (device-width: 768px)" href = "desktop.css" />
Faraz Kelhini

oh ok..tôi thấy. Trên thực tế trong trường hợp đó, nó có thể không giúp tôi, vì tôi đang tìm kiếm thứ gì đó mà không làm gì trên trang..ie chỉ ở bên ngoài trong CSS ..
testndtv

Tập lệnh css3 js googletrunk đó chỉ định rằng nó chỉ hoạt động với phương tiện truyền thông được sử dụng bên trong biểu định kiểu CSS, chứ không phải bên ngoài như 'chỉ màn hình và ....'. Điều này có nghĩa là bạn phải hợp nhất các biểu định kiểu của mình thành một và bên trong chúng thực hiện những gì bạn muốn làm bên ngoài: màn hình @media và (max-width:
980px

11

Lấy từ trang dự án css3mediaqueries.js.

Lưu ý: Không hoạt động trên các bảng định kiểu @ import'ed (dù sao bạn không nên sử dụng vì lý do hiệu suất). Cũng sẽ không lắng nghe thuộc tính truyền thông của các yếu tố <link><style>.


+1 để nói với tôi rằng không hoạt động trên các bảng định kiểu @ import'ed! Tiết kiệm cho tôi rất nhiều thời gian về chủ đề con WP của tôi.
Vinicius Garcia

8

Một cách dễ dàng để sử dụng css3-mediaqueries-js là bao gồm các mục sau trước khi đóng thẻ body:

<!-- css3-mediaqueries.js for IE less than 9 -->
<!--[if lt IE 9]>
<script 
   src="//css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js">
</script>
<![endif]-->

6

Câu trả lời được chỉnh sửa: IE hiểu chỉ màn hình và in dưới dạng phương tiện nhập. Tất cả các CSS khác được cung cấp cùng với câu lệnh nhập khiến IE8 bỏ qua câu lệnh nhập. Trình duyệt Geco như safari hoặc mozilla không gặp phải vấn đề này.


IE của tôi không ở chế độ tương thích..Cũng có bất kỳ thay thế nào khác cho IE.. Về cơ bản, tôi chỉ muốn chọn mọi thứ trừ thiết bị màn hình
768px

Cũng như đã thảo luận về liên kết mà bạn đưa ra, tôi đã thử đặt doctype là <! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Chuyển tiếp // EN" " w3.org/TR/xhtml1/DTD/xhtml1-transitable. dtd "> ... Vẫn không hoạt động ..
testndtv

1
Tôi không shure nếu tôi có bạn đúng. Bạn có thể sử dụng JavaScript để phát hiện độ phân giải màn hình? Với CSS không còn cách nào khác. Bạn có chắc chắn rằng bạn không có bất kỳ lỗi liên quan nào với nguyên nhân khiến min bị ghi đè hoặc bỏ qua. Một mẹo có là thanh công cụ dành cho nhà phát triển. Với điều đó, bạn có thể kiểm tra trực tiếp mà không cần tải pagereload
sra

Việc chuyển sang chế độ quirk rất nhanh, bạn đã kiểm tra chưa? Điều đó cũng có thể dẫn đến kết quả không mong muốn. Quirkmode sẽ ghi đè lên doctype của bạn. Đây cũng là cách thực hành để kiểm tra những gì bạn muốn trong một dự án siêu nhỏ để tăng cường rằng đó không phải là lỗi / kết quả liên quan
sra

ok..Ở đây là cách tôi đã cập nhật ... Tôi có common.css và bên trong nó tôi nói; Màn hình ... @import url ("desktop.css"); @import url ("ipad.css") chỉ màn hình và (chiều rộng thiết bị: 768px); Không chắc cách tiếp cận này có đúng không, nhưng hoạt động cho máy tính để bàn (IE / FF) cũng như iPad. Có thể có một số vấn đề với phương pháp này?
testndtv

6

Các truy vấn phương tiện hoàn toàn không được hỗ trợ trong IE8 trở xuống.


Cách giải quyết dựa trên Javascript

Để thêm hỗ trợ cho IE8, bạn có thể sử dụng một trong một số giải pháp JS. Ví dụ: Phản hồi có thể được thêm vào để thêm hỗ trợ truy vấn phương tiện cho IE8 chỉ với mã sau:

<!--[if lt IE 9]>
<script 
   src="respond.min.js">
</script>
<![endif]-->

CSS Mediaqueries là một thư viện khác thực hiện điều tương tự. Mã để thêm thư viện đó vào HTML của bạn sẽ giống hệt nhau:

<!--[if lt IE 9]>
<script 
   src="css3-mediaqueries.js">
</script>
<![endif]-->

Thay thế

Nếu bạn không thích một giải pháp dựa trên JS, bạn cũng nên xem xét việc thêm một biểu định kiểu chỉ dành cho IE <9 trong đó bạn điều chỉnh kiểu dáng cụ thể cho IE <9. Vì vậy, bạn nên thêm HTML sau vào mã của mình:

<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css" media="all" href="style-ielt9.css"/>
<![endif]-->

Ghi chú :

Về mặt kỹ thuật, đây là một lựa chọn khác: sử dụng các bản hack CSS để nhắm mục tiêu IE <9. Nó có tác động tương tự như bản định kiểu IE <9, nhưng bạn không cần một bản định kiểu riêng biệt cho điều đó. Mặc dù vậy, tôi không khuyến nghị tùy chọn này vì chúng tạo ra mã CSS không hợp lệ (đó là một trong nhiều lý do tại sao việc sử dụng các bản hack CSS thường được sử dụng ngày nay).


5

Trước Internet Explorer 8 không có hỗ trợ cho các truy vấn Media. Nhưng tùy thuộc vào trường hợp của bạn, bạn có thể thử sử dụng các nhận xét có điều kiện để chỉ nhắm mục tiêu Internet Explorer 8 trở xuống. Bạn chỉ cần sử dụng một kiến ​​trúc tệp CSS thích hợp.



3

IE đã không thêm hỗ trợ truy vấn phương tiện cho đến IE9. Vì vậy, với IE8, bạn không gặp may.

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.