2010-06-15 28 views

Trả lời

43

sử dụng ý kiến ​​có điều kiện trong HTML, như thế này:

<!--[if IE 8]> 
<style>...</style> 
<![endif]--> 

Xem ở đây: http://www.quirksmode.org/css/condcom.html

Bạn có thể kiểm tra các phiên bản IE đáng tin cậy và cũng hãy chắc chắn oth trình duyệt er sẽ không bị nhầm lẫn.

+8

Tôi cần hack không có điều kiện –

+3

Tại sao bạn cần hack? Hacks, bởi bản chất của họ, nên tránh (ngoại trừ như là một phương sách cuối cùng tuyệt đối). –

+0

Bạn sẽ có thể đi một chặng đường dài bằng cách sử dụng điều kiện (bản thân họ là hack), vì chúng cho phép bạn có một đoạn mã cụ thể được thực thi chỉ khi một phiên bản nhất định được phát hiện và có thể chứa CSS, HTML, JS, ... – Palantir

0

Bạn không thể sử dụng tính năng hack mình đã hiển thị, sau đó sử dụng IE7 và dưới hack để ghi đè lên nó?

+4

* Pleeeeease * không sử dụng hack! Hacks để ghi đè * hacks * khác thậm chí còn tồi tệ hơn! –

+1

@codeka - MGS đã nhấn mạnh trong một nhận xét cho câu trả lời khác rằng anh ta sẽ chỉ sử dụng hack, vì vậy tôi chỉ đi với dòng chảy. Nếu đó là tôi, tôi sẽ đi với điều kiện, như Plantir đã trả lời. –

15

Sử dụng \0.

color: green\0; 

tuy nhiên tôi làm khuyên bình luận có điều kiện kể từ khi bạn muốn loại trừ IE9 cũng và nó chưa thể đoán trước liệu hack này sẽ ảnh hưởng đến IE9 cũng hay không.

Bất kể, tôi chưa bao giờ có nhu cầu hack IE8 cụ thể. Nó là gì, vấn đề cụ thể của IE8 mà bạn muốn giải quyết? Là nó rendering trong chế độ tiêu chuẩn IE8 anyway? Trình kết xuất của nó khá tốt.

+9

Có nhưng đừng quên khoảng trắng ** ** ngay trước '\ 0' nếu không nó cũng sẽ ảnh hưởng đến IE9. – ed1nh0

2

Làm điều gì đó như thế này sẽ phù hợp với bạn.

<!--[if IE 8]> 
<div id="IE8"> 
<![endif]--> 

*Your content* 

<!--[if IE 8]> 
</div> 
<![endif]--> 

Sau đó CSS ​​của bạn có thể trông như thế này:

#IE8 div.something 
{ 
    color: purple; 
} 
36

Sử dụng truy vấn phương tiện truyền thông để tách từng trình duyệt:

/* IE6/7 uses media, */ 
@media, { 
     .dude { color: green; } 
     .gal { color: red; } 
} 

/* IE8 uses \0 */ 
@media all\0 { 
     .dude { color: brown; } 
     .gal { color: orange; } 
} 

/* IE9 uses \9 */ 
@media all and (monochrome:0) { 
      .dude { color: yellow\9; } 
      .gal { color: blue\9; } 
} 

/* IE10 and IE11 both use -ms-high-contrast */ 
@media all and (-ms-high-contrast:none) 
{ 
.foo { color: green } /* IE10 */ 
*::-ms-backdrop, .foo { color: red } /* IE11 */ 
} 

Tài liệu tham khảo

+4

giải pháp ie8 của bạn không phải là một hack chỉ IE8, tôi thử nó trên máy tính của tôi, ie9 và ie10 cũng sẽ kế thừa phong cách này. Bạn có một IE8 và dưới hack? –

+3

@JackZhang Có, sử dụng IE9, IE10, IE11, vv hack để thiết lập lại các quy tắc phong cách được thiết lập bởi hack IE8. Tôi đã cập nhật câu trả lời với những hacks đó. –

+2

giải pháp ie8 vẫn không hoạt động đối với chỉ IE8, '\ 0' sẽ hoạt động đối với ie8, ie9 và ie10. Trên thực tế không có phương pháp hack cho phong cách ie8 chỉ trừ css có điều kiện. –

0

Có nhiều cách khác nhau để có được một lớp lên phần tử HTML, xác định những trình duyệt IE phiên bản bạn đang tranh với: Modernizr, các HTML 5 Boilerplate, vv - hoặc chỉ cuộn của riêng bạn . Sau đó, bạn có thể sử dụng lớp đó (ví dụ .lt-ie9) trong một bộ chọn CSS bình thường, không cần hack. Nếu bạn chỉ muốn ảnh hưởng đến IE8 và không phải phiên bản trước, hãy đặt giá trị cũ trở lại bằng bộ chọn .lt-ie8.

