2010-03-25 36 views
11

Tôi ban đầu muốn bao gồm tệp .css trong tài liệu HTML của mình tải nhiều tệp .css khác để chia một số đoạn mã cho mục đích phát triển.Nhập CSS hoặc nhiều tệp CSS

Tôi đã tạo ra một trang thử nghiệm:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<title>The Recipe Site</title> 
<link rel='stylesheet' href='/css/main.css'> 
<link rel='stylesheet' href='/css/site_header.css'> 
<!-- Let google host jQuery for us, maybeb replace with their api --> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.1/jquery.min.js"></script> 
<script type="text/javascript" src="/js/main.js"></script> 
</head> 
<body> 
    <div id="site_container"> 
    <div id="site_header"><?php include_once($r->base_dir . "inc/site_header.inc.php"); ?><!-- Include File, Update on ajax request. --></div> 
    <div id="site_content"> 
    Some main content. 
    </div> 
    <div id="site_footer"><?php include_once($r->base_dir . "inc/site_footer.inc.php"); ?><!-- Include File, Update on ajax request. --></div> 
    </div> 
</body> 
</html> 

File: /css/main.css

/* Reset Default Padding & Margin */ 
* { 
margin: 0; 
padding: 0; 
border: 0; 
} 


/* Set Our Float Classes */ 
.clear { clear: both; } 
.right { float: right; } 
.left { float: left; } 


/* Setup the main body/site container */ 
body { 
background: url(/images/wallpaper.png) repeat; 
color: #000000;  
text-align: center; 
font: 62.5%/1.5 "Lucida Grande", "Lucida Sans", Tahoma, Verdana, sans-serif; 
} 

#site_container { 
background-color: #FFFFFF; 
height: 100%; 
margin-left: auto; 
margin-right: auto; 
text-align: left; 
width: 100%; 
} 


/* Some style sheet includes */ 
/* @import "/css/site_header.css"; */ 


/* Default Font Sizes */ 
h1 { font-size: 2.2em; } 
h2 { font-size: 2.0em; } 
h3 { font-size: 1.8em; } 
h4 { font-size: 1.6em; } 
h5 { font-size: 1.4em; } 
p { font-size: 1.2em; } 


/* Default Form Layout */ 
input.text { 
padding: 3px; 
border: 1px solid #999999;  
} 


/* Default Table Reset */ 
table { 
border-spacing: 0; 
border-collapse: collapse; 
} 

td{ 
text-align: left; 
font-weight: normal; 
} 


/* Cause not all browsers know what HTML5 is... */ 
header { display:block;} 
footer { display:block;} 

và bây giờ là tập tin: /css/site_header.css:

#site_header { 
background-color: #c0c0c0; 
height: 100px; 
position: absolute; 
top: 100px; 
width: 100%; 
} 

Sự cố:

Khi tôi sử dụng mã ở trên, div site_header không có bất kỳ định dạng/nền nào. Khi tôi xóa dòng liên kết khỏi tài liệu HTML cho site_header.css và thay vào đó sử dụng @import url ("/ css/site_header.css"); trong tệp main.css của tôi, cùng một kết quả - không có gì được hiển thị cho cùng một div.

Bây giờ khi tôi đi đánh dấu CSS từ site_header.css và thêm nó vào main.css, div được kết xuất tốt ...

Vì vậy, tôi tự hỏi nếu có nhiều file css là bằng cách nào đó không làm việc .. hoặc có thể có đánh dấu css đó vào cuối css trước của tôi là bằng cách nào đó xung đột, mặc dù tôi không thể tìm thấy một lý do tại sao nó sẽ.

+1

