2012-03-23 33 views
6

Tôi bị kẹt một chút. Tôi đã tạo ra hầu như tất cả mọi thứ trong hình dưới đây. Những gì tôi đang mắc kẹt là tôi đang cố gắng tìm hiểu làm thế nào tôi sẽ thiết lập nó để khi một người dùng nhấp vào một trong các liên kết nó làm cho dòng dưới đây trở thành màu đỏ (sau khi tải trang tiếp theo). Rõ ràng tôi sẽ cần sử dụng Jquery để phát hiện trang sau đó thêm css nội tuyến, nhưng những gì tôi đang đấu tranh là tôi muốn điều này dễ dàng nhất có thể để tôi có thể cung cấp mẫu này cho người khác và sau đó họ có thể thêm hoặc xóa các mục như cần thiết. Tôi đã cố gắng tìm ra nếu tôi bằng cách nào đó có thể sử dụng một yếu tố li để làm điều này nhưng tôi đã không tìm thấy một cách nào được nêu ra. Có ai có ý tưởng nào để giúp tôi không?Điều hướng này có thể được thực hiện hoàn toàn trong CSS

enter image description here

Trả lời

1

Xây dựng thực đơn của bạn như thế này, trong HTML:

<body id='Search' > 
    <div id='menu'> 
     <div class='bars'></div> 
     <a href='/home/' title='Home'>Home</a> 
     <a href='/community/' title='Community'>Community</a> 
     <a href='/search/' title='Search'>Search</a> 
     <a href='/contact/' title='Contact'>Contact</a> 
     <div class='bars shift'></div>    
    </div> 
</body> 

Lưu ý rằng tag cơ thể có một trang cụ thể id (như Cody gợi ý). Cũng lưu ý rằng id này phải giống với giá trị của thuộc tính title cho liên kết menu.

Sau đó sử dụng CSS này:

.bars {border-top:1px solid #CCC;border-bottom:1px solid #CCC;height:5px;} 
.shift {margin-top:-6px;} 
#menu {font-family:arial;font-size:12pt;text-align:center;}  
#menu a {display:inline-block;padding:7px;text-decoration:none;color:#000;} 
.active {border-bottom:5px solid red;} 

Cuối cùng, thêm jQuery này vào mỗi trang:

$(document).ready(function(){ 
    var id = $('body').attr('id'); 
    $('#menu a').each(function() { 
     var title = $(this).attr('title'); 
     $(this).removeClass('active'); 
     if (title == id) $(this).addClass('active'); 
    }); 
}); 

Bạn có thể thấy một fiddle demo sống here. (Để kiểm tra, chỉ cần thay đổi id của phần tử body và nhấn run.)

EDIT: Lợi ích của phương pháp này so với phương pháp của Cody Grays là bạn không cần sửa đổi css mỗi khi bạn thay đổi HTML khi bạn thêm, xóa hoặc chỉnh sửa mục menu. Mặt khác, nó sử dụng jQuery. Tuy nhiên, nếu bạn muốn một giải pháp css thuần túy, chỉ cần loại bỏ jQuery, và id của phần tử body, và thay vào đó áp dụng trực tiếp lớp .active cho liên kết cụ thể, tùy thuộc vào trang cụ thể (tương tự như gợi ý của jackJoe).

Điều này có thể dễ dàng được sửa đổi nếu bạn phải sử dụng các yếu tố <li>.

+0

Cũng giống như bạn có thể giới thiệu một id nội dung tĩnh trước hoặc động với lập trình phía máy chủ, bạn cũng có thể áp dụng lớp đang hoạt động trước hoặc phía máy chủ. – Stefan

2

Khá đơn giản. Tạo một lớp học cho các "hoạt động" nhà nước và tạo kiểu cho nó:

<li class="active">Home</li> 

và tạo kiểu cho nó (phụ thuộc vào cấu trúc HTML, nhưng bạn sẽ có được ý tưởng)

CSS:

.active { 
    border-bottom: 3px red solid; 
} 

Tất cả những gì bạn cần làm là đặt lớp khi trang tải (ví dụ: phía máy chủ)

3

Bạn có thể làm điều đó the way jackJoe suggests và đặt máy chủ lớp active trên trang hiện được chọn, nhưng bạn cũng có thể thực hiện việc này bằng CSS thuần túy và lập kế hoạch trước một chút.

Điều này liên quan đến việc đầu tiên đặt thuộc tính id cho thẻ <body> của trang của bạn, một phương pháp hay để tham gia. Sau đó, tệp CSS của bạn sẽ tận dụng cơ thể đó id để xác định xem <li> nào sẽ xuất hiện dưới dạng "hoạt động".

mẫu mã trang:

<body id="main"> <!-- change this id for each page --> 
    <ul> 
     <li class="main-nav"><a href="#">Main</a></li> 
     <li class="community-nav"><a href="/community">Community</a></li> 
     <li class="search-nav"><a href="/search">Search</a></li> 
    </ul> 
</body> 

mẫu CSS:

li.main-nav, 
li.community-nav, 
li.search-nav 
{ 
    background: #FFF; 
    /* your other awesome styles */ 
} 

#main li.main-nav, 
#community li.community-nav, 
#search li.search-nav 
{ 
    /* style the active tab differently */ 
    background: #F00; 
} 

Bằng cách này, các mã HTML cho phần điều hướng có thể ở lại hoàn toàn tĩnh trên mỗi trang. Nó không phải được trả về phía máy chủ hoặc được sửa đổi động ở phía máy khách.

Có một đẹp write-up về kỹ thuật này có sẵn trên trên CSS Tricks: ID Your Body For Greater CSS Control and Specificity

+0

Đến đây để viết lên kỹ thuật này. Upvotes cho bạn, sir tốt của tôi. –

+0

Hãy xem, tôi không hiểu tại sao mọi người bận tâm với rác như "không sử dụng bộ chọn ID trong CSS!" Các kỹ thuật như thế này là những ID tốt nhất. – BoltClock

+0

Vấn đề với đề xuất của bạn là khi bạn thêm một mục mới vào menu, bạn cũng cần thêm lớp mới. Ngoài ra, sử dụng một lớp "hoạt động" trên mục menu sẽ giúp bạn tách mục trong trường hợp bạn có các mục con. – jackJoe

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