Normalize.css และรีเซ็ต CSS แตกต่างกันอย่างไร


565

ฉันรู้ว่า CSS รีเซ็ตคืออะไร แต่เมื่อเร็ว ๆ นี้ฉันได้ยินเกี่ยวกับสิ่งใหม่นี้ที่ชื่อว่า Normalize.css

Normalize.cssและรีเซ็ต CSSแตกต่างกันอย่างไร

ความแตกต่างระหว่าง normalizing CSS และการรีเซ็ต CSS คืออะไร?

เป็นเพียงคำศัพท์ใหม่สำหรับการรีเซ็ต CSS หรือไม่

คำตอบ:


800

ฉันทำงานกับ normalize.css

ความแตกต่างที่สำคัญคือ:

  1. Normalize.css รักษาค่าเริ่มต้นที่เป็นประโยชน์มากกว่าทุกอย่าง "unstyling" ตัวอย่างเช่นองค์ประกอบเช่นsupหรือsub"เพิ่งทำงาน" หลังจากรวม normalize.css (และทำให้มีความสมบูรณ์มากขึ้น) ในขณะที่องค์ประกอบนั้นมองไม่เห็นจากข้อความปกติหลังจากรวมเอา reset.css ดังนั้น normalize.css ไม่ได้กำหนดจุดเริ่มต้นที่มองเห็น (homogeny) กับคุณ สิ่งนี้อาจไม่เหมาะกับทุกคน สิ่งที่ดีที่สุดที่จะทำคือการทดสอบกับทั้งสองและดูว่าเจลใดที่คุณต้องการ

  2. Normalize.css แก้ไขข้อผิดพลาดทั่วไปบางอย่างที่อยู่นอกขอบเขตสำหรับ reset.css แต่ก็มีขอบเขตกว้างกว่า reset.css และยังมีการแก้ไขข้อบกพร่องสำหรับปัญหาที่พบบ่อยเช่น: การตั้งค่าการแสดงผลสำหรับ HTML5 องค์ประกอบขาดfontมรดกโดยองค์ประกอบของแบบฟอร์มการแก้ไขfont-sizeการแสดงผลสำหรับpre, SVG ล้นใน IE9 และbuttonข้อผิดพลาดจัดแต่งทรงผมใน iOS

  3. Normalize.css ไม่เกะกะเครื่องมือ dev ของคุณ การระคายเคืองทั่วไปเมื่อใช้ reset.css เป็นห่วงโซ่การถ่ายทอดขนาดใหญ่ที่แสดงในเครื่องมือการดีบัก CSS ของเบราว์เซอร์ นี่ไม่ใช่ปัญหากับ normalize.css เนื่องจากมีสไตล์เป็นเป้าหมาย

  4. Normalize.css เป็นแบบแยกส่วน โครงการแบ่งออกเป็นส่วนที่ค่อนข้างอิสระทำให้คุณสามารถลบส่วนต่างๆได้ง่าย (เช่นการทำให้เป็นมาตรฐานของแบบฟอร์ม) หากคุณรู้ว่าเว็บไซต์ของคุณไม่จำเป็นต้องใช้

  5. Normalize.css มีเอกสารที่ดีกว่า รหัส Normalize.css เป็นเอกสารแบบอินไลน์เช่นเดียวกับครอบคลุมในGitHub วิกิพีเดีย ซึ่งหมายความว่าคุณสามารถค้นหาว่าแต่ละบรรทัดของรหัสกำลังทำอะไรรวมอยู่ด้วยทำไมความแตกต่างระหว่างเบราว์เซอร์และเรียกใช้การทดสอบของคุณเองได้ง่ายขึ้น โครงการมีวัตถุประสงค์เพื่อช่วยให้ความรู้แก่ผู้คนเกี่ยวกับวิธีที่เบราว์เซอร์แสดงองค์ประกอบโดยค่าเริ่มต้นและทำให้พวกเขามีส่วนร่วมในการส่งการปรับปรุงได้ง่ายขึ้น

ฉันเขียนรายละเอียดเกี่ยวกับสิ่งนี้ในบทความเกี่ยวกับ normalize.css