Để tôi chỉ thêm liên kết cho một bài viết thể hiện bằng cách sử dụng nhiều css thông qua nhập: [Sử dụng CSS @import Rule] (http://www.cssnewbie.com/css-import-rule/) – sumid

Trả lời

2

Sử dụng firebug để kiểm tra div và xem kiểu nào đang được áp dụng cho nó, bạn có thể hiểu rõ hơn.

0

Đối với bất kỳ sự cố nào với CSS như thế này, tôi khuyên bạn nên sử dụng firebug. Bạn sẽ có thể xem liệu site_header.css của bạn có đang tải đúng không.

Nếu đang tải, bạn sẽ có thể xem kiểu nào đang được áp dụng cho các yếu tố nào, có thể một số kiểu đang bị ghi đè?

13

Chỉ thị @import phải đến trước trong CSS của bạn. Ngay khi một kiểu được trình duyệt nhấn, tất cả các dòng nhập khác sẽ bị bỏ qua.

Để báo WC3:

"bất kỳ quy tắc @import phải đặt trước tất cả quy tắc khác (trừ các quy tắc @charset, nếu có)"

Xem http://www.w3.org/TR/CSS2/cascade.html#at-import

Một điều cần lưu ý là mỗi @import vẫn gây ra một yêu cầu HTTP, vì vậy nó không hiệu quả hơn việc sử dụng nhiều thẻ liên kết S. Trong thực tế, nó có thể kém hiệu quả vì nhập khẩu có thể được tuần tự hơn là yêu cầu song song. See this article. IMO cũng làm tăng thêm sự phức tạp bởi vì bạn kết thúc việc quản lý các tham chiếu CSS ở hai vị trí (thẻ đầu đánh dấu cộng 1 hoặc nhiều tệp CSS) so với danh sách thẻ liên kết đơn giản.

Tôi cũng khuyên bạn nên kết hợp các tệp CSS khi trang web của bạn đang được sản xuất vì nó sẽ giảm chi phí HTTP.

+0

Đó là một bài viết tuyệt vời ! –

3

Trước hết, bạn có đánh dấu không hợp lệ.Thẻ liên kết phải được đóng ...

<link rel="stylesheet" href="/css/main.css" /> 

Thứ hai, tại sao bạn không sử dụng dấu ngoặc kép một cách nhất quán cho thuộc tính phần tử (ở đây trong thẻ liên kết bạn sử dụng báo giá một lần)? Đây không phải là một phần của vấn đề, nhưng tôi thấy nó khó khăn mà bạn sẽ xen lẫn các quy ước cú pháp khác nhau như thế này.

Cuối cùng, tôi không khuyên bạn sử dụng @import vì nó không mang lại lợi ích hấp dẫn. Nó phải là điều đầu tiên trong tệp CSS. Yêu cầu HTTP bổ sung vẫn phải được thực hiện cho từng tệp CSS bổ sung. Và trên hết, IE cokes khi bạn chỉ định một phương tiện đích cho nhập khẩu. Tôi dính vào thẻ liên kết cổ điển cũ vì nó chỉ hoạt động (với điều kiện bạn có đánh dấu hợp lệ!).

6

Tôi có thể nói, thú cưng đi tiểu ở đây, nhưng đặt hình ảnh liên quan đến tệp CSS trong thư mục CSS, chứ không phải trong/images /.

Điểm CSS là việc tách kiểu và nội dung và chỉ hình ảnh nội dung phải đi vào/images /. Bất kỳ hình ảnh gọi bằng CSS nên được đặt trong cùng một thư mục và gọi pathlessly, ví dụ:

body { 
background: url(wallpaper.png) repeat; 
} 

Bằng cách đó vào một ngày sau nếu nói đến việc thay đổi phong cách, hoặc làm cho nhiều phong cách nó chỉ là một trường hợp cập nhật một liên kết và di chuyển một thư mục (/ css /) thay vì có một mớ hỗn độn hình ảnh nằm rải rác trên tất cả các hệ thống tập tin. Thêm vào đó, luôn luôn là một ý tưởng tồi khi sử dụng đường dẫn tuyệt đối cho các tệp (chẳng hạn như /images/wallpaper.png).

+0

Ý tưởng hay - không bao giờ nghĩ về điều đó ... – Yarin

+1

Bootstrap của Twitter đặt tất cả hình ảnh của nó trong "img" chứ không phải thư mục "css" của chính nó. Tệp CSS tham chiếu chúng dưới dạng "../img/ ..". – ChrisCantrell

0

sử dụng @import quy tắc vào main.css tập tin của bạn như:

@import url("css/site_header.css"); (mã này nên được trên đầu trang của main.css của bạn)

các nhập khẩu đoạn trên sẽ ràng buộc nhiều tài khoản css tập tin vào css duy nhất sau đó sử dụng tệp main.css vào HTML của bạn.