Sự khác biệt giữa Normalize.css và Reset CSS là gì?


565

Tôi biết CSS Reset là gì, nhưng gần đây tôi đã nghe về điều mới này được gọi là Normalize.css

Sự khác biệt giữa Normalize.cssReset CSS là gì?

Sự khác biệt giữa bình thường hóa CSS và đặt lại CSS là gì?

Có phải nó chỉ là một từ buzz mới cho CSS Reset?

Câu trả lời:


800

Tôi làm việc trên normalize.css.

Sự khác biệt chính là:

  1. Normalize.css bảo tồn các mặc định hữu ích thay vì "hủy kết nối" mọi thứ. Ví dụ: các phần tử như suphoặc sub"chỉ hoạt động" sau khi bao gồm normalize.css (và thực sự được tạo ra mạnh mẽ hơn) trong khi chúng không thể phân biệt trực quan với văn bản thông thường sau khi bao gồm cả reset.css. Vì vậy, normalize.css không áp đặt điểm bắt đầu trực quan (đồng nhất) lên bạn. Điều này có thể không phù hợp với khẩu vị của mọi người. Điều tốt nhất để làm là thử nghiệm với cả hai và xem loại gel nào với sở thích của bạn.

  2. Normalize.css sửa một số lỗi phổ biến nằm ngoài phạm vi của reset.css. Nó có phạm vi rộng hơn reset.css và cũng cung cấp sửa lỗi cho các vấn đề phổ biến như: cài đặt hiển thị cho các phần tử HTML5, thiếu tính fontkế thừa bởi các thành phần biểu mẫu, sửa lỗi font-sizekết xuất pre, tràn SVG trong IE9 và buttonlỗi kiểu dáng trong iOS.

  3. Normalize.css không làm lộn xộn các công cụ dev của bạn. Một sự khó chịu phổ biến khi sử dụng reset.css là chuỗi thừa kế lớn được hiển thị trong các công cụ gỡ lỗi CSS của trình duyệt. Đây không phải là một vấn đề như vậy với normalize.css vì các kiểu dáng được nhắm mục tiêu.

  4. Chuẩn hóa.css là mô-đun nhiều hơn. Dự án được chia thành các phần tương đối độc lập, giúp bạn dễ dàng loại bỏ các phần (như chuẩn hóa biểu mẫu) nếu bạn biết rằng trang web của bạn sẽ không bao giờ cần đến chúng.

  5. Normalize.css có tài liệu tốt hơn. Mã normalize.css được ghi lại thành dòng cũng như toàn diện hơn trong GitHub Wiki . Điều này có nghĩa là bạn có thể tìm hiểu từng dòng mã đang làm gì, tại sao nó được đưa vào, sự khác biệt giữa các trình duyệt và dễ dàng chạy thử nghiệm của riêng bạn hơn. Dự án nhằm mục đích giúp giáo dục mọi người về cách trình duyệt hiển thị các yếu tố theo mặc định và giúp họ dễ dàng tham gia vào việc gửi các cải tiến.

Tôi đã viết chi tiết hơn về điều này trong một bài viết về normalize.css


19
Rất thường xuyên, bạn không để chúng ở mức 0 (khi sử dụng thiết lập lại), vì vậy bạn thực sự đang viết ít mã hơn. Nếu bạn muốn loại bỏ một số giá trị, thì kiểu đó được kết hợp với phần tử có nghĩa là và nên dễ dàng gỡ lỗi.
Necolas

8
Và RATNG là một vấn đề quan trọng với nhiều thiết lập lại, bao gồm cả việc loại bỏ mọi thứ ra ngoài cũng làm chậm trình duyệt.
Cướp

4
Và RATNG cũng là lợi thế của việc đặt lại - bình thường hóa bỏ lỡ các vấn đề kích thước như thế này: github.com/yahoo/pure/issues/395
Daniel Sokolowski

4
Tôi có bỏ lỡ điểm khi tôi nghĩ rằng, vâng, thông thường bạn không muốn phần đệm và lề bằng 0 nhưng, không, bạn cũng không muốn mặc định?
guioconnor

