2009-05-29 27 views
13

Nếu tôi có hai lớp trên một trang, hãy chia một cách horrizontally, với lớp thứ hai chồng chéo một phần của lớp đầu tiên, có thể làm cho nó "nhấp qua" không?Nhấp qua các lớp/divs

Tôi có liên kết trong lớp đầu tiên, lớp thứ hai chồng lên nhau, ngăn các liên kết không thể nhấp được. Có cách nào để hiển thị lớp, nhưng nhấp qua, trong khi vẫn có liên kết riêng có thể nhấp được không?

chỉnh sửa:

Dưới đây là ví dụ, với html và biểu định kiểu.

Các liên kết thử nghiệm trở nên không thể nhấp vào khi nội tuyến có tiêu đề trong Lớp 3, nhưng bên dưới là chúng được sử dụng tốt. Có cách nào để khắc phục điều này không?

<title>Test</title> 
<link rel="stylesheet" href="test.css" type="text/css"> 
<body> 
<div id="Layer0"> 
<div id="Layer1" class="Layer1"> 
<h3 align="left">Brands</h3> 
</div> 
<div id="Layer2" class="Layer2"><h1>TEST</h1> 
<div id="rightlayer"> 
<a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p> 
</div> 
</div> 
<div id="Layer3" class="Layer3"><h1>Ed Hardy Auctions</h1> 
</div> 
</div> 
</body> 
</html> 

Và css

#Layer0 { 
    width:100%; 
    height:100%; 
} 
body { 
    margin:10px 10px 0px 10px; 
    padding:0px; 
    color:#999999; 
    font-family:"Trebuchet MS",arial,sans-serif; 
    font-size:70.5%; 
} 
#Layer1 { 
    position:absolute; 
    left:10px; 
    width:200px; 
    margin-top:17px; 
    font-size:1.0em; 
    padding-left:12px; 
    padding-top:8px; 
} 
#Layer2 { 
    background:#fff; 
    margin-left:199px; 
    color:#000; 
} 

#rightlayer { 
float:right; 
} 
.Layer3 { 
position:absolute; 
top:67%; 
padding:20px; 
width: 100%; 
} 

Trả lời

5

Nó không phải là có thể nếu bạn muốn divs ở lại x hiện tại của họ, y, (và quan trọng nhất) z - chỉ có "top" lớp có thể nhấp được.


Phụ lục bài OP sửa:

Hãy suy nghĩ về bố trí CSS như thể bạn đang vật lý làm việc với những mảnh giấy (đây là nhiều dễ dàng hơn để hình dung nếu bạn cung cấp cho tất cả các "lớp" của bạn divs một khác nhau màu nền). Công cụ hiển thị cắt ra một chút giấy trong các kích thước bạn cung cấp cho nó (hoặc nó hoạt động ra) cho mỗi phần tử nó tìm thấy. Nó làm điều này theo thứ tự nó gặp họ đặt mỗi bit giấy trên trang khi nó đi - mục cuối cùng sẽ ở trên đầu.

Bây giờ bạn đã nói với công cụ hiển thị để đặt div thứ 3 của bạn ở vị trí mà nó xếp chồng lên vị trí thứ 2. Và bây giờ bạn mong đợi để có thể "xem" nội dung được bảo hiểm. Sẽ không hoạt động với giấy, sẽ không hoạt động với HTML. Chỉ vì nó trong suốt không có nghĩa là nó không chiếm không gian.

Vì vậy, bạn phải thay đổi điều gì đó.

Nhìn vào CSS và đánh dấu của bạn (mà thật sự có thể được làm sạch lên, nhưng tôi sẽ giả sử có đánh dấu khác bạn không hiển thị chúng tôi mà biện minh cho nó) có một vài cách giành chiến thắng dễ dàng:

1). Đặt z-index của -1 trên Layer3 - z-index là cách bạn có thể thay đổi thứ tự sắp xếp từ mặc định (khi gặp phải). Điều này chỉ di chuyển toàn bộ Layer3 bên dưới phần còn lại của trang để những gì đã được ẩn đi, nhưng cũng ngược lại tùy thuộc vào nội dung.

