2012-02-02 5 views
49

Nói rằng tôi có đoạn mã sauIE8 hiển thị inline-block không làm việc

<style type="text/css" media="all"> 
    span, ul, ul li { 
    display: inline-block; 
    vertical-align: top; 
    margin: 0; 
    padding: 0; 
    list-style: none; 
    } 
</style> 
<span>i would want</span> 
<ul> 
    <li>this</li> 
    <li>on</li> 
    <li>one line.</li> 
</ul> 

Tôi muốn điều này để hiển thị nội tuyến trong IE8. Ở khắp mọi nơi tôi đã đọc tất cả mọi thứ nói rằng điều này sẽ làm việc, IE8 hỗ trợ inline-block. Tuy nhiên sau một buổi sáng cố gắng tôi không thể có được ở trên để xếp hàng. Tôi biết tôi có thể nổi nó, nhưng với các yếu tố khác trên trang của tôi (không được hiển thị ở đây) tôi sẽ cần phải sử dụng một 'clearfix' được đánh dấu nhiều hơn. Tôi chỉ cần nhắm mục tiêu IE8 và rất muốn biết tại sao khối nội tuyến không hoạt động đối với tôi khi được hỗ trợ rõ ràng. Đoạn mã trên thực hiện những gì tôi muốn khi được xem trong Google Chrome.

+0

câu trả lời tốt nhất ở đây: http://stackoverflow.com/questions/6703017/ie-display-inline-block – Marcus

Trả lời

50

Tôi đoán bạn chưa khai báo loại tài liệu. Hãy thử đặt dòng này trên dòng đầu tiên, trước thẻ html:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

Mã bạn đã dán hoạt động trong IE8 với loại tài liệu đó.

+3

Anh yêu em, điều này đã cứu tôi rất nhiều trình duyệt IE-đau! – Iazel

+0

Woah! Tôi quên mất điều này mọi lúc – Chris

+0

@Iazel Bạn có nghĩa là IE's-hit –

37

Không phải tất cả các phiên bản IE8 đều hoạt động bình đẳng. Tôi thấy rằng mã đã cho, ngay cả với DOCTYPE, không hoạt động trong IE 8.0.6001.18702, đây là phiên bản đầu tiên.

Tuy nhiên, cách giải quyết cho các phiên bản IE thấp hơn đã làm công việc của mình trên đó đặc biệt IE 8 cũng như:

<!--[if lt IE 8]> 
<style type="text/css"> 
    li { display: inline; } 
</style> 
<![endif]--> 
+0

Điều này làm việc một cách hoàn hảo, tôi chỉ thêm vào! Điều quan trọng là ghi đè lên, có vẻ như inline thực sự là inline-block trong IE. Cảm ơn bạn! – formatc

+0

Ngẫu nhiên tình cờ gặp điều này, làm việc cho tôi, nội tuyến thực sự là nội tuyến chặn.Cảm ơn – Samuel

+0

Tuyệt vời, điều này đã hiệu quả đối với tôi, tôi có cùng một vấn đề, Windows 7 IE 8 và inline-block không hoạt động – JorgeeFG

17

Bạn có thể đặt margin-right: 1px

làm việc cho tôi khá tốt.

+1

Đây là lựa chọn tốt nhất cho tất cả các câu trả lời. Mẹo tuyệt vời! –

+0

Cái gì ... ?? Tôi không thể tin rằng điều này hoạt động! – Connell

+0

Liên kết bị hỏng. – Yisela

3

Đối với IE8 - bạn có thể thêm một tuyên bố cụ thể:

display: inline-table;

mà hoạt động tuyệt vời.

9

IE8 sẽ coi nó là phần tử cấp khối trừ khi bạn sử dụng phao.

.divInlineBlock 
{ 
    display: inline-block; 
    float: left; 
} 
5

Lưu ý rằng IE8 sẽ hoạt động như IE7 nếu bạn đang xem trang web mạng nội bộ, điều này có thể xảy ra khi bạn phát triển! Xem câu hỏi StackOverflow này:

IE8 Rendering as IE7 By Default?

13

Theo kinh nghiệm của tôi nó luôn luôn là một ý tưởng tốt hơn để sử dụng một cách phổ quát (IE6 +) của tuyên bố một khối inline. Ngay cả khi bạn đang nhắm mục tiêu các trình duyệt mới hơn mỗi khi tôi cố gắng nói rằng nó chỉ được các trình duyệt mới hỗ trợ, một số khách hàng vẫn lộn xộn với loại tài liệu của họ và sau đó doanh số bán hàng cần phải được khắc phục, vì khách hàng vẫn có thể xem và không nhận được nó, rằng nó xuống để cài đặt trình duyệt IE của họ và không phải lỗi của chúng tôi. Nhiều hơn khi bạn đang sử dụng các khối nội tuyến cho các công cụ cấu trúc, nó giữ cho trang web không bị phân tách hoàn toàn nếu người dùng đang xem trang web trên một trình duyệt IE cũ hơn vì lý do nào.

display: inline-block; 
*zoom: 1; 
*display: inline; 
+0

Đây là thành ngữ! Cũng giống như 'if (var i <0; iy x.length; i ++)' – HerrSerker

+0

@HerrSerker Không biết ý của bạn là gì, nhưng đây là cách bạn nhận được inline-block theo cách IE6 + (như nó hay không) . – Idra

+0

Vâng, chính xác những gì tôi muốn nói. Bạn nên tìm hiểu nó khi bạn tìm hiểu cấu trúc vòng lặp JS. – HerrSerker