9
Cá nhân tôi đã tắt Bình thường hóa, mặc dù tôi vẫn sử dụng nó. Rất nhiều điểm ở đây thực sự bị che khuất (tài liệu tốt hơn ...?). Bình thường hóa là quan điểm, vì vậy nó áp đặt một điểm bắt đầu trực quan lên bạn (mặc dù câu trả lời này nói gì). Nó cũng có thể trở nên lỗi thời. Reset.css không bao giờ có thể trở nên lỗi thời sau khi bạn sử dụng nó. Và bạn có nhiều khả năng muốn tỷ suất lợi nhuận và phần đệm bằng 0 hơn bất kỳ số nào khác bạn có thể nghĩ đến, vì vậy thật sự hữu ích khi đặt lại mọi thứ khi bạn đang phát triển. Bình thường hóa là tốt cho các vấn đề trình duyệt, tuy nhiên, và đó là lý do chính tôi sử dụng nó.
Chuck Le Mông

255

Sự khác biệt chính là:

  • Đặt lại CSS nhằm mục đích loại bỏ tất cả các kiểu trình duyệt tích hợp. Các yếu tố tiêu chuẩn như H1-6, p, strong, em, et cetera cuối cùng trông giống hệt nhau, không có trang trí nào cả. Sau đó, bạn nên thêm tất cả các trang trí cho mình.

  • Chuẩn hóa CSS nhằm mục đích làm cho kiểu dáng trình duyệt tích hợp nhất quán trên các trình duyệt. Các yếu tố như H1-6 sẽ xuất hiện đậm, lớn hơn et cetera một cách nhất quán trên các trình duyệt. Sau đó, bạn chỉ cần thêm sự khác biệt trong trang trí nhu cầu thiết kế của bạn.

Nếu thiết kế của bạn a) tuân theo các quy ước chung cho typography et cetera và b) Normalize.css hoạt động cho đối tượng mục tiêu của bạn, thì sử dụng Normalize.CSS thay vì thiết lập lại CSS sẽ giúp CSS của bạn nhỏ hơn và nhanh hơn để viết.


6
@Jitendra Vyas: - thực sự chỉ có một cách: đọc mã Normalize.CSS được nhận xét tốt và quyết định xem nó có phù hợp với nhu cầu của bạn hay không. github.com/necolas/n normalize.css / blog / master / n normalize.css
Jesper M

Một lưu ý khác: Normalize.css nhằm mục đích trở nên không phô trương nhất có thể, cho phép nhà phát triển viết mã của họ dễ dàng hơn mà không phải chống lại xung đột đặc thù.
zzzzBov

vì vậy hãy nói rằng tôi muốn sử dụng thiết lập lại khi phát triển. Và một khi đã hoàn thành, tôi muốn normalize.css hoặc một số JS có tất cả những điều tôi chưa thay đổi và giống nhau trong trình duyệt. Hoặc tôi đã thay đổi và sau khi thay đổi, chúng đã trở nên giống như trong trình duyệt và xóa chúng cho phía máy khách. Vì vậy, thiết lập lại sẽ giúp ích trong khi phát triển 'chương trình' đó ở phía máy khách nhanh hơn. Cả hai hạnh phúc. Và cách sống thông minh hơn nhiều.
Muhammad Umer

Trong thực tế, cuối cùng bạn sẽ ghi đè lên tất cả các kiểu của Chuẩn hóa. Lý thuyết là tuyệt vời, nhưng trong thế giới OOCSS này, nó không bao giờ hoạt động theo cách đó trong thực tế.
Chuck Le Mông

40

Normalize.css chủ yếu là một tập hợp các kiểu, dựa trên những gì tác giả của nó nghĩ sẽ trông tốt và làm cho nó trông nhất quán trên các trình duyệt. Về cơ bản, thiết lập lại dải kiểu dáng từ các yếu tố để bạn có quyền kiểm soát nhiều hơn đối với kiểu dáng của mọi thứ.

Tôi sử dụng cả hai.

Một số kiểu từ Reset, một số từ Normalize.css. Ví dụ: từ Normalize.css, có một kiểu để đảm bảo tất cả các thành phần đầu vào có cùng một phông chữ, điều này không xảy ra (giữa các kiểu nhập văn bản và textareas). Đặt lại không có kiểu như vậy, vì vậy đầu vào có các phông chữ khác nhau, điều mà thông thường không muốn.

