<! - [if! IE]> không hoạt động


139

Tôi đang gặp khó khăn

<!--[if !IE]>

làm việc. Tôi tự hỏi nếu đó là bởi vì tôi có điều này trong tài liệu của tôi

<!doctype html>
<!--[if lt IE 7]> <html class="ie6 oldie"> <![endif]-->
<!--[if IE 7]>    <html class="ie7 oldie"> <![endif]-->
<!--[if IE 8]>    <html class="ie8 oldie"> <![endif]-->
<!--[if gt IE 8]><!-->
<html class="">
<!--<![endif]-->

Khi tôi thêm

<!--[if !IE]><!-->
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css" />
<!--<![endif]-->

với tiêu đề của tôi vì một số lý do nó không hoạt động. Tuy nhiên nếu tôi thêm

<!--[if !IE]><!-->
    <style>
        All my css in here
    </style>
    <!--<![endif]-->

đến trang html thực tế (trong tiêu đề) nó hoạt động. Bất kỳ đề xuất? Chúc mừng

Cập nhật câu hỏi của tôi

Ok, khi tôi gỡ bỏ, <!-->tôi chỉ kiểm tra trong IE đang hoạt động nhưng bây giờ trở lại FF, các no-eg.cs cũng đã được áp dụng cho FF. Vì vậy, tôi đã thêm lại <!-->và xóa / (và thêm nó vào mẫu chính để cms sẽ không thêm lại) và tất cả đang hoạt động trở lại trong FF nhưng bây giờ biểu định kiểu đang được áp dụng cho IE! Vì vậy, tôi đã cố gắng

<!--[if IE]>
<link type="text/css" rel="stylesheet" href="https://stackoverflow.com/stylesheets/no-ie.css">
<![endif]-->

<!--[if !IE]> -->
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css">
<!-- <![endif]-->

Và điều đó đã không làm việc. Về cơ bản, tôi đang cố gắng để trang này hoạt động http://css-tricks.com/examples/ResponsiveTables/responsive.php nhưng di chuyển css vào biểu định kiểu. Chắc chắn nó phải đơn giản. Tôi đang thiếu gì? Tôi không muốn sử dụng JQuery nếu tôi không phải. Chúc mừng


1
Bạn không cần <!-->ngay lập tức sau<!--[if !IE]>
techfoobar

29
Lưu ý: nếu IE chỉ hoạt động tối đa IE9.
cameronjonesweb

Một số người để lại tin nhắn IF IE buồn cười trên một số trang.
neverMind9

@cameronjonesweb bạn có thể liên kết một tài liệu tham khảo xin vui lòng nếu không các câu như thế này không hữu ích?
đào tạo

@trainoocation, tôi có thể, ngoại trừ nhận xét của tôi là 5 tuổi
cameronjonesweb

Câu trả lời:


236
<!--[if !IE]><!--><script src="zepto.min.js"></script><!--<![endif]-->
<!--[if IE]><script src="jquery-1.7.2.min.js"></script><![endif]-->

Lưu ý: Những nhận xét có điều kiện này không còn được hỗ trợ từ IE 10 trở đi .


39
Kể từ tháng 6 năm 2013, đây là câu trả lời đúng duy nhất trên trang này.
JohnB

2
Là dòng này thiếu một khung góc đóng? Không nên là: <! - [if! IE]> <! -> <script src = "zepto.min.js"> </ script> <! -> <! [Endif] ->
n00shie

1
Điều này, cùng với tất cả các giải pháp nhận xét có điều kiện khác, sẽ không phát hiện IE 10 / IE 11
Lloyd Banks

9
Nó không hoạt động trong IE 11, nó tải tập lệnh, ngay cả khi điều kiện là! IE
Giedrius

49
@Giedrius Từ IE10 trên, ý kiến có điều kiện được không còn được hỗ trợ : msdn.microsoft.com/en-us/library/ie/hh801214(v=vs.85).aspx
acdcjunior

70

Các trình duyệt khác ngoài IE coi các câu lệnh có điều kiện là các nhận xét vì chúng được đặt trong các thẻ nhận xét.

<!--[if IE]>
Non-IE browsers ignore this
<![endif]-->