19
บ่อยครั้งที่คุณไม่ปล่อยให้มันเป็นศูนย์ (เมื่อใช้การรีเซ็ต) ดังนั้นคุณจึงเขียนโค้ดน้อยลง หากคุณต้องการให้ศูนย์มีค่าบางค่าสไตล์นั้นจะถูกรวมเข้ากับองค์ประกอบที่มันมีไว้สำหรับและควรทำให้การดีบักง่ายขึ้น
necolas

8
และนั่นเป็นปัญหาสำคัญกับการรีเซ็ตจำนวนมากรวมถึงความจริงที่ว่าการทำให้ทุกอย่างเป็นศูนย์นั้นช้าลงก็ทำให้เบราว์เซอร์ช้าลง
Rob

4
และนั่นก็เป็นข้อได้เปรียบของการรีเซ็ต - ทำให้เป็นเรื่องปกติในการปรับขนาดเช่นนี้: github.com/yahoo/pure/issues/395
Daniel Sokolowski

4
ฉันคิดถึงประเด็นนี้หรือไม่เมื่อฉันคิดว่าใช่โดยปกติคุณไม่ต้องการให้ช่องว่างภายในและระยะขอบเป็นศูนย์ แต่ไม่ใช่คุณไม่ต้องการค่าเริ่มต้นเช่นกัน
guioconnor

9
โดยส่วนตัวแล้วฉันได้ไปใช้งาน Normalize แม้ว่าฉันจะยังใช้มันอยู่ จุดต่าง ๆ มากมายที่นี่ล้นเหลือจริง ๆ (เอกสารที่ดีกว่า ... ?) Normalize ได้รับการใส่ความคิดเห็นดังนั้นจึงกำหนดจุดเริ่มต้นที่เป็นภาพให้กับคุณ (แม้จะมีคำตอบที่ว่านี้) นอกจากนี้ยังสามารถกลายเป็นล้าสมัย Reset.css ไม่สามารถล้าสมัยได้หลังจากที่คุณใช้งาน และคุณมีแนวโน้มที่จะต้องการให้ระยะขอบและช่องว่างภายในเป็น 0 มากกว่าหมายเลขอื่น ๆ ที่คุณคิดได้ดังนั้นจึงมีประโยชน์จริง ๆ ที่จะรีเซ็ตทุกอย่างเมื่อคุณพัฒนา Normalize นั้นดีสำหรับปัญหาเบราว์เซอร์และนั่นคือเหตุผลหลักที่ฉันใช้
Chuck Le Butt

255

ความแตกต่างที่สำคัญคือ:

  • CSS รีเซ็ตมีเป้าหมายเพื่อลบสไตล์ของเบราว์เซอร์ในตัว องค์ประกอบมาตรฐานเช่น H1-6, p, strong, em, และ cetera สิ้นสุดมองเหมือนกันโดยไม่มีการตกแต่งเลย คุณควรจะเพิ่มการตกแต่งทั้งหมดด้วยตัวเอง

  • Normalize CSSมีวัตถุประสงค์เพื่อทำให้สไตล์ของเบราว์เซอร์ในตัวสอดคล้องกันกับเบราว์เซอร์ องค์ประกอบเช่น H1-6 จะปรากฏเป็นตัวหนาขึ้นและใหญ่ขึ้นในลักษณะที่สอดคล้องกันในเบราว์เซอร์ คุณควรเพิ่มความแตกต่างในการตกแต่งตามความต้องการของการออกแบบของคุณเท่านั้น

หากการออกแบบของคุณก)ตามหลักการทั่วไปสำหรับการพิมพ์และอื่น ๆ และb) Normalize.css ใช้งานได้กับกลุ่มเป้าหมายของคุณจากนั้นใช้ Normalize.CSS แทนการรีเซ็ต CSS จะทำให้ CSS ของคุณเล็กลงและเร็วขึ้นในการเขียน


6
@Jitendra Vyas: - มีเพียงวิธีเดียวจริงๆ: อ่านโค้ด Normalize.CSS ที่มีความคิดเห็นดีและตัดสินใจว่าเหมาะสมกับความต้องการของคุณหรือไม่ github.com/necolas/normalize.css/blob/master/normalize.css
Jesper M

หมายเหตุอื่น: Normalize.css มีเป้าหมายที่จะไม่เป็นการรบกวนซึ่งเป็นไปได้ซึ่งช่วยให้นักพัฒนาสามารถเขียนรหัสได้ง่ายขึ้นโดยไม่ต้องต่อสู้กับความขัดแย้งที่เฉพาะเจาะจง
zzzzBov

ดังนั้นสมมติว่าฉันต้องการใช้รีเซ็ตเมื่อพัฒนา และเมื่อเสร็จแล้วฉันต้องการ normalize.css หรือ JS บางอย่างที่นำทุกสิ่งที่ฉันไม่ได้เปลี่ยนและเหมือนกันในเบราว์เซอร์ หรือฉันมีการเปลี่ยนแปลงและหลังจากเปลี่ยนพวกเขาได้กลายเป็นเช่นเดียวกับในเบราว์เซอร์และลบออกสำหรับฝั่งไคลเอ็นต์ ดังนั้นการรีเซ็ตจะช่วยในขณะที่พัฒนา 'โปรแกรม' ในฝั่งไคลเอ็นต์ที่เร็วขึ้น ทั้งสองมีความสุข และวิถีชีวิตที่ฉลาดกว่ามาก
มูฮัมหมัดอูเมอ

ในทางปฏิบัติคุณจะจบลงด้วยการเขียนทับสไตล์ทั้งหมดของ Normalize ต่อไป ทฤษฎีนี้ยอดเยี่ยม แต่ในโลกของ OOCSS มันไม่เคยใช้วิธีนี้ในทางปฏิบัติ
Chuck Le Butt

40

Normalize.css เป็นชุดรูปแบบส่วนใหญ่ขึ้นอยู่กับสิ่งที่ผู้เขียนคิดว่าจะดูดีและทำให้มันดูสม่ำเสมอในเบราว์เซอร์ รีเซ็ตแถบสไตล์โดยทั่วไปจากองค์ประกอบเพื่อให้คุณควบคุมการจัดแต่งทรงผมของทุกสิ่งได้มากขึ้น

ฉันใช้ทั้งสองอย่าง

สไตล์บางส่วนจากการรีเซ็ตบางส่วนจาก Normalize.css ตัวอย่างเช่นจาก Normalize.css มีสไตล์เพื่อให้แน่ใจว่าองค์ประกอบอินพุตทั้งหมดมีแบบอักษรเดียวกันซึ่งไม่ได้เกิดขึ้น (ระหว่างอินพุตข้อความและ textareas) รีเซ็ตไม่มีสไตล์ดังกล่าวดังนั้นอินพุตจึงมีแบบอักษรที่แตกต่างกันซึ่งไม่ต้องการโดยปกติ

ดังนั้นโดยพื้นฐานแล้วการใช้ไฟล์ CSS สองไฟล์จะช่วยให้ทุกอย่าง 'Equalizing' ได้ดีขึ้น)

ความนับถือ!


1
นี่เป็นคำตอบที่ดีและจริงจัง มันไม่จำเป็นต้องเป็นอย่างใดอย่างหนึ่ง นำสิ่งที่คุณต้องการจากแต่ละ ฉันชอบการรีเซ็ตแบบเต็มรูปแบบ แต่ Normalizer มีบิตและชิ้นส่วนที่ดีที่ทำงานได้ดีบนท็อป
Undistraction

3
@ricmetalster คุณต้องเขียน css ของคุณเองใหม่อีกครั้งเพื่อรวมฟังก์ชันการทำงานจาก reset.css และ normalize.css?
ayjay

2
หากคุณต้องการใช้ทั้งสองอย่างคุณสามารถแสดงรายการ "รีเซ็ต" ก่อนแล้วจึง "ทำให้ปกติ" แล้วเพิ่มสไตล์ของคุณที่ด้านบน?
Craig

ฉันใช้วิธี "อย่าคิดว่าเกิน" และใช้ทั้งสองอย่างและเรียกพวกเขาว่ารวมอยู่ในการนำเข้า SASS ของฉัน @import '_normalize' && '_reset'
killscreen

6

ครั้งแรกreset.cssเป็นห้องสมุดที่เลวร้ายที่สุดที่คุณสามารถใช้เพราะมันเอาโครงสร้างมาตรฐานของ HTML และแสดงทุกสิ่งที่คุณเขียนเป็นข้อความเพียงหลังจากการกำหนดค่าของการขยายขอบและคุณลักษณะอื่น ๆ 0ที่จะ ดังนั้นสำหรับตัวอย่างเช่นคุณจะพบว่าจะเป็นเช่นเดียวกับ<H1><H6>

ในทางกลับกันNormalize.cssใช้โครงสร้างมาตรฐานและแก้ไขข้อผิดพลาดเกือบทั้งหมดที่มีอยู่ในนั้น ตัวอย่างเช่นจะแก้ไขปัญหาด้วยการแสดงฟอร์มจากเบราว์เซอร์หนึ่งไปยังอีกเบราว์เซอร์ Normalize แก้ไขสิ่งนี้โดยการแก้ไขคุณสมบัตินี้เพื่อให้องค์ประกอบของคุณจะแสดงเหมือนกันในทุกเบราว์เซอร์


1
ขึ้นอยู่กับการใช้งานของคุณ พิจารณาตัวอย่างของคุณถ้าฉันต้องการแก้ไขรูปแบบตัวอักษรของแท็กส่วนหัวทั้งหมดสำหรับโครงการของฉันฉันจะไม่ใช้ค่าเริ่มต้นใด ๆ จริง ๆ หรือไม่ เราไม่ควรระบุว่าห้องสมุดเป็น "ที่แย่ที่สุด" เพียงเพราะไม่สามารถใช้ประโยชน์ในโครงการของตนเองได้
Debojyoti Ghosh

หนึ่งในวัตถุประสงค์หลักของการรีเซ็ตคือการต่อสู้กับปัญหาที่เพิ่มขึ้นจากสไตล์ที่ใช้เบราว์เซอร์ซึ่งมีประโยชน์มาก ฉันคิดว่ามันไม่ควรเป็นห้องสมุดด้วย
Isaac Pak

@ gdebojyoti มีบางกรณีที่ใช้งานได้ แต่ฉันไม่ค่อยต้องการให้หัวเรื่องทั้งหมดของฉันมีขนาดเท่ากันโดยไม่คำนึงถึงรูปแบบตัวอักษรที่เกี่ยวข้อง
James Beninger

5

ดูเหมือนว่ามันจะพยายามทำให้รูปแบบเริ่มต้นของตัวแทนผู้ใช้นั้นสอดคล้องกันในทุกเบราว์เซอร์แทนที่จะลอกสไตล์ที่เป็นค่าเริ่มต้นออกไปเหมือนที่รีเซ็ต

รักษาค่าเริ่มต้นที่เป็นประโยชน์ซึ่งไม่เหมือนกับการรีเซ็ต CSS จำนวนมาก


ดังนั้นจะดีกว่าที่จะใช้ Normalize css มากกว่า Reset?
Jitendra Vyas

3
@Jitendra Vyas - ไม่ เครื่องมือต่าง ๆ ไม่ดีหรือแย่กว่ากันแล้ว เลือกหนึ่งที่ช่วยคุณแก้ปัญหาที่คุณมีดีที่สุด
เควนติน

8
ฉันจะต้องยืนยันว่าการปรับสภาพให้เป็นมาตรฐานนั้นดีกว่าการรีเซ็ต มันจะมีผลใน CSS น้อยถูกย้ายข้ามสายใช้งานที่ดีของการเริ่มต้น UA และความเข้าใจที่ดีของวิธีการที่องค์ประกอบจะหมายถึงการแสดงผล
Ryan Kinal

5

การรีเซ็ตดูเหมือนว่าจำเป็นที่จะต้องปฏิบัติตามข้อกำหนดการออกแบบที่กำหนดเองโดยเฉพาะอย่างยิ่งในโครงการออกแบบที่ซับซ้อนและไม่ใช้หม้อไอน้ำ ฟังดูราวกับว่าการทำให้เป็นมาตรฐานเป็นวิธีที่ดีในการดำเนินการกับการเขียนโปรแกรมเว็บอย่างหมดจดในใจ แต่เว็บไซต์ที่เกิดขึ้นบ่อยครั้งนั้นเป็นการผสมผสานระหว่างการเขียนโปรแกรมเว็บและกฎการออกแบบ UI / UX


เป็นกรณีที่ใช้เกิน 99%
Michael

@Michael อันไหน? รีเซ็ตหรือทำให้ปกติ (เพียงพยายามที่จะเข้าใจจิตใจของผู้คนในเรื่อง)
Bren

1
@Bren ทั้งรีเซ็ตและทำให้ปกติ การรู้ค่า CSS เริ่มต้นสำหรับแต่ละองค์ประกอบนั้นเป็นส่วนหนึ่งของการเป็นผู้พัฒนาส่วนหน้าที่ดี ฉันเห็นพวกเขาว่าเป็นวิธีการอันดุร้ายที่ไม่จำเป็น
ไมเคิล

4
@Michael> Knowing the default CSS values for each element is part of being a good front end developer- นี่มันคล้ายกับว่าคุณอยากทำงานกับอิเล็กตรอนมากกว่าภาษาโปรแกรมเพราะนั่นคือสิ่งที่ทำให้นักพัฒนาที่ดี การใช้เครื่องมืออย่างมีประสิทธิภาพทำให้ใครบางคนเป็นนักพัฒนาที่ดีวิธีอื่น ๆ มักจะตกอยู่ในหมวดหมู่ของแนวความคิดที่สูญเปล่า
nicholaswmin

1

บางครั้งทางออกที่ดีที่สุดคือใช้ทั้งคู่ บางครั้งก็ใช้ไม่ได้เลย และบางครั้งก็ใช้อย่างใดอย่างหนึ่ง หากคุณต้องการสไตล์ทั้งหมดรวมถึงส่วนต่างและการเว้นระยะห่างระหว่างเบราว์เซอร์ทั้งหมดให้ใช้ reset.css จากนั้นใช้การตกแต่งและสไตล์ทั้งหมดด้วยตัวคุณเอง ถ้าคุณชอบสไตล์บิวด์อิน แต่ต้องการซิงโครไนซ์ข้ามเบราว์เซอร์เช่นการทำให้เป็นมาตรฐานแล้วใช้ normalize.css แต่ถ้าคุณเลือกที่จะใช้ทั้ง reset.css และ normalize.css ให้เชื่อมโยงสไตล์ชีต reset.css ก่อนจากนั้นจะใช้สไตล์ชีต normalize.css (ทันที) ในภายหลัง บางครั้งมันก็ไม่ได้เป็นเรื่องที่ดีกว่าเสมอไป แต่เมื่อใดควรใช้แบบไหนเมื่อเทียบกับการใช้ทั้งแบบไหนและแบบไหน IMHO


0

คำถามนี้ได้รับการตอบแล้วหลายครั้งฉันจะสรุปโดยย่อสำหรับแต่ละตัวอย่างและข้อมูลเชิงลึก ณ เดือนกันยายน 2019:

  • Normalize.css - ตามที่ชื่อแนะนำมันทำให้รูปแบบในเบราว์เซอร์สำหรับตัวแทนผู้ใช้ของพวกเขาปกติคือทำให้เหมือนกันในทุกเบราว์เซอร์เนื่องจากเหตุผลโดยค่าเริ่มต้นพวกเขาแตกต่างกันเล็กน้อย

ตัวอย่าง : <h1>แท็กภายใน<section>โดยค่าเริ่มต้น Google Chrome จะทำให้มีขนาดเล็กลงกว่า "คาดว่า" ขนาดของ<h1>แท็ก Microsoft Edge ตรงกันข้ามขนาด<h1>แท็ก"คาดหวัง" Normalize.css จะทำให้มันสอดคล้องกัน

สถานะปัจจุบัน : ที่เก็บ npm แสดงว่าแพ็คเกจ normalize.cssปัจจุบันมีการดาวน์โหลดมากกว่า 500k ครั้งต่อสัปดาห์ ดาว GitHub ในโครงการของพื้นที่เก็บข้อมูลมีมากกว่า 36k

  • รีเซ็ต CSS - ตามชื่อแนะนำมันจะรีเซ็ตสไตล์ทั้งหมดเช่นลบสไตล์ผู้ใช้ของเบราว์เซอร์ทั้งหมด

ตัวอย่าง : มันจะทำสิ่งที่ต้องการด้านล่าง:

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

สถานะปัจจุบัน : เป็นที่นิยมน้อยกว่า Normalize.css แพ็คเกจรีเซ็ต cssแสดงให้เห็นว่ามีการดาวน์โหลดประมาณ 26 พันครั้งต่อสัปดาห์ GitHub ดาวมีเพียง 200 ขณะที่มันสามารถสังเกตเห็นได้จากโครงการพื้นที่เก็บข้อมูล

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.