2009-01-12 28 views

Trả lời

9

Tôi đã đi qua một cái gì đó của một hack: http://meyerweb.com/eric/thoughts/2005/05/31/universal-child-replacement/ Sử dụng 'star html' hack cho IE (6 và dưới) kết hợp với điều này cho phép tôi để chọn con trực tiếp. Hãy nói rằng chúng ta muốn áp dụng padding-top của 10px cho đứa trẻ trực tiếp, F, E:

* html body E F 
{ 
    /* apply style here for IE 6 */ 
    padding-top: 10px; 
    /* This applies the style to every F inside of E */ 
} 
* html body E * F 
{ 
    /* undo style here */ 
    padding-top: 0px; 
    /* This will undo the style set above for every F that has something in between itself and E, that is, every F besides the direct children of E */ 
} 

Tôi đánh giá cao sự trả lời của bạn cho đến nay nhưng càng nhiều càng tốt Tôi ghét phải chấp nhận câu trả lời của riêng tôi, đây là giải pháp cuối cùng tôi đã giải quyết. Cảm ơn các bạn!

+3

Thật không may câu trả lời này không hoàn hảo. Nó hoạt động nhưng như con cháu hậu duệ, nó cũng có thể gây ra vấn đề ... giả sử bạn có 3 div lồng nhau. bạn muốn thay đổi div thứ hai thành padding 20px trong khi div thứ ba có đệm là 5px. Bạn có thể có quy tắc này đặt mọi trẻ em khác vào một padding 4 px. Nhưng hãy nói rằng bạn có một div khác để 7px ... bạn không thể chỉ cần đặt giá trị trở lại cái gì khác. Nó có thể làm việc nhưng bạn vẫn còn quá tìm kiếm những hậu quả không tốt ... –

4

Bạn có thể sử dụng jQuery, không phải là một giải pháp khá, nhưng nó là một lựa chọn mà tôi đã sử dụng trong quá khứ:

$("parent > child").each(function() { 
    $(this).addClass("child-styles"); 
} 

rõ ràng Bạn sẽ muốn quấn này trong một số IE6 chuyên ngành chỉ kiểm tra. Và có lẽ muốn có một tấm phong cách bọc trong tuyên bố IF IE6 để thêm những phong cách chuyên ngành.

0

Bạn có cần con trực tiếp không? IE6 hỗ trợ bộ chọn hậu duệ như

div span { ... } 

Có lẽ bạn có thể tận dụng để nhắm mục tiêu theo ý mình muốn. Có lẽ bạn có thể đăng một số mã để chúng tôi có thể cung cấp cho bạn câu trả lời cụ thể hơn?

+2

không có nghĩa là "cha mẹ> con" nơi nó chỉ sử dụng trẻ em trực tiếp và không phải tất cả trẻ em. –

+1

vâng tôi hiểu - nếu bạn có thể thông minh về nó đôi khi sử dụng bộ chọn con cháu bình thường có thể làm việc trong một pinch –

0

Đặt lớp tùy chỉnh trên phần tử.

<ul> 
<li class="first">Blah<li> 
<li>Blah<li> 
<li>Blah<li> 
</ul> 
+2

Đây là một sửa chữa cho: vấn đề con đầu tiên, không>. – Sprintstar

+2

Không phải là một giải pháp tốt –

+0

Người ta có thể đặt một lớp trên tất cả các childs đầu tiên, nhưng sau đó hãy cẩn thận, nếu bạn có danh sách lồng nhau (rất có thể khi lo lắng về phù hợp với con không trực tiếp), bạn phải sử dụng một tên lớp khác nhau cho mỗi một. Nếu không 'ul li.child' sẽ khớp với cả hai, không được dự định:'

' – Krinkle

1

Đây là một giải pháp tốt tôi đã tìm thấy trong một cuốn sách: "The Anthology của javascript"

Something như thế:

/* for all but IE */ 
#nav ul li.currentpage > a:hover { 
    background-color: #eff; 
} 

Và mã để phục vụ cho IE:

/* for IE */ 
* html #nav ul li.currentpage a:hover { 
    background-color: expression(/currentpage/.test(this.parentNode.className)? "#eff" : "#ef0"); 
} 

Việc hack cho IE là chỉ có IE nghĩ rằng có một wrapper trên html, và IE không hỗ trợ các công cụ expression().

Biểu thức sử dụng cụm từ thông dụng (/ currentpage /) và kiểm tra nó đối với lớp của nút cha, vì vậy các con trực tiếp của phần tử li.currentpage sẽ được đặt thành #eff, các hậu duệ khác sẽ được đặt tới # ef0.

Lưu ý rằng các màu sắc được sử dụng là giả mạo, xin đừng bình luận gì về họ ;-)

+0

Thật không may, biểu thức CSS không còn được hỗ trợ trong chế độ tiêu chuẩn IE8 ... (http://blogs.msdn.com/ie/archive/2008/10/ 16/ending-expressions.aspx) –

+2

@Ryann: IE8 hỗ trợ bộ chọn con nguyên bản, vì vậy IE6-hack này bị bỏ qua/không còn hoạt động trong IE8 nên không có vấn đề – Krinkle

0

Sử dụng này

div * { padding-left:20px; } 
div * * { padding-left:0; } 

Trước tiên, bạn nhắm mục tiêu tất cả trẻ em, và sau đó bạn thiết lập lại tờ khai css bằng cách nhắm mục tiêu tất cả cháu.

0

Một giải pháp qua trình duyệt mà tôi đã sử dụng như sau . Nó không sử dụng IE6 hack và hiển thị danh sách nhúng một cách chính xác (nói rằng bạn cần phải phong cách OL và UL lồng nhau các mục khác nhau).

ul, ol { 
    /* Set margins, padding, and other generic styles */ 
} 
ul li, ul ul li, ol ul li { 
    list-style-type: disc; /* unordered lists */ 
} 
ol li, ul ol li, ol ol li { 
    list-style-type: decimal; /* ordered lists */ 
}

Thật dễ dàng như CSS yodeling!

+1

Câu trả lời này dường như không liên quan đến câu hỏi. Ngoài ra, sẽ không "ul {list-style-type: đĩa;} ol {list-style-type: decimal;}" làm chính xác như vậy? Tại sao tất cả các yodeling? – Krinkle

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