Tuy nhiên, khi bạn nhắm mục tiêu một trình duyệt KHÔNG phải IE, bạn phải sử dụng 2 bình luận, một trước và một sau mã. IE sẽ bỏ qua mã giữa chúng, trong khi các trình duyệt khác sẽ coi nó là mã bình thường. Do đó, cú pháp để nhắm mục tiêu các trình duyệt không phải IE là:

<!--[if !IE]-->
IE ignores this
<!--[endif]-->

Lưu ý: Những nhận xét có điều kiện này không còn được hỗ trợ từ IE 10 trở đi .


1
Thật tuyệt. Cảm ơn vì điều đó. Biểu định kiểu hoạt động tuy nhiên vấn đề tôi gặp phải bây giờ là ở đầu trang phía trên tiêu đề, nó xuất hiện trong tức là <! - [if! IE] -> <! - [endif] -> (thẻ đã đi trong khu vực tiêu đề không phải cơ thể)
dùng1516788

21
-1: Câu trả lời này là không chính xác<!--[if !IE]-->IE ignores this<!--[endif]-->được không ẩn từ IE! (7, 8 hoặc 9)
JohnB

3
Không có câu trả lời nào phù hợp với tôi, có lẽ có gì đó đã thay đổi trong bản phát hành IE10 gần đây (cũng đã thử ở chế độ IE9). - Tất cả các nỗ lực đã kết thúc đến phần! IE trên tất cả các trình duyệt (IE chứ không phải IE).
Daniel Varod

2
IE10 không hỗ trợ các báo cáo có điều kiện.
Scorpius