8

Nếu những thay đổi nhỏ cần thiết trong sử dụng CSS \ 9 nó nhắm IE8 và dưới (IE6, IE7, IE8)

.element { 
    color:green \9; 
} 

Cách tốt nhất là sử dụng ý kiến ​​có điều kiện trong HTML, như thế này:

<!--[if IE 8]> 
<style>...</style> 
<![endif]--> 
+0

Đã thử nó với thuộc tính 'nội dung' và nó sẽ không nhúc nhích theo IE8 (chưa kiểm tra các phiên bản IE khác). Tôi đoán điều này là bởi vì chúng tôi vượt qua một giá trị chuỗi trích dẫn và hack này (và có lẽ hack khác quá) có thể không tương thích với nó. 'nội dung:" \ 0020 "\ 9;' – adi518

0

này sẽ làm việc cho các phiên bản Bellow IE8

.lt-ie9 #yourID {

mã CSS của bạn

}

0

Đối với IE8 trình duyệt mẹ đẻ mình:

.classname{ 
    *color: green; /* This is for IE8 Native browser alone */ 
} 
2

Vì vậy, một câu hỏi gần đây nhắc nhở tôi nhận thấy một selector thiết hack trừ IE 8 chỉ.

.selector, #excludeIE8::before {} sẽ khiến IE 8 ném toàn bộ bộ chọn, trong khi 5-7 và 9-11 sẽ đọc nó hoàn toàn. Bất kỳ bộ chọn nào của :: (::first-line, ::before, ::first-letter, ::selection) sẽ hoạt động, tôi đã chỉ chọn ::before để dòng đọc chính xác. Lưu ý rằng mục tiêu của ::before selector giả là được giả, vì vậy hãy chắc chắn để thay đổi nó để cái gì khác nếu bạn thực sự có một yếu tố với ID excludeIE8

Điều thú vị đủ, trong trình duyệt hiện đại (FF 45 -52, GC 49-57, Cạnh 25/13) bộ chọn kém :: sẽ ăn toàn bộ bộ chọn (dabblet demo). Nó có vẻ như rằng phiên bản Windows cuối cùng của Safari (và LTE IE 7, lol) không có hành vi này trong khi vẫn hiểu được ::before. Ngoài ra, tôi không thể tìm thấy bất kỳ nội dung nào trong số the spec để cho biết rằng đây là hành vi dự định và vì nó sẽ gây ra sự cố trên bất kỳ bộ chọn nào đặt chứa: ::future-legitimate-pseudoelement ... Tôi có khuynh hướng đây là lỗi và sẽ nibble của chúng tôi rears trong tương lai.


Tuy nhiên, nếu bạn chỉ muốn một cái gì đó ở cấp thuộc tính (chứ không phải là cấp quy tắc), Žiga trên có giải pháp tốt nhất thông qua phụ  \9 (không gian là chìa khóa; KHÔNG copypaste rằng inline vì nó sử dụng một nbsp):

/*property-level hacks:*/ 
/*Standards, Edge*/ 
prop:val; 
/*lte ie 11*/ 
prop:val\9; 
/*lte ie 8*/ 
prop:val \9; 
/*lte ie 7*/ 
*prop:val; 
/*lte ie 6*/ 
_prop:val; 

/*other direction...*/ 
/*gte ie 8, NOT Edge*/ 
prop:val\0; 

Side lưu ý, tôi cảm thấy giống như một necromancer- bẩn nhưng tôi muốn nơi nào đó để ghi lại loại trừ-IE8 chỉ chọn thiết hack tôi thấy ngày hôm nay, và điều này dường như là nơi phù hợp nhất.

0

tôi đang tìm kiếm một lựa chọn tốt cho IE10 và dưới phong cách CSS (nhưng nó sẽ làm việc cho IE8 chỉ cũng) và tôi đã đưa ra ý tưởng này:

<!--[if lt IE 10]><div class="column IE10-fix"><![endif]--> 
<!--[if !lt IE 10]><!--><div class="column"><!--<![endif]--> 

Tôi tuyên bố div của tôi hay bất cứ điều gì bạn muốn với một lớp phụ, điều này cho phép tôi có thêm CSS trong cùng một bảng định kiểu theo cách rất dễ đọc.

Đó là W3C hợp lệ và không phải là một bản hack CSS lạ.

Các vấn đề liên quan