Có gì khác biệt nếu tôi đặt tệp css bên trong <head> hoặc <body>?


155

Thông thường các tập tin css được đặt bên trong <head></head>, nếu tôi đặt nó vào bên trong <body></body>thì nó sẽ tạo ra sự khác biệt gì?

Câu trả lời:


116

Chỉ cần thêm vào những gì jdelStrother đã đề cập về thông số kỹ thuật w3 và ARTstudio về kết xuất trình duyệt.

Đó là khuyến cáo vì khi bạn khai báo CSS trước khi <body>bắt đầu, kiểu của bạn đã thực sự được tải. Vì vậy, rất nhanh người dùng nhìn thấy một cái gì đó xuất hiện trên màn hình của họ (ví dụ như màu nền). Nếu không, người dùng sẽ thấy màn hình trống trong một thời gian trước khi CSS đến tay người dùng.

Ngoài ra, nếu bạn để các kiểu ở đâu đó trong <body>trình duyệt, trình duyệt phải kết xuất lại trang (mới và cũ khi tải) khi các kiểu được khai báo đã được phân tích cú pháp.


10
Tất nhiên là có trong HTML5 rồi. Nhưng về mặt kết xuất, nó có thể chậm hơn vì trình duyệt hiển thị lại trang như tôi đã đề cập.
mauris

4
Vâng không nghi ngờ gì. Tôi chỉ thêm nó ở đây để những người chỉ đọc câu trả lời được chấp nhận sẽ không bỏ lỡ nó. :)
Vilx-

3
@Vilx đó là thông tin sai! linkstylekhông được xuất hiện trong cơ thể trừ khi chúng có phạm vi (kiểu) hoặc có thuộc tính itemprop(liên kết) được khai báo.
Christoph

2
@Christoph điều này không đúng, stylelà một yếu tố dòng chảy trong html5 và html4.1 (ngay cả khi nó không có phạm vi) và có thể được đưa vào cơ thể.
Kpym

1
@Kpym Bạn đến bữa tiệc muộn 3 năm ;-) Nhưng bạn đã đúng, phong cách hiện là một yếu tố dòng chảy và scopedthuộc tính đã bị lỗi thời.
Christoph

40

Các phiên bản gần đây nhất của thông số HTML hiện cho phép <style>thẻ trong các thành phần cơ thể. https://www.w3.org/TR/html5/dom.html#flow-content Ngoài ra, scopedthuộc tính từng là điều kiện tiên quyết để có một stylethẻ trong bodyhiện đã lỗi thời.

Điều này có nghĩa là, bạn có thể sử dụng stylethẻ ở mọi nơi bạn muốn, ý nghĩa duy nhất là hiệu suất trang bị giảm do phản xạ / sơn lại có thể xảy ra khi trình duyệt nhấn các kiểu xuống sâu hơn trong cây trang.

Câu trả lời lỗi thời:

Các <style>thẻ không được phép trong phạm vi <body>theo thông số kỹ thuật w3. (Tất nhiên, bạn có thể áp dụng các kiểu nội tuyến thông qua <div style="color:red">nếu cần, nhưng nó thường được coi là phân tách phong cách và nội dung kém)


3
Điều này không đúng, <style>là một phần tử luồng trong html 5 và 4.1 và có thể được đặt trong phần thân (như tất cả các phần tử luồng khác).
Kpym

1
+1 của tôi để giữ cho câu trả lời của bạn cập nhật!
Benjamin

14

Đưa CSS vào phần thân có nghĩa là nó được tải sau. Đây là một kỹ thuật được sử dụng để cho phép trình duyệt bắt đầu vẽ giao diện nhanh hơn (nghĩa là loại bỏ một bước chặn). Điều này rất quan trọng đối với trải nghiệm người dùng trên SmartPhones.

Tôi làm hết sức mình để giữ một css nhỏ trên <head>và tôi di chuyển phần còn lại ở phía dưới. Ví dụ: nếu một trang sử dụng CSS UI của JQuery, tôi luôn di chuyển nó ở dưới cùng <body>, ngay trước các liên kết đến javascript của JQuery. Ít nhất, tất cả các mục không Jquery đã có thể được rút ra.


7

Đầu được thiết kế cho (Trích dẫn W3C):

