2009-07-01 25 views
11

Tôi đang tạo bản mẫu của lịch dựa trên bảng CSS/XHTML mà cuối cùng sẽ được tạo bằng PHP cho hệ thống quản lý nội dung cập nhật đơn giản . Tôi đã gặp sự cố với việc sử dụng định vị tuyệt đối để tạo cửa sổ bật lên hiển thị tất cả các sự kiện trong một ngày khi có nhiều hơn mức phù hợp trong ô. Vấn đề có thể được nhìn thấy ở đây:Gặp sự cố với định vị tuyệt đối/Z-Index với Danh sách và Bảng trong IE 6 và 7

http://sutest.bravehost.com/

Như bạn có thể thấy, pops cửa sổ bật lên dưới sự kiện nhiều ngày và ngày trong cả IE7 và IE6. Đặt chỉ mục z trên cửa sổ bật lên đã khắc phục sự cố trong Firefox. Tôi đã thử đặt tất cả các loại giá trị z-index trên cửa sổ bật lên, thay đổi thuộc tính hiển thị của cửa sổ bật lên và phần tử liên quan, cũng như nhiều cách tiếp cận khác nhau khác nhau, không thành công.

HTML như sau:

<td valign="top"><div> 
    <div class="date">25</div> 
    <ul> 
     <li class="single"><a href="#">History</a></li> 
     <li class="single"><a href="#">Biology</a></li> 
     <li class="single"><a href="#">Computers</a></li> 
     <li class="single"><a href="#">POTCH</a></li> 
     <li class="single"><a href="#">Precal</a></li> 
     <li class="more"><a href="#">+3 More</a></li> 
    </ul> 
    <div class="popup"> 
     <span class="close"><a href="#">X</a></span> 
     <ul> 
      <li class="single"><a href="#">History</a></li> 
      <li class="single"><a href="#">Biology</a></li> 
      <li class="single"><a href="#">Computers</a></li> 
      <li class="single"><a href="#">POTCH</a></li> 
      <li class="single"><a href="#">Precal</a></li> 
      <li class="single"><a href="#">Science PC</a></li> 
      <li class="single"><a href="#">Physics</a></li> 
      <li class="single"><a href="#">Construction</a></li> 
     </ul> 
    </div> 
</div></td> 

Đây là các tế bào từ bảng với mã hóa cứng popup. Danh sách đầu tiên chứa các sự kiện hiển thị bình thường. Div chứa div thứ hai là popup. Nó sẽ được hiển thị trong sự kiện nhiều ngày:

<td valign="top" class="blank"><div> 
    <div class="date">2</div> 
    <ul> 
     <li style="background-color:plum;">&nbsp;<img src="endr.png" alt="." /></li> 
    </ul> 
</div></td> 

Tôi đang sử dụng các mục danh sách để "giả mạo" sự kiện nhiều ngày. Các li trong ngày này là theo kiểu là phần của thanh nhìn thấy để render trên popup trong IE 6 và 7.

CSS liên quan đến popup:

.popup { 
position:absolute; 
top:-1px; 
background-color:white; 
border:1px solid black; 
overflow:visible; 
padding:10px; 
width:auto; 
z-index:1; 
margin-left:-1px; 
} 

Và đến nhiều ngày sự kiện:

li { 
margin:2px 0; 
padding:0 0 2px 5px; 
white-space:nowrap; 
} 

Tôi đã cố gắng khắc phục sự cố này bằng cách tìm kiếm Google nhiều lần và thử các trang web khác Q &.

Bất kỳ trợ giúp nào sẽ được đánh giá rất nhiều!

+0

FYI: Cũng giống như vậy trong IE8 ... – SeanJA

Trả lời

22

Sử dụng position: relative thiết lập ngữ cảnh xếp chồng chỉ mục z mới bên trong phần tử tương đối được định vị trong IE.

