2010-06-19 22 views
70

Tôi có một thanh điều hướng nằm ngang được làm từ một danh sách không theo thứ tự, và mỗi mục danh sách có rất nhiều phần đệm để trông đẹp, nhưng vùng duy nhất hoạt động như một liên kết chính là văn bản. Làm thế nào tôi có thể cho phép người dùng nhấp vào bất kỳ nơi nào trong mục danh sách để kích hoạt liên kết?Làm cách nào để tạo toàn bộ khu vực của mục danh sách trong thanh điều hướng của tôi, có thể nhấp làm liên kết?

#nav { 
 
    background-color: #181818; 
 
    margin: 0px; 
 
    overflow: hidden; 
 
} 
 

 
#nav img { 
 
    float: left; 
 
    padding: 5px 10px; 
 
    margin-top: auto; 
 
    margin-bottom: auto; 
 
    vertical-align: bottom; 
 
} 
 

 
#nav ul { 
 
    list-style-type: none; 
 
    margin: 0px; 
 
    background-color: #181818; 
 
    float: left; 
 
} 
 

 
#nav li { 
 
    display: block; 
 
    float: left; 
 
    padding: 25px 10px; 
 
} 
 

 
#nav li:hover { 
 
    background-color: #785442; 
 
} 
 

 
#nav a { 
 
    color: white; 
 
    font-family: Helvetica, Arial, sans-serif; 
 
    text-decoration: none; 
 
}
<div id="nav"> 
 
    <img src="/images/renderedicon.png" alt="Icon" height="57" width="57" /> 
 
    <ul> 
 
    <li><a href="#">One1</a></li> 
 
    <li><a href="#">Two</a></li> 
 
    <li><a href="#">Three</a></li> 
 
    <li><a href="#">Four</a></li> 
 
    </ul> 
 
</div> 
 
<div> 
 
    <h2>Heading</h2> 
 
</div>

Trả lời

86

Không đặt đệm trong 'li' mục. Thay vào đó, hãy đặt thẻ neo thành display:inline-block; và áp dụng đệm cho thẻ.

+11

Không phải tất cả các phiên bản của IE hỗ trợ đầy đủ 'inline-block' (xem http://www.quirksmode.org/css /display.html). Vì 'li' s đã được thả nổi,' a {display: block} 'có lẽ là lựa chọn tốt hơn. – dhabersack

+0

'display: inline; zoom: 1; 'trong một chú thích có điều kiện cho IE6 và IE7 sẽ thay thế' display: inline-block; 'mặc dù có, nếu các mục danh sách đã được thả nổi,' display: block; 'cũng sẽ là quá – FelipeAls

+0

. , nó dường như không hoạt động với: sau khi chọn. Tôi muốn một biểu tượng '>' xuất hiện sau văn bản liên kết của tôi, nhưng không đặt nó vào nội dung ... Tôi đã kết thúc việc đưa nó vào nội dung. Có thể tò mò nếu có một cách tốt hơn để thực hiện điều đó. – counterbeing

12

Đặt thẻ liên kết chứa phần đệm thay vì li. Bằng cách này, nó sẽ chiếm toàn bộ khu vực.

+3

Tôi cũng sẽ đề xuất di chuyển trạng thái di chuột đến vị trí neo cũng như tắt của li để hỗ trợ trình duyệt tốt hơn. – NinjaBomb

37

Xác định tài sản css thẻ neo của bạn như:

{display:block} 

Sau đó, neo sẽ chiếm toàn bộ diện tích danh sách, vì vậy nhấp chuột của bạn sẽ làm việc trong không gian trống bên cạnh danh sách của bạn.

+0

Điều này làm việc cho tôi. –

+0

Tôi ước, tôi có thể kéo câu trả lời này lên đầu danh sách câu trả lời ...Đây là giải pháp tốt nhất cho vấn đề này !!!! – Rishabh

+0

Sẽ ngắt dòng nếu có bất kỳ thứ gì khác trong 'li', chẳng hạn như biểu tượng. –

-2

Đặt mục danh sách trong siêu liên kết thay vì vòng khác.

Ví dụ với mã của bạn:

<a href="#"><li>One</li></a> 
+5

Tác phẩm này hoạt động nhưng không hợp lệ. –

+0

@DannyBeckett Nó hợp lệ trong HTML5. – Tek

+0

@Tek [Không phải vậy] (https://validator.w3.org/nu/?showsource=yes&useragent=Validator.nu%2FLV+http%3A%2F%2Fvalidator.w3.org%2Fservices&doc=data% 3Atext% 2Fhtml% 3Bcharset% 3Dutf-8% 3Bbase64% 2CPCFET0NUWVBFIGh0bWw% 2BPGh0bWw% 2BCjxoZWFkPjx0aXRsZT5UZXN0PC90aXRsZT48L2hlYWQ% 2BCjxib2R5Pgo8YSBocmVmPSIjIj48bGk% 2BT25lPC9saT48L2E% 2BCjwvYm9keT4KPC9odG1sPg%% 3D 3D). –

5

Hoặc bạn có thể sử dụng jQuery:

$("li").click(function(){ 
    window.location=$(this).find("a").attr("href"); 
    return false; 
}); 
+2

Người ta có thể nói rằng giải pháp này là 'giải pháp jquery bẩn mà không cần thiết vì bạn có thể làm điều đó dễ dàng với css'. Nhưng thành thật mà nói - đôi khi bạn thấy mình trong tình huống làm việc với mã không phải của bạn và bạn chỉ đơn giản là không có thời gian để biết tất cả cấu trúc DOM và bảng định kiểu css (và cố gắng hiểu 'những gì coder đã suy nghĩ'). Vì vậy, +1. – lemoid

5

siêu, siêu muộn để bên này, nhưng dù sao: bạn cũng có thể tạo kiểu neo như một flex mục. Điều này đặc biệt hữu ích cho các mục danh sách được sắp xếp theo kích thước/sắp xếp động.

a { 
    /* This flexbox code stretches the link's clickable 
    * area to fit its parent block. */ 
    display:  flex; 
    flex-grow:  1; 
    flex-shrink: 1; 
    justify-content: center; 
} 

(Nên biết trước:. Flexboxes được obvs vẫn không được hỗ trợ tốt Autoprefixer để giải thoát!)

3

Sử dụng sau:

a { 
    display: list-item; 
    list-style-type: none; 
} 
1

Bạn nên sử dụng thuộc tính CSS này và giá trị vào li của bạn:

pointer-events:all; 

Vì vậy, bạn có thể xử lý liên kết với jQuery hoặc JavaScript hoặc chúng tôi e thẻ a, nhưng tất cả các yếu tố thẻ khác bên trong li nên có thuộc tính CSS:

pointer-events:none; 
Các vấn đề liên quan