Vì vậy, về cơ bản, sử dụng hai tệp CSS thực hiện công việc 'Cân bằng' mọi thứ tốt hơn;)

Trân trọng!


1
Đây là một câu trả lời tốt, thực dụng. Nó không nhất thiết phải là cái này hay cái khác. Lấy những gì bạn muốn từ mỗi. Tôi thích một thiết lập lại đầy đủ, nhưng Trình chuẩn hóa cung cấp một số bit và mảnh tốt hoạt động tốt.
Undistraction

3
@ricmetalster, vậy bạn có phải viết lại css của riêng mình để kết hợp các chức năng từ reset.css và normalize.css không?
ayjay

2
Nếu bạn muốn sử dụng cả hai, bạn có thể liệt kê "đặt lại" trước sau đó "bình thường hóa" sau đó thêm kiểu của bạn lên trên không?
Craig

Tôi sử dụng cách tiếp cận "đừng nghĩ quá nhiều" và sử dụng cả hai và gọi chúng như bao gồm trong nhập khẩu SASS của tôi @import '_n normalize' && '_reset'
killscreen

6

Đầu tiên reset.csslà thư viện tồi tệ nhất bạn có thể sử dụng, bởi vì nó loại bỏ cấu trúc tiêu chuẩn của HTML và hiển thị mọi thứ bạn viết giống như văn bản, sau khi gán các giá trị của phần đệm lề và các thuộc tính khác 0. Vì vậy, ví dụ bạn sẽ thấy rằng <H1>, sẽ giống như <H6>.

Mặt khác Normalize.csssử dụng cấu trúc tiêu chuẩn và cũng sửa hầu hết các lỗi hiện có trong nó. Ví dụ, nó khắc phục vấn đề bằng cách hiển thị một biểu mẫu từ trình duyệt này sang trình duyệt khác. Bình thường hóa sửa lỗi này bằng cách sửa đổi các tính năng này để các yếu tố của bạn sẽ được hiển thị giống nhau trên tất cả các trình duyệt.


1
Phụ thuộc vào trường hợp sử dụng của bạn. Xem xét ví dụ của bạn, nếu tôi cần sửa đổi kiểu phông chữ của tất cả các thẻ tiêu đề cho dự án của mình, tôi sẽ không thực sự sử dụng các giá trị mặc định, phải không? Người ta không nên gắn nhãn thư viện là "tệ nhất" chỉ vì người ta không thể tìm thấy việc sử dụng trong các dự án của chính mình.
Debojyoti Ghosh

Một trong những mục đích chính của thiết lập lại là để chống lại các vấn đề phát sinh từ các kiểu ứng dụng trình duyệt rất hữu ích. Tôi cũng nghĩ rằng nó không nên được coi là một thư viện.
Isaac Pak

@gdebojyoti Có một số trường hợp sử dụng, nhưng tôi rất hiếm khi muốn tất cả các tiêu đề của mình có cùng kích thước, bất kể kiểu phông chữ tương ứng của chúng.
James Beninger

5

Theo mô tả của nó, có vẻ như nó cố gắng làm cho kiểu mặc định của tác nhân người dùng nhất quán trên tất cả các trình duyệt thay vì tước bỏ mọi kiểu dáng mặc định như thiết lập lại.

Giữ nguyên các mặc định hữu ích, không giống như nhiều bộ CSS.


Vì vậy, tốt hơn là sử dụng bình thường hóa css trên Reset?
Jitendra Vyas

3
@Jitendra Vyas - không. Các công cụ là khác nhau, không tốt hơn hoặc xấu hơn nhau. Chọn một trong đó giúp bạn giải quyết các vấn đề bạn có tốt nhất.
Quentin

8
Tôi sẽ phải tranh luận bình thường mà tốt hơn so với đặt lại. Nó sẽ cho kết quả trong vòng chưa CSS được chuyển qua dây dẫn, sử dụng tốt hơn giá trị mặc định UA, và một sự hiểu biết tốt hơn về cách các yếu tố được có nghĩa là để hiển thị.
Ryan Kinal

5