Các phần tử bên trong phần tử tương đối được định vị sẽ được xếp chồng theo z-index, nhưng khi tương tác với các phần tử bên ngoài phần tử cha, thì z-index của cha/mẹ được sử dụng.Đây là lý do tại sao cửa sổ bật lên hiển thị bên dưới phần tử sự kiện nhiều ngày (vì mặc dù không có phần tử z-index rõ ràng nào trên nguyên tố, các phần tử đến "sau" trong tài liệu hoàn toàn có một số cao hơn là z-index so với các yếu tố trước đó)

To sửa chữa nó, bạn có thể

  • Không sử dụng position-relative trên di động và vị trí popup liên quan đến toàn bộ tài liệu
  • cho container <div> một z-index cao hơn so với cái sau này trong tài liệu.

tôi đã tìm thấy rằng việc thay đổi z-index lập trình với hoạt Javascript để là tốt nhất, vì nó giảm thiểu tác động kỳ lạ với phần còn lại của trang (tức là thiết lập các z-index cao hơn khi nó được mở ra, và đặt lại nó trở lại để mặc định khi nó được đóng lại)

Một số bài đăng trên blog rằng nói về vấn đề này:

+0

Điều này làm việc tuyệt vời! Cảm ơn lời giải thích tuyệt vời! –

1

Bạn có thể thử đặt chỉ mục z của phần tử chứa. Vì vậy, cửa sổ bật lên của bạn sẽ có chỉ mục z là 1 (hoặc 2) và vùng chứa của bạn sẽ có chỉ mục z là 0 (hoặc 1).

+0

Tôi không chắc ý bạn là gì ... Tôi đã cố gắng đặt chỉ mục z của sự kiện nhiều ngày thành 0 (và một số giá trị âm), nhưng vô ích, tôi giả định do thực tế là sự kiện này không được định vị hoàn toàn. –

+0

Tôi cũng khuyên bạn nên sử dụng các chỉ mục z cho bạn cơ hội thay đổi ý định của bạn sau đó và thêm một phần tử khác vào giữa hai lớp như sau: 0, 10, 20 ... – SeanJA

0

Không chắc chắn nếu điều này sẽ giúp đỡ, nhưng thuộc tính z-index áp dụng đối với mặt hàng mà được định vị, tương đối, tuyệt đối, cố định http://www.w3schools.com/Css/pr_pos_z-index.asp

Edit: Có nghĩa rằng phần tử li hoàn toàn có thể bỏ qua nó ...

+0

Ok. Tôi đã quên rằng chỉ số z làm việc trên nhiều hơn các yếu tố chỉ được định vị hoàn toàn. Tôi vừa thử thêm vị trí: tương đối; và chỉ số z: 0; vào bộ quy tắc chọn li. Đáng buồn thay, điều này không khắc phục được sự cố. –

0

Bạn đã thử đặt chỉ mục z thấp hơn trên các yếu tố ngày và sự kiện nhiều ngày so với chỉ mục z trên div cửa sổ bật lên chưa? Ngoài ra, hãy đảm bảo rằng bất kỳ phần tử nào có thuộc tính z-index đều có vị trí: tuyệt đối (vì vậy có thể phải chơi với các vấn đề bố cục một chút).

+0

Có, tôi đã thử định vị các phần tử vi phạm và cho chúng chỉ số z thấp hơn so với cửa sổ bật lên. Dường như không hoạt động. = P –

2

Nếu bạn đang làm cho bảng này với một số ngôn ngữ lập trình như PHP, .NET, vv

Bạn có thể làm một cái gì đó như thế này:

Đếm tổng số hàng của bảng của bạn, sau đó bắt đầu Z -Index Với tổng số này, sau đó giảm truy cập cho đến khi hàng cuối cùng. Làm điều này, hàng đầu tiên của bạn sẽ có chỉ số z lớn nhất và hàng cuối cùng thấp hơn.

<table> position relative 
<tr> nothing 
<td> nothing 
<div> position relative 
<element position absolute> 
</div> 
</td></tr></table> 

---- 
Table Loop: 

$nZ = count($resource); 
foreach($resource as $line) { 
<tr><td> 
    <div style="z-index: $nZ">content</div> 
</td></tr> 
$nZ--; // Decrement nZ 
} 
---- 

C ya!

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