2). Thay đổi chiều rộng từ 100% thành ví dụ: 80%, hoặc nhiều khả năng cho bạn sử dụng pos: abs set left: 0px và right: 199px; (Tôi đoán rằng padding-left trên Layer2 là một chiều rộng cột dự định?). Chi phí này là Lớp 3 của bạn không còn 100% chiều rộng

3). "Bố cục cột CSS" của Google " và tìm một mẫu phản ánh những gì bạn cần và điều chỉnh điều đó. Mỗi bố trí CSS có thể được thực hiện đã được thực hiện một triệu lần rồi. Kỹ thuật tiêu chuẩn tồn tại để giải quyết vấn đề của bạn. CSS rất khó nếu bạn chưa xây dựng được trải nghiệm, vì vậy hãy tận dụng trải nghiệm của người khác. Đừng phát minh lại bánh xe.

0

Thật khó có thể nói mà không nhìn thấy một số mã.

Bạn có thể thử đặt chỉ mục z ở lớp dưới cùng nhưng hoạt động trên các phần tử đã được định vị tuyệt đối, tương đối hoặc cố định (vị trí: tuyệt đối).


chỉnh sửa sau khi nhìn thấy mã:

Thêm position: relative; z-index: 100; thành #rightLayer.

Hoặc bạn có thể xóa chiều rộng: 100% từ .Layer3.


Bạn có thể muốn cấu trúc lại mã của mình và đi với bố cục hai cột cho #rightLayer và .Layer3.

css

#Layer0 { 
    width:100%; 
    height:100%; 
} 
body { 
    margin:10px 10px 0px 10px; 
    padding:0px; 
    color:#999999; 
    font-family:"Trebuchet MS",arial,sans-serif; 
    font-size:70.5%; 
} 
#Layer1 { 
    width:200px; 
    margin-top:17px; 
    font-size:1.0em; 
    padding-left:12px; 
    padding-top:8px; 
} 
#Layer2 { 
    background:#fff; 
    margin-left:199px; 
    color:#000; 
} 

#rightlayer { 
float:right; 
} 
.Layer3 { 
} 

html

<div id="Layer0"> 
    <div id="Layer2" class="Layer2"> 
     <h1>TEST</h1> 
    </div> 
    <div id="Layer1" class="Layer1"> 
     <h3 align="left">Brands</h3> 
    </div> 
    <div class="content"> 
     <div id="rightlayer"> 
      <a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p><a href="test">TEST></a><p> 
     </div> 
     <div id="Layer3" class="Layer3"> 
      <h1>Ed Hardy Auctions</h1> 
     </div> 
    </div> 
</div> 
+0

Tôi không thể xóa chiều rộng, như trong trang thực tế các liên kết ở giữa trang. Tôi sẽ cố gắng như bạn đề nghị .. cảm ơn –

+0

Ahh, thay đổi vị trí: di chuyển tương đối layer3 quá xa xuống trang. Có cách nào để ngăn chặn điều đó không? –

4

Nó sẽ là một công việc khổng lồ, nhưng điều đó là có thể.
Bạn cần chụp sự kiện nhấp chuột trên lớp trên cùng/div và tìm vị trí con trỏ x-y.
Sau đó tìm tất cả các liên kết trong lớp/div bên dưới lớp trên cùng và xem vị trí của nó trên màn hình có nằm ở vị trí chuột hiện tại hay không.
Sau đó, bạn có thể kích hoạt nhấp chuột của liên kết phù hợp.
Tôi sẽ sử dụng jQuery (nếu bạn chưa sẵn sàng) cho điều này và sau đó đăng lại với một thẻ jQuery nếu bạn gặp rắc rối.

+1

Không phải như vậy, tôi nghĩ vậy. Bạn có sử dụng offset(), width() và height() của jQuery không? – Nosredna

+0

