2011-08-28 23 views
7

Tôi gặp sự cố với một số mã trên trang web của mình, http://ethoma.com/wp/. Trong thanh tìm kiếm, ở bên trái, tôi muốn màu xám thường "nhấn enter để tìm kiếm" để chuyển sang màu xám nhạt khi trường tìm kiếm (anh chị em của nó): tiêu điểm được kích hoạt. Đây là mã tôi hiện có:Làm cách nào để sửa đổi các thuộc tính của anh chị em với các bộ chọn CSS như: tập trung?

#s 
{ 
    min-width:98%; 
    background-color:#2a2a2a; 
    color:#d3d3d3; 
    border:2px solid #000000; 
    font-size:.85 em; 
    height:1.9em; 
    display:inline !important; 
    border-radius:5px 5px 5px 5px; 
} 

#s:focus 
{ 
    border:2px solid #2a2a2a; 
} 

#searchsub 
{ 
    color:#2a2a2a; 
    text-align:right; 
    font-size:.65em; 
    font-weight:lighter; 
} 

#s:focus #searchsub 
{ 
    color:#cccccc; 
} 

OK, #s là trường tìm kiếm và #searchsub là div mà tôi muốn chuyển #cccccc (xám nhạt). Tập hợp các dấu ngoặc nhọn cuối cùng có vẻ là nơi tôi đang gặp vấn đề (không phải là niềng răng, nhưng bộ chọn ở trên nó). Như tôi đã nói #s là anh chị em của #searchsub và ngược lại. Cảm ơn mọi câu trả lời!

+0

bạn đã bao giờ nghĩ về việc sử dụng jQuery để làm điều này? – stefmikhail

+1

Bạn nên dán đánh dấu có liên quan từ chủ đề của mình để tiết kiệm cho chúng tôi nỗ lực phải theo một liên kết để tìm kiếm đánh dấu có liên quan. – BoltClock

Trả lời

13

Như stefmikhail đã nói, khoảng trống trong bộ chọn của bạn có nghĩa là #searchsubbên trong#s. Theo như HTML là có liên quan, tuy nhiên, đó là rõ ràng là sai bởi vì các lĩnh vực input là các yếu tố có sản phẩm nào và bạn không thể có các yếu tố khác bên trong chúng.

Bạn muốn sử dụng anh chị em liền kề selector + thay vào đó, kể từ #searchsub là anh chị em ruột mà đến sau #s:

#s:focus + #searchsub 
{ 
    color:#cccccc; 
} 
+0

Tuy nhiên, nên được đề cập rằng bộ chọn lân cận là một phần của CSS3, và nhiều như tôi muốn đây không phải là trường hợp, CSS3 là * chưa được hỗ trợ đầy đủ. Nếu bạn muốn người dùng Internet Explorer 7 trở xuống có chức năng này, nó có thể là lỗi (trong trường hợp của IE7) hoặc không tồn tại (trong trường hợp của IE6 trở xuống). Tôi ước chúng tôi không phải viết mã cho các trình duyệt như vậy, nhưng triết lý của tôi là khi nó liên quan đến trạng thái di chuột, hãy sử dụng cái gì đó sẽ làm việc cho tất cả, không chỉ cho hầu hết. Nhưng này, đó là cuộc gọi của bạn. Tôi nghĩ rằng CSS3 selectors là cách mát mẻ! – stefmikhail

+0

@stefmikhail: Bạn nhầm lẫn bộ chọn anh chị em bên cạnh CSS2 '+' cho bộ chọn anh chị em chung CSS3 '~'. Cả hai đều được hỗ trợ rất tốt trong IE7 +. – BoltClock

+0

Rất tiếc, bạn hoàn toàn đúng. Cảm ơn vì sự đúng đắn của bạn. – stefmikhail

0

Vấn đề với mã của bạn là bằng cách đặt #searchsub sau #s:focus trong #s:focus #searchsub, bạn đang nói với CSS để hành động theo id #searchsubbên id #s.

Tôi đồng ý với JamWaffles rằng bạn có thể làm điều này với javascript. Tôi sẽ làm điều đó với jQuery, và nếu bạn muốn, tôi có thể đăng bài như thế nào.

+0

-1. Doable với CSS một mình. Không cần JavaScript. –

+0

@Rikudo Sennin Tôi chưa bao giờ nói nó không thể thực hiện được với CSS, tôi chỉ nói rằng tôi sẽ chọn sử dụng javascript cho việc này, việc sử dụng CSS cho việc này sẽ không hoạt động trong các trình duyệt IE cũ hơn. – stefmikhail

+1

Khi điều gì đó có thể thực hiện được với css. Nó thường là tốt nhất để làm như vậy. Đầu tiên tôi sẽ đi đến nếu hoàn toàn cần thiết, tôi muốn sử dụng Modernizr để kiểm tra xem có thể và sử dụng JavaScript khác không. –

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