1
Lưu ý về khoảng trắng trong <! - [if IE]> và <! [Endif] -> - không nên có bất kỳ khoảng trắng nào (ví dụ giữa! - và [. Nó không hoạt động với khoảng trắng.
Robert Skarżycki

37

Một bản cập nhật nếu ai đó vẫn truy cập trang này, tự hỏi tại sao việc nhắm mục tiêu tức là không hoạt động. IE 10 trở đi không còn hỗ trợ bình luận có điều kiện. Từ trang web chính thức của MS:

Hỗ trợ cho các nhận xét có điều kiện đã bị xóa trong các tiêu chuẩn và chế độ quirks của Internet Explorer 10 để cải thiện khả năng tương tác và tuân thủ với HTML5.

Vui lòng xem tại đây để biết thêm chi tiết: http://msdn.microsoft.com/en-us/l Library / i / hh801214 (v = vs85) .aspx

Nếu bạn rất cần nhắm mục tiêu tức là, bạn có thể sử dụng mã jquery này để thêm một lớp tức là và sau đó sử dụng lớp .ie trong css của bạn để nhắm mục tiêu tức là các trình duyệt.

if ($.browser.msie) {
 $("html").addClass("ie");
}

Cập nhật: $ .browser không khả dụng sau jQuery 1.9. Nếu bạn nâng cấp lên jQuery trên 1.9 hoặc bạn đã sử dụng nó, bạn có thể bao gồm tập lệnh di chuyển jQuery sau jQuery để nó thêm các phần còn thiếu: Plugin jQuery Migrate

Ngoài ra, vui lòng kiểm tra chủ đề này để biết cách giải quyết có thể: lỗi browser.msie sau khi cập nhật lên jQuery 1.9.1


Đó là một giải pháp tốt đẹp thực sự! Tôi thậm chí không cần sử dụng nó trên cây dom để áp dụng các lớp nhất định.
mmm

2
Xin lưu ý, điều này không được chấp nhận kể từ jQuery 1.3 và bị xóa trong 1.9
Jøran 7/12/2015


12

Cú pháp được Microsoft khuyến nghị cho các bình luận có điều kiện được tiết lộ của Downlevel là đây:

<![if !IE]>
<link type="text/css" rel="stylesheet" href="/stylesheets/no-ie.css" />
<![endif]>

Đây không phải là ý kiến, nhưng họ làm việc đúng.


Tìm thấy liên kết này hỗ trợ câu trả lời này, cũng có rất nhiều thông tin khác có thể giúp ích cho chủ đề này, tôi nghĩ đây là một chủ đề quan trọng ... chỉ có sự khác biệt tôi thấy là nếu sử dụng cú pháp ẩn hoặc tiết lộ và tôi không chắc làm thế nào sẽ ảnh hưởng đến các trình duyệt khác ... msdn.microsoft.com/en-us/l
Library / ms537512.ASPX

2
Lưu ý: Những nhận xét có điều kiện này không còn được hỗ trợ từ IE 10 trở đi
Flimm

8

Trước hết cú pháp đúng là:

<!--[if IE 6]>
<link type="text/css" rel="stylesheet" href="https://stackoverflow.com/stylesheets/ie6.css" />
<![endif]-->

Hãy thử bài đăng này: http://www.quirksmode.org/css/condcom.htmlhttp://css-tricks.com/how-to-create-an-ie-only-stylesheet/

Một điều bạn có thể làm:

Kiểm tra trình duyệt với jQuery:

if($.browser.msie){ // do something... }

trong trường hợp này, bạn có thể thay đổi quy tắc css cho một số thành phần hoặc thêm tham chiếu liên kết css mới:

đọc cái này: http://rickardnilsson.net/post/2008/08/02/Appending-stylesheets-dynamical-with-jQuery.aspx


Xem câu trả lời của user1324409 ở trên để có câu trả lời chính xác hơn.
Chris Peters

2
Do các bản cập nhật jQuery, bất kỳ ai sử dụng $ .browser.msie, sẽ phải bao gồm jquery-Migrate.js và sau đó điều này sẽ hoạt động.
AspiresCanadian

1
Lưu ý: Những nhận xét có điều kiện này không còn được hỗ trợ từ IE 10 trở đi
Flimm

Các liên kết được cung cấp trong câu trả lời là chết.
Pankaj

8

Bạn cần đặt một khoảng trống cho <!-- [if !IE] --> khối css đầy đủ của tôi diễn ra như sau, vì IE8 rất tệ với các truy vấn phương tiện

<!-- IE 8 or below -->   
<!--[if lt IE 9]>
<link rel="stylesheet" type="text/css"  href="https://stackoverflow.com/Resources/css/master1300.css" />        
<![endif]-->
<!-- IE 9 or above -->
<!--[if gte IE 9]>
<link rel="stylesheet" type="text/css" media="(max-width: 100000px) and (min-width:481px)"
    href="https://stackoverflow.com/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="https://stackoverflow.com/Resources/css/master480.css" />        
<![endif]-->
<!-- Not IE -->
<!-- [if !IE] -->
<link rel="stylesheet" type="text/css" media="(max-width: 100000px) and (min-width:481px)"
    href="/Resources/css/master1300.css" />
<link rel="stylesheet" type="text/css" media="(max-width: 480px)"
    href="/Resources/css/master480.css" />
<!-- [endif] -->

Cảm ơn vì nhận xét của bạn nhưng nếu tôi sử dụng <! - [if! IE] -> <link rel = "styleheet" type = "text / css" href = "/ stylheets / no-eg.csss" /> <! - [endif] -> sau đó các trình duyệt khác cũng áp dụng điều này.
dùng1516788

3
Không phải đó là vấn đề, để các trình duyệt khác áp dụng phần đó sao?
John Hayford

1
-1: !IEKỹ thuật được đề cập ở đây sẽ thực sự thực thi khối nhận xét cho IE 7 đến 10.
Ian Campbell

1
Lưu ý: Những nhận xét có điều kiện này không còn được hỗ trợ từ IE 10 trở đi
Flimm

8

Để nhắm mục tiêu người dùng IE:

<!--[if IE]>
Place Content here for Users of Internet Explorer.
<![endif]-->

Để nhắm mục tiêu tất cả những người khác:

<![if !IE]>
Place Content here for Users of all other Browsers.
<![endif]>

Nhận xét có điều kiện chỉ có thể được phát hiện bởi Internet Explorer, tất cả các Trình duyệt khác xử lý nó như các Nhận xét bình thường.

Để nhắm mục tiêu IE 6,7, v.v. Bạn phải sử dụng "Lớn hơn bằng" hoặc "Ít hơn (bằng)" trong câu lệnh If. Như thế này.

Lớn hơn hoặc bằng:

<!--[if gte IE 7]>
Place Content here for Users of Internet Explorer 7 or above.
<![endif]-->

Ít hơn:

<!--[if lt IE 6]>
Place Content here for Users of Internet Explorer 5 or lower.
<![endif]-->

Nguồn: mediacolitic.com


2
Lưu ý: Những nhận xét có điều kiện này không còn được hỗ trợ từ IE 10 trở đi
Flimm

7

Điều này là cho đến IE9

<!--[if IE ]>
<style> .someclass{
    text-align: center;
    background: #00ADEF;
    color: #fff;
    visibility:hidden;  // in case of hiding
       }
#someotherclass{
    display: block !important;
    visibility:visible; // in case of visible

}
</style>

Cái này dành cho sau IE9

  @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {enter your CSS here}

5

Đối với trình duyệt IE:

<!--[if IE]>
<meta http-equiv="Content-Type" content="text/html; charset=Unicode">
<![endif]-->

Đối với tất cả các trình duyệt không phải IE:

<![if !IE]>
<meta http-equiv="Content-Type" content="text/html; charset=utf8">
<![endif]>

Đối với tất cả IE lớn hơn 8 HOẶC tất cả các trình duyệt không phải IE:

<!--[if (gt IE 8)|!(IE)]><!--><script src="/_JS/library/jquery-2.1.1.min.js"></script><!--<![endif]-->

3

Nhận xét có điều kiện là một nhận xét bắt đầu <!--[if IE]>mà bất kỳ trình duyệt nào không thể đọc được ngoại trừ IE.

từ năm 2011 Nhận xét có điều kiện không được hỗ trợ từ mẫu IE 10 như được Microsoft công bố vào thời điểm đó https://msdn.microsoft.com/en-us/l Library / hh801214 (v = vs85) .aspx

Tùy chọn duy nhất để sử dụng các bình luận có điều kiện là yêu cầu IE chạy trang web của bạn dưới dạng IE 9 hỗ trợ các bình luận có điều kiện.

bạn chỉ có thể viết các tệp css và / hoặc js của riêng mình và các trình duyệt khác sẽ không tải hoặc thực thi nó.

đoạn mã này cho thấy cách làm cho IE 10 hoặc 11 chạy eg-only.css và eg-only.js có chứa mã tùy chỉnh để giải quyết các vấn đề tương thích IE.

    <html>
      <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">
      <!--[if IE]>
            <meta http-equiv="Content-Type" content="text/html; charset=Unicode">
            <link rel="stylesheet" type="text/css" href='/css/ie-only.css' />
            <script src="/js/ie-only.js"></script>
      <![endif]-->
    </html>

1

Trong trường hợp bạn đang làm việc với IE 10 trở lên, như được đề cập trong http://tanalin.com/en/articles/ie-version-js/ các bình luận có điều kiện không còn được hỗ trợ. Bạn có thể tham khảo https://gist.github.com/jasongaylord/5733469 như một phương pháp thay thế, phiên bản Trident cũng được kiểm tra từ navigator.userAgent. Điều này cũng được xác minh trong trường hợp trình duyệt hoạt động ở chế độ tương thích.


1

Điều này hoạt động với tôi trên tất cả các trình duyệt lớn hơn phiên bản 6 (IE7, 8, 9, 10, v.v., Chrome 3 cho đến hiện tại và FF ver 3 cho đến hiện tại):

//test if running in IE or not
        function isIE () {
            var myNav = navigator.userAgent.toLowerCase();
            return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
        }

0

Tôi đang sử dụng javascript này để phát hiện trình duyệt IE

if (
    navigator.appVersion.toUpperCase().indexOf("MSIE") != -1 ||
    navigator.appVersion.toUpperCase().indexOf("TRIDENT") != -1 ||
    navigator.appVersion.toUpperCase().indexOf("EDGE") != -1
)
{
    $("#ie-warning").css("display", "block");
}

0

Cảm ơn bạn Fernando68, tôi đã sử dụng điều này:

function isIE () {
     var myNav = navigator.userAgent.toLowerCase();
     return (myNav.indexOf('msie') != -1 || myNav.indexOf('trident') != -1) ? true : false;
}

if(isIE()){
     $.getScript('js/script.min.js', function() {
            alert('Load was performed.');
     });
}

-1

Tôi nhận được mã này hoạt động trên trình duyệt của tôi:

<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
  <script src="https://oss.maxcdn.com/libs/respond.js/1.3.0/respond.min.js"></script>
<![endif]-->

Lưu ý cho mã này: HTML5 Shiv và respond.js IE8 hỗ trợ các yếu tố HTML5 và truy vấn phương tiện

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.