Không, nó không phải là một công việc lớn ở tất cả, và đây là cách tiếp cận chính xác và duy nhất. – Owen

0

Tôi giả định từ ví dụ rằng các liên kết trong trình duyệt là các liên kết duy nhất cần được nhấp vào và bạn không có liên kết trong các lớp khác. Nếu vậy, bạn có thể giải quyết vấn đề bằng cách thay đổi thứ tự z-index của các div.

Lớp1 và lớp 3 có vị trí tuyệt đối, vì vậy nếu bạn thêm kiểu vị trí (tuyệt đối hoặc tương đối) vào lớp 2, bạn sẽ có thể kéo div đó về phía trước, đồng thời kéo div bên phải vào lớp cao hơn Lớp 3.

tôi đã thêm dòng sau vào CSS:

#Layer2 {  
    position: relative; 
    z-index: 1; 
} 

Từ những gì tôi có thể thấy rằng rời khỏi thiết lập trang hiện tại chỉ là cách nó được, nhưng kéo tất cả các yếu tố (bao gồm cả rightlayer với liên kết) đến phía trước, vì vậy bạn có thể nhấp vào tất cả các liên kết trong đó.

Vì mục đích gỡ lỗi, tôi đề nghị thêm màu nền cho tất cả các lớp khác nhau để có ý tưởng về thứ tự z-index của các lớp khác nhau. Với màu nền tại chỗ nó khá dễ dàng để phát hiện các lớp đã rơi trên các liên kết, mà còn để xác minh rằng thứ tự z-index mới làm cho các liên kết có sẵn.

Hy vọng điều này sẽ hữu ích!

0

Tôi đã gửi một lỗi nhiều năm trước cho Firefox Bugzilla nói rằng có lỗi này trong Firefox.

Tôi được một kỹ sư Mozilla nói rằng đây không thực sự là lỗi và đó là hành vi đúng theo thông số kỹ thuật HTML/CSS. Thật không may là tôi không thể tìm thấy lỗi gốc để tham khảo như cách đây khoảng 6 năm trước.

Lý do tôi gửi lỗi là vì tôi có thể nhấp qua div trên cùng vào liên kết bên dưới khi sử dụng IE (6 tôi nghĩ) nhưng Firefox sẽ không cho phép tôi.

Như thường lệ, hóa ra mũ IE đã thực hiện không chính xác và Firefox đã hoạt động như dự định của thông số kỹ thuật.

Chỉ vì div trong suốt không có nghĩa là bạn có thể nhấp qua nó.

Tôi không chắc chắn cách bạn có thể thực hiện việc này với JavaScript hoặc CSS. Tôi sẽ lùi lại một bước và suy nghĩ lại về những gì bạn đang cố gắng đạt được và cách bạn đang cố gắng đạt được nó.

Greg

0

Bạn có thể không chỉ đơn giản là thiết lập chiều rộng của div tự động (mặc định cho việc định vị tuyệt đối - nghĩa là chỉ xóa width: 100% từ .Layer3).

Bằng cách đó, div sẽ chỉ rộng khi cần thiết, thay vì chồng chéo các liên kết không cần thiết.

28

Tôi nghĩ rằng tôi sẽ cập nhật điều này vì tôi đã đấu tranh với điều này trong một vài giờ và nghĩ rằng tôi đã tìm thấy một giải pháp. Đã xem xét sử dụng Jquery nhưng thuộc tính CSS:

pointer-events:none; 

... đã làm chính xác những gì tôi muốn.

+0

Trong khi tôi có thể không sử dụng điều này trong bất cứ điều gì rộng, nó hoạt động hoàn hảo trong phần mở rộng Chrome tôi đang làm việc trên (như chrome hỗ trợ đầy đủ nó). Thanks heaps cho rằng một –

+0

Hãy coi chừng: Điều này phá vỡ hành vi khác, quá, mặc dù (như hiệu ứng di chuột). –

+1

cũng sẽ không hoạt động trong các phiên bản hiện đại của IE hoặc Opera – Andre

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