2012-05-04 38 views
12

Tôi đang gặp một số vấn đề với CSS "phân cấp" (không chắc chắn nếu nó là đúng để gọi nó là một hệ thống phân cấp). Tôi đang cố gắng tạo kiểu HTML dưới đây.Tại sao thuộc tính CSS của tôi bị ghi đè/bỏ qua?

<body> 
    <section id="content"> 
    <article> 
     <ul class="posts-list"> 
     <li class="post-item"> 
      <h2>[post title]</h2> 
      <p class="item-description">...</p> 
      <p class="item-meta">...</p> 
     </li> 
     ... 
     </ul> 
    </article> 
    </section> 
</body> 

Vì phần nội dung thay đổi trên mỗi trang tôi có, tôi muốn duy trì phong cách nhất quán trên tất cả chúng, vì vậy tôi đã viết một số quy tắc CSS "toàn cầu".

#content { 
    color: #000; 
    margin-left: 300px; 
    max-width: 620px; 
    padding: 0px 10px; 
    position: relative; 
} 

#content p, 
#content li { 
    color: #111; 
    font: 16px/24px serif; 
} 

Tôi muốn tạo kiểu HTML trong một số ul.posts-list khác nhau, vì vậy tôi đã viết các quy tắc này.

li.post-item > * { 
    margin: 0px; 
} 

.item-description { 
    color: #FFF; 
} 

.item-meta { 
    color: #666; 
} 

Tuy nhiên, tôi gặp phải một số vấn đề. Đây là cách mà Chrome đang render CSS:

Screenshot of how Chrome is rendering my CSS

Đối với một số lý do, các quy tắc #content p, #content li được trọng quy tắc của tôi cho .item-description.item-meta. Ấn tượng của tôi là tên lớp/id được coi là cụ thể và do đó ưu tiên cao hơn. Tuy nhiên, có vẻ như tôi có một sự hiểu lầm về cách CSS hoạt động. Tôi làm gì sai ở đây?

Chỉnh sửa: Ngoài ra, tôi có thể đọc thêm về cách phân cấp này hoạt động như thế nào?

Trả lời

25

Id yếu tố có mức độ ưu tiên trong CSS vì chúng là đặc trưng nhất. Bạn chỉ phải sử dụng id:

#content li.post-item > * { 
    margin: 0px; 
} 

#content .item-description { 
    color: #FFF; 
} 

#content .item-meta { 
    color: #666; 
} 

Về cơ bản id có ưu tiên vào lớp mà ưu tiên trên thẻ (p, li, ul, h1 ...). Để ghi đè quy tắc, chỉ cần đảm bảo bạn có mức độ ưu tiên;)

+7

+ 1'd cho mã, nhưng một vài liên kết không thể làm tổn thương! [đặc tả chính thức về tính đặc hiệu] (http://www.w3.org/TR/CSS21/cascade.html#specificity) và [tờ báo thân thiện] [http://www.stuffandnonsense.co.uk/archives/images/ specificitywars-05v2.jpg) – benesch

+0

+1 cho bảng cheat thân thiện hoặc "cách giải thích đặc tính css cho một geek"! Xuất sắc! – tibo

1

ID Nhắm mục tiêu là nhắm mục tiêu cụ thể hơn các lớp học. Kiểu dáng cụ thể hơn sẽ ghi đè kiểu dáng ít cụ thể hơn. Cần lưu ý rằng kiểu dáng nội dòng trong HTML cụ thể hơn và do đó sẽ ghi đè kiểu dáng được nhắm mục tiêu theo ID. Nói cách khác:

<p style="color:white" id="itemDescId" class="item-description">...</p> 

Với CSS:

p{color:blue;} 
#itemDescId{color:red;} 
.item-description{color:green} 

Các văn bản sẽ xuất hiện màu trắng - không phải vì nó là gần gũi nhất với các mã html, nhưng vì nó là cao hơn trong hệ thống tính đặc. Nếu bạn loại bỏ kiểu dáng nội tuyến (và bạn thường phải dùng mã dễ quản lý hơn), thì văn bản sẽ trở thành màu đỏ. Loại bỏ ID và nó sẽ có màu xanh lá cây. Và cuối cùng nó sẽ có màu xanh dương khi lớp bị xóa.

Đây là một trong những chủ đề phức tạp hơn để hiểu trong CSS, và tôi chỉ trầy xước bề mặt, nhưng sự mô tả đơn giản nhất tôi đã tìm thấy trên CSS đặc hiệu làm việc như thế nào là qua tại CSS thủ đoạn:

http://css-tricks.com/specifics-on-css-specificity/

0

phản ứng của tôi cần phải có được một "bình luận" về câu trả lời, nhưng tôi có sửa chữa đúng mặc dù #tibo trả lời đúng:

li.post-item > * { 
    margin: 0px !important; 
} 

.item-description { 
    color: #FFF !important; 
} 

.item-meta { 
    color: #666 !important; 
} 

Nguyên tắc !important sẽ ghi đè lên tự đánh giá giữa id một lớp thứ hai.

Dưới đây là một liên kết đến một bài viết, When Using !important is The Right Choice, mà sẽ giúp bạn hiểu ... nó làm cho cuộc sống của tôi dễ dàng :)

+0

... chỉnh sửa giá rẻ .... js ... –

0

Tốt hơn để theo các tiêu chuẩn CSS. chọn bộ chọn css và makeit bên dưới cha mẹ của nó, u có thể không nhận được xung đột khi tải css fles (như tệp .css)

+0

Bạn có thể xây dựng hoặc đưa ra mẫu mã về ý của bạn không? Tôi không hoàn toàn làm theo những gì bạn đang nói. – Kmeixner

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