Đặt lại dường như là một điều cần thiết để đáp ứng các thông số kỹ thuật thiết kế tùy chỉnh, đặc biệt là trên các dự án thiết kế kiểu phức tạp, không nồi hơi. Nghe có vẻ như bình thường hóa là một cách tốt để tiến hành lập trình web hoàn toàn trong tâm trí, nhưng các trang web thông thường là một cuộc hôn nhân giữa lập trình web và quy tắc thiết kế UI / UX.


Đó là quá mức cần thiết 99% trường hợp sử dụng.
Michael

@Michael cái nào? thiết lập lại hoặc bình thường hóa? (Chỉ cố gắng hiểu tâm trí của mọi người về chủ đề này)
Bren

1
@Bren cả thiết lập lại và bình thường hóa. Biết các giá trị CSS mặc định cho từng thành phần là một phần của nhà phát triển giao diện người dùng tốt. Tôi thấy chúng là phương pháp vũ phu không cần thiết.
Michael

4
@Michael> Knowing the default CSS values for each element is part of being a good front end developer- đây giống như nói rằng bạn thà làm việc với các điện tử hơn là ngôn ngữ lập trình, bởi vì đó là điều tạo nên một nhà phát triển giỏi. Sử dụng các công cụ một cách hiệu quả làm cho ai đó trở thành một nhà phát triển giỏi, theo cách khác, thường rơi vào nhóm người quá khích lãng phí thời gian
nicholaswmin

1

Đôi khi, giải pháp tốt nhất là sử dụng cả hai. Đôi khi, nó là để sử dụng không. Và đôi khi, nó là để sử dụng cái này hay cái khác. Nếu bạn muốn tất cả các kiểu, bao gồm đặt lại lề và đệm trên tất cả các trình duyệt, hãy sử dụng reset.css. Sau đó áp dụng tất cả các trang trí và tạo kiểu cho mình. Nếu bạn chỉ đơn giản thích các kiểu dáng tích hợp nhưng muốn đồng bộ nhiều trình duyệt hơn tức là chuẩn hóa thì hãy sử dụng normalize.css. Nhưng nếu bạn chọn sử dụng cả reset.css và normalize.css, trước tiên hãy liên kết biểu định kiểu reset.css và sau đó là biểu định kiểu normalize.css (ngay lập tức) sau đó. Đôi khi không phải lúc nào cũng tốt hơn, nhưng khi nào nên sử dụng cái nào so với khi nào nên sử dụng cả hai so với khi nào không sử dụng. IMHO.


0

Câu hỏi này đã được trả lời nhiều lần, tôi sẽ tóm tắt ngắn gọn cho mỗi câu hỏi, một ví dụ và thông tin chi tiết vào tháng 9 năm 2019:

  • Normalize.css - như tên cho thấy, nó bình thường hóa các kiểu trong trình duyệt cho các tác nhân người dùng của họ, nghĩa là làm cho chúng giống nhau trên tất cả các trình duyệt do lý do mặc định chúng hơi khác nhau.

Ví dụ : <h1>thẻ bên trong <section>theo mặc định Google Chrome sẽ làm cho nhỏ hơn kích thước của <h1>thẻ "dự kiến" . Mặt khác, Microsoft Edge đang tạo ra kích thước "mong đợi" của <h1>thẻ. Chuẩn hóa.css sẽ làm cho nó phù hợp.

Trạng thái hiện tại : kho lưu trữ npm cho thấy gói normalize.css hiện có hơn 500 nghìn lượt tải mỗi tuần. Sao GitHub trong dự án của kho lưu trữ là hơn 36k.

  • Đặt lại CSS - như tên cho thấy, nó đặt lại tất cả các kiểu, tức là loại bỏ tất cả các kiểu tác nhân người dùng của trình duyệt.

Ví dụ : nó sẽ làm một cái gì đó như thế dưới đây:

html, body, div, span, ..., audio, video {  
   margin: 0;  
   padding: 0;  
   border: 0;  
   font-size: 100%;  
   font: inherit;  
   vertical-align: baseline; 
}

Trạng thái hiện tại : nó ít phổ biến hơn so với Normalize.css, gói reset-css cho thấy khoảng 26 nghìn lượt tải xuống mỗi tuần. Các ngôi sao GitHub chỉ có 200, vì nó có thể được nhận thấy từ kho lưu trữ của dự á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.