"thông tin về tài liệu hiện tại, chẳng hạn như tiêu đề của nó, các từ khóa có thể hữu ích cho các công cụ tìm kiếm và các dữ liệu khác không được coi là nội dung tài liệu "

Xem cấu trúc toàn cầu của một tài liệu HTML . Vì CSS không phải là nội dung tài liệu, nên nó nằm trong đầu.

Ngoài ra, mọi nhà phát triển Web khác sẽ mong đợi nhìn thấy nó ở đó, vì vậy đừng nhầm lẫn mọi thứ bằng cách đặt nó vào cơ thể, ngay cả khi nó hoạt động!

CSS duy nhất bạn nên đặt trong phần thân là CSS nội tuyến , mặc dù tôi thường tránh các kiểu nội tuyến.


3
Tôi hoàn toàn làm theo những gì bạn đang nói. Nhưng làm thế nào bạn có thể xử lý tình huống bạn có nhiều trang, một số trong đó bao gồm nội dung từ một tệp riêng biệt (trong trường hợp của tôi, trang một phần của dao cạo .NET) và bất cứ khi nào tệp đó được bao gồm, một biểu định kiểu cụ thể cũng cần được liên kết? Liên kết trong tiêu đề của mỗi trang bao gồm hoặc liên kết trong phần thân của trang. Cái trước phù hợp với "css trong tiêu đề", trong khi cái sau phù hợp với "viết nó một lần".
Nổi bật vào

4

Các tiêu chuẩn ( HTML 4.01: thành phần kiểu ) xác định rõ rằng thẻ kiểu chỉ được phép bên trong thẻ đầu. Nếu bạn đặt các thẻ kiểu trong thẻ body, các trình duyệt sẽ cố gắng tận dụng nó tốt nhất nếu có thể.

Có thể trình duyệt sẽ bỏ qua thẻ kiểu trong phần thân nếu bạn chỉ định loại tài liệu nghiêm ngặt. Tôi không biết liệu có trình duyệt hiện tại nào thực hiện việc này không, nhưng tôi sẽ không tin vào tất cả các phiên bản trong tương lai để có thể thoải mái về nơi bạn đặt yếu tố kiểu dáng.


1
@Pacerier: Trong stylethẻ HTML5 được cho phép trong phần thân nếu chúng có scopedthuộc tính.
Guffa


2
@Pacerier: Đó là vì thông tin trong bình luận đó không đầy đủ. Bạn có thể có các thẻ kiểu trong thẻ body, nhưng chỉ khi chúng có thuộc tính phạm vi. Đây là tài liệu tiêu chuẩn chỉ định thẻ kiểu: dev.w3.org/html5/spec-preview/the-style-element.html
Guffa

theo thuộc tính phạm vi W3 chỉ được firefox hỗ trợ, vậy điểm là gì?
JSON


1

Ngoài các câu trả lời trước đó, mặc dù đặt khối mã kiểu bên trong phần tử có thể hoạt động trong các trình duyệt hiện đại (mặc dù điều đó vẫn không đúng), luôn có một mối nguy hiểm, đặc biệt với các trình duyệt cũ hơn, trình duyệt sẽ hiển thị mã dưới dạng văn bản trừ khi phần kiểu được bao gồm trong phần CDATA.

Tất nhiên, điều khác với việc đưa nó vào bên trong phần tử, ngoại trừ kiểu nội tuyến, là vì nó không đáp ứng với thông số kỹ thuật W3C HTML / XHTML là bất kỳ trang nào có nội dung trong phần thân sẽ không thành công trên trình xác nhận W3C. Việc tìm kiếm các sự cố hiển thị không mong muốn luôn dễ dàng hơn nếu tất cả mã của bạn hợp lệ, giúp phát hiện lỗi dễ dàng hơn. Một phần tử HTML không hợp lệ có thể ảnh hưởng xấu đến việc chạy của bất kỳ và tất cả phần tử nào ngoài mã xảy ra trong mã, do đó bạn có thể nhận được các hiệu ứng không mong muốn có các phần tử ở những nơi không nên, bởi vì khi trình duyệt tìm thấy phần tử không hợp lệ, nó chỉ là làm cho nó đoán tốt nhất về cách nó sẽ hiển thị nó và các trình duyệt khác nhau có thể đưa ra các quyết định khác nhau về cách chúng hiển thị nó.

Cho dù bạn sử dụng một loại tài liệu chuyển tiếp hay nghiêm ngặt, nó vẫn sẽ không hợp lệ theo thông số kỹ thuật (X) HTML.


0

Bạn thực sự sẽ đánh bại mục đích sử dụng CSS bằng cách đặt các kiểu trong cơ thể. Vấn đề sẽ là tách nội dung khỏi phần trình bày (và chức năng). Bằng cách này, mọi thay đổi về kiểu có thể được thực hiện trong biểu định kiểu, không phải trong nội dung. Khi bạn sử dụng phương thức kiểu nội tuyến, mỗi trang có kiểu dáng nội tuyến cần thay đổi từng cái một. Tàn nhẫn và mạo hiểm vì bạn có thể bỏ lỡ một hoặc ba hoặc mười trang.

Sử dụng biểu định kiểu, bạn chỉ cần thay đổi biểu định kiểu; các thay đổi lan truyền tự động đến mọi trang HTML liên kết đến biểu định kiểu.

quan điểm của neonble cũng là một lý do tuyệt vời khác; nếu bạn làm rối HTML bằng cách thêm CSS nội tuyến, kết xuất sẽ trở thành một vấn đề. HTML không ném ngoại lệ cho mã của bạn. Thay vào đó, nó đi ra ngoài và tái hiện nó theo cách tốt nhất có thể, và tiếp tục.

Tuân thủ các tiêu chuẩn web bằng cách sử dụng biểu định kiểu sẽ giúp trang web tốt hơn. Và khi bạn cần trợ giúp vì mọi thứ trên trang của bạn không chính xác theo cách bạn muốn, việc đặt CSS của bạn vào đầu trái ngược với cơ thể sẽ giúp bạn tự khắc phục sự cố tốt hơn và cho bất kỳ ai bạn yêu cầu trợ giúp.


2
Tôi không hiểu bạn đang nói về cái gì " Một khi bạn sử dụng phương thức kiểu nội tuyến" - ai đang nói về việc sử dụng kiểu nội tuyến ở đây? Câu hỏi nói tập tin css .
TJ

0

Hai câu trả lời trái ngược nhau:

Từ trang MDN trên thẻ liên kết:

Một <link>phần tử có thể xuất hiện trong phần tử <head>hoặc <body>phần tử, tùy thuộc vào việc nó có loại liên kết có thân không. Ví dụ: loại liên kết biểu định kiểu là body-ok, và do đó a <link rel="stylesheet">được phép trong cơ thể. Tuy nhiên, đây không phải là cách thực hành tốt nhất; nó có ý nghĩa hơn để tách các <link>yếu tố của bạn khỏi nội dung cơ thể của bạn, đặt chúng trong đầu của bạn.

Từ CSS Hướng dẫn dứt khoát (Phiên bản thứ 4/2017) trang 10

Để tải thành công biểu định kiểu bên ngoài, liên kết phải được đặt bên trong phần tử đầu nhưng không được đặt trong bất kỳ phần tử nào khác.


-1

Sự khác biệt là. Việc tải trang không đồng bộ, vì vậy nếu bạn có biểu định kiểu bên ngoài, nó sẽ tải tệp css ngay lập tức khi đến thẻ liên kết, đó là lý do tại sao bạn nên có đầu ở đầu.


-1

nó sẽ làm cho sự khác biệt gì?

Ưu điểm: Đôi khi dễ dàng hơn để áp dụng các thuộc tính nhất định ở một số nơi nhất định, đặc biệt là nếu mã được tạo nhanh chóng (chẳng hạn như xây dựng qua php và mỗi danh sách có kích thước động cần có lớp riêng của nó ... chẳng hạn như định thời gian cho các biến đổi).

Nhược điểm: Hơi chậm, có thể không hoạt động vào một ngày nào đó trong tương lai xa.

Ý kiến ​​chung của tôi về nó: Đừng làm điều đó bạn không cần phải làm, nhưng nếu bạn phải làm, đừng mất bất kỳ giấc ngủ nào trên nó.


-3

Đưa phần <style>thân vào hoạt động tốt với tất cả các trình duyệt hiện đại.

Tôi đã sử dụng cái này ở eBay.

Nếu nó hoạt động, đừng đá nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.