2012-02-20 33 views
10

Tôi đang cố gắng tìm một phương pháp đơn giản để nhận tất cả các liên kết trải đều trên điều hướng ngang. Điều này sẽ rất dễ dàng nếu nó sẽ là một số lượng cố định của các liên kết, nhưng chúng sẽ được năng động.Đồng đều các liên kết trên một điều hướng ngang

Vì vậy, có thể là 5 hoặc 10 liên kết, không ai biết. Mặc dù số lượng liên kết tôi muốn chúng lây lan đều trên điều hướng mà không cần sử dụng bảng.

Lý do tôi không muốn sử dụng bảng là vì nó sẽ phá vỡ cấu trúc UL LI (rõ ràng) được coi là cách để đi khi tạo điều hướng (SEO).

Dưới đây là một jsFiddle giải thích nó nhiều hơn trong chiều sâu: http://jsfiddle.net/pkK8C/19/

Looking for the phương pháp ánh sáng nhất.

Cảm ơn bạn trước.

+0

để bạn muốn vừa với nhiều mục điều hướng trong phạm vi 400px hoặc chiều rộng không quan trọng? Tôi có thể nói rằng bạn có thể cần phải sử dụng Javascript để đạt được điều đó. –

+0

@JaspreetChahal Yep, tôi đã nhận ra rằng ... vẫn không thực sự biết làm thế nào để làm điều đó, có cách nào để tính toán chiều rộng của một từ trong js không?Hoặc chúng ta sẽ phải mô phỏng nó trong một div vô hình và lấy chiều rộng của div đó ... –

+0

Vâng đối với tôi, bạn sẽ cần phải có một số giới hạn cứng trên phần tử bên ngoài và sau đó render các phần tử Inner của bạn. Đây là một bài viết tốt mà bạn có thể đọc về nhận chiều rộng văn bản http://stackoverflow.com/questions/118241/calculate-text-width-with-javascript trong js. đây là một cái gì đó mà tôi đã làm trong jsfiddle http://jsfiddle.net/pkK8C/27/ nhưng điều đó sẽ không chứa nếu bạn liên kết vượt quá giới hạn nhất định –

Trả lời

7

Sử dụng display: table cho ULdisplay: table-cell cho LI. Và display-table.htc cho IE6/7 nếu chúng quan trọng.

+3

Để làm việc này, tôi tin rằng chiều rộng của UL phải được đặt thành 100% (tức là chiều rộng: 100%) –

+0

@ pwee167 Điều đó khá rõ ràng. ;-) –

+0

Tôi thấy rằng việc sử dụng thuộc tính CSS 'max-width' cho các phần tử' LI' cấp 1 có thể hữu ích nếu cột đầu tiên chỉ chứa các văn bản ngắn và các văn bản khác có văn bản liên kết dài hơn. Các trình duyệt hiện đại dường như hoạt động. – sampoh

8

Cũ trình duyệt có thể là một nhức đầu, nhưng nó hoạt động cho những người mới:

div#navigation ul { 
    list-style-type:none; 
    height:30px; 
    text-align:center; 
    width: 100%;  /* new */ 
    display: table; /* updated */ 
} 

div#navigation ul li {   
    margin-left:50px; 
    display: table-cell; /* updated */ 
} 
+0

Tính tương thích đã làm phiền tôi nhưng kể từ khi Marat Tanalin chỉ cho tôi để hiển thị table.htc tôi sẽ chấp nhận câu trả lời của mình. 1 từ tôi cho ví dụ mã. –

3

Đây là giải pháp jQuery phân tán đồng đều các liên kết tới 100% yếu tố hạn chế. Các liên kết ngoài cùng bên phải và bên phải được kết thúc đến hết.

jQuery:

pad_menu() tăng đệm cho đến khi li cuối cùng trôi nổi dưới đầu tiên sau đó giảm đệm bởi một, do đó li cuối cùng đã trở lại trên cùng một dòng. var i dừng vòng lặp vô hạn (mà không bao giờ nên xảy ra dù sao đi nữa).

$(document).ready(function(){ 
    pad_menu(); 
    }); 

    function pad_menu() { 
    var i = 0; 
    var pos_first; 
    var pos_last; 
    var pad = $('#menu li').css('padding-left').replace(/[px]/, ''); 

    do { 
     pad++; 
     $('#menu li').css('padding-left', pad); 
     $('#menu .first-item').css('padding-left', 0); 
     $('#menu .last-item').css('padding-left', 0); 
     pos_first = $('#menu .first-item').position(); 
     pos_last = $('#menu .last-item').position(); 
    } while (pos_first.top == pos_last.top && ++i < 100) 
    $('#menu li').css('padding-left', pad-1); 
    $('#menu li.first-item').css('padding-left', 0); 
    $('#menu li.last-item').css('padding-left', 0); 
    } 

HTML & CSS:

ul#menu li { 
display: inline; 
float: none; 
padding: 5px 0px 5px 20px; 
} 
ul#menu li.first-item, ul#menu li.last-item { 
padding-left: 0px; 
} 

<ul id='menu' class='cols'> 
    <li class='first-item'><a href='page1.html'>Page 1</a> 
    <li><a href='page2.html'>Page 2</a></li> 
    <li><a href='page3.html'>Page 3</a></li> 
    <li><a href='page4.html'>Page 4</a></li> 
    <li><a href='page5.html'>Page 5</a></li> 
    <li><a href='page6.html'>Page 6</a></li> 
    <li><a href='page7.html'>Page 7</a></li></a></li> 
    <li class='last-item'></li> 
</ul> 
2

Có một giải pháp đẹp hơn ở đây, nơi bạn sử dụng text-align:justify:

How do I *really* justify a horizontal menu in HTML+CSS?

Đọc câu trả lời được chấp nhận một cách cẩn thận mặc dù, các chú ý sau đây được áp dụng:

  • Spaces trong văn bản LI của bạn cần phải được thay thế bằng &ensp; hoặc họ sẽ được tính là khoảng trống giữa mặt logic của bạn (&nbsp; không làm việc)
  • Bạn cần có khoảng trắng trong HTML của bạn giữa LIS của bạn (có thể là một hình ảnh xác thực nếu bạn đang tạo chúng trong vòng lặp PHP.
Các vấn đề liên quan