Cascading Style Sheets (CSS) ช่วยให้คุณเปลี่ยนรูปลักษณ์ของหน้าเว็บได้ ตั้งแต่ฟอนต์และสี ไปจนถึงระยะห่างและเลย์เอาต์โดยรวม เครื่องมือออกแบบทั้งหมดอยู่ใกล้แค่เอื้อม แม้ว่า CSS จะเป็นภาษาที่ซับซ้อนอย่างครบถ้วน แต่มีเพียงสองแนวคิดพื้นฐานที่คุณต้องเข้าใจเพื่อเริ่มต้น
ทุกอย่างเริ่มต้นด้วยการระบุส่วนใดของหน้าที่คุณต้องการจัดรูปแบบ
CSS = ตัวเลือก + ประกาศ
ไฟล์ CSS มีชุดกฎเกณฑ์ที่อธิบายว่าไฟล์ HTML ควรจัดรูปแบบอย่างไร กฎแต่ละข้อประกอบด้วยสองส่วน: จะจัดรูปแบบอะไร และจัดรูปแบบอย่างไร ส่วนแรกถูกควบคุมโดยใช้ชุดคำศัพท์ที่เรียกว่า "ตัวเลือก"
ตัวอย่างในบทความนี้ ได้แก่ การประกาศรูปแบบ แต่ไม่ได้เน้น: ตัวเลือกคือ
ในอดีต มีตัวเลือก CSS (หรือเวอร์ชัน) สามระดับพร้อมระดับการรองรับเบราว์เซอร์ที่แตกต่างกัน ในปี 2020 ตามรายงานของCan I Useสิ่งเหล่านี้มีให้สำหรับผู้ใช้มากกว่า 99 เปอร์เซ็นต์ทั่วโลก
ตัวเลือกระดับ 1
ระดับ 1 แนะนำตัวเลือกพื้นฐานสี่ประเภทที่ครอบคลุมกรณีจำนวนมาก แม้กระทั่งในปัจจุบัน
ลวดลาย |
แมตช์ |
E |
องค์ประกอบ E ทั้งหมด |
.c |
องค์ประกอบทั้งหมดที่มี class="c" |
#myid |
องค์ประกอบที่มี id="myid" |
E F |
องค์ประกอบ F ภายในองค์ประกอบ E |
คลาสหลอก |
E:link |
ไฮเปอร์ลิงก์ไปยังหน้าที่ไม่เคยเข้าชมมาก่อน |
E:visited |
ไฮเปอร์ลิงก์ไปยังหน้าที่เข้าชมแล้ว |
E:active |
ไฮเปอร์ลิงก์ที่เลือกอยู่ในปัจจุบัน |
องค์ประกอบหลอก |
E::first-line |
รูปแบบบรรทัดแรกขององค์ประกอบ E |
E::first-letter |
ตัวอักษรรูปแบบแรกขององค์ประกอบ E |
ตัวเลือกประเภท
ตัวเลือกที่ง่ายที่สุดคือ "ตัวเลือกประเภท" โดยกำหนดเป้าหมายอินสแตนซ์ทั้งหมดขององค์ประกอบ เช่น ย่อหน้าหรือข้อความตัวหนา:
p { margin-bottom: 0; } b { font-family: sans-serif; }
ตัวเลือกคลาส
แอตทริบิวต์ class อนุญาตให้เพิ่มความหมายเพิ่มเติมในองค์ประกอบ HTML เช่นประเภทย่อหน้าเฉพาะ องค์ประกอบดังกล่าวสามารถเลือกได้ใน CSS ดังต่อไปนี้:
.intro { font-weight: bold; }
ตัวเลือกนี้จะตรงกับ:
…
แต่โปรดทราบว่ามันจะตรงกับ:
ถ้าคุณต้องการนำไปใช้กับย่อหน้าแนะนำ คุณสามารถรวมตัวเลือกประเภทและตัวเลือกชั้นเรียน:
p.intro { font-weight: bold; }
ตัวเลือก ID
แอตทริบิวต์รหัส HTML ควรไม่ซ้ำกันภายในเอกสาร เช่น หากคุณมี:
…
นั่นควรเป็นองค์ประกอบเดียวที่มีรหัส "เนื้อหา" ตัวเลือก ID ช่วยให้คุณกำหนดเป้าหมายองค์ประกอบเฉพาะนั้นในเอกสารได้:
#contents { color: #333; }
ตัวเลือกลูกหลาน
อย่างเคร่งครัด "เครื่องผสม" เพราะตัวเลือกนี้เกี่ยวกับช่องว่างระหว่างสองตัวเลือก HTML ที่เป็นลำดับชั้นตามที่อธิบายในภาพรวมของ DOM ตัวเลือกลูกหลานอนุญาตให้ระบุองค์ประกอบตามบริบทภายในองค์ประกอบอื่น:
table b { font-weight: normal; }
คลาสหลอกและองค์ประกอบ
Pseudo selector กำหนดเป้าหมายคลาสหรือองค์ประกอบที่ไม่มีอยู่อย่างชัดเจนแต่ยังพร้อมใช้งานอยู่ดี คิดว่าเป็นโบนัสเนื้อหาพิเศษ:
p::first-line { text-transform: uppercase; }
รายการตัวเลือก
ใช้เครื่องหมายจุลภาคเพื่อรวมตัวเลือกลงในรายการ หากคุณต้องการใช้กฎชุดเดียวกันกับแต่ละรายการ แทน:
th { padding: 1em; } td { padding: 1em; }
คุณสามารถเขียน:
th, td { padding: 1em; }
ความจำเพาะ
สไตล์ชีตคือชุดของกฎที่ใช้ตัวเลือกเพื่อจับคู่องค์ประกอบ แต่จะเกิดอะไรขึ้นเมื่อมีกฎมากกว่าหนึ่งกฎตรงกับองค์ประกอบที่กำหนด พฤติกรรมที่เป็นผลลัพธ์ถูกควบคุมโดย "ความจำเพาะ" ซึ่งกำหนดกฎที่ใช้ในกรณีเช่น:
p.intro { color: black; } p { color: gray; }
ในกรณีดังกล่าว กฎที่มีลำดับความสำคัญถูกกำหนดโดยความจำเพาะ ดังต่อไปนี้:
- ตัวเลือก ID (`#contents`) มีความเฉพาะเจาะจงที่สุด
- ตัวเลือกคลาส (`.author`) มีความเฉพาะเจาะจงน้อยกว่า
- ตัวเลือกประเภท (`p`) มีความเฉพาะเจาะจงน้อยที่สุด
เมื่อคำนวณความเฉพาะเจาะจง แต่ละระดับจะพิจารณาก็ต่อเมื่อตัวเลือกสองตัวมีคะแนนเท่ากันที่ระดับที่สูงกว่า ดังนั้น “#contents” จึงมีความเฉพาะเจาะจงมากกว่า “article.news p.author.special” เนื่องจากตัวเลือกเดิม “ชนะ” ในตัวเลือก ID
ตัวเลือกระดับ 2
การแก้ไขครั้งต่อไปของตัวเลือก CSS ได้แนะนำตัวเลือกแอตทริบิวต์ ขยายบนคลาสหลอกและองค์ประกอบหลอก และเพิ่มตัวรวมใหม่สองตัว
ลวดลาย |
แมตช์ |
* |
องค์ประกอบใด ๆ |
E > F |
ลูกองค์ประกอบ F ขององค์ประกอบ E |
E + F |
องค์ประกอบ F นำหน้าด้วยองค์ประกอบ E ทันที |
ตัวเลือกแอตทริบิวต์ |
E[foo] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" |
E[foo="bar"] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" เป็น "แถบ" ทุกประการ |
E[foo~="bar"] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" เป็นรายการค่าที่คั่นด้วยช่องว่าง ซึ่งหนึ่งในนั้นคือ "แถบ" |
E[foo|="en"] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" มีรายการค่าที่คั่นด้วยยัติภังค์ที่ขึ้นต้นด้วย "en" |
คลาสหลอก |
E:first-child |
องค์ประกอบ E ลูกคนแรกของผู้ปกครอง |
E:lang(fr) |
องค์ประกอบประเภท E ในภาษา "fr" |
องค์ประกอบหลอก |
E::before |
สร้างเนื้อหาก่อนเนื้อหาขององค์ประกอบ E |
E::after |
สร้างเนื้อหาหลังจากเนื้อหาขององค์ประกอบ E |
ตัวเลือกสากล
“*” ตรงกับองค์ประกอบใดๆ มักไม่ค่อยมีประโยชน์ แต่ถ้าคุณต้องการรีเซ็ตระยะขอบเริ่มต้น คุณสามารถทำได้ดังนี้:
* { margin: 0; }
ตัวเลือกแอตทริบิวต์
ตัวเลือกแอตทริบิวต์ช่วยให้สามารถกำหนดเป้าหมายสไตล์ได้โดยเฉพาะ กรองโดยแอตทริบิวต์ขององค์ประกอบ:
a[title] { text-decoration: underline dotted; }
คล้ายกับตัวประสานผู้สืบทอด แต่อันนี้จับคู่เฉพาะลูกที่อยู่ติดกัน ไม่ใช่ผู้สืบทอดใดๆ ที่ต่ำกว่าต้นไม้ ตัวอย่างเช่น “ul > li” จะจับคู่เฉพาะข้อความ “ส่วนที่ 1” ที่นี่ และไม่ตรงกับ “ส่วนที่ 1.1”:
พี่น้องที่อยู่ติดกัน: พี่น้องคนต่อไป
h1 + p { font-weight: bold; }
มักมีประโยชน์สำหรับการควบคุมระยะขอบ หรือย่อหน้าเกริ่นนำโดยไม่มีคลาสเฉพาะ ตัวเลือกนี้จะจับคู่องค์ประกอบหนึ่งก็ต่อเมื่อตามหลังอีกองค์ประกอบหนึ่งทันที ในตัวอย่าง จะจับคู่เฉพาะย่อหน้าแรกที่นี่ ไม่ใช่ส่วนที่สอง:
Contents
some extra text
Introductory paragraph
Following paragraph
โปรดทราบว่าตัวเลือกนี้จะพิจารณาเฉพาะองค์ประกอบเท่านั้น ไม่ใช่ข้อความ เมื่อตัดสินใจว่าพี่น้องคนต่อไปคืออะไร
มรดก
คุณสมบัติ CSS บางตัวรับค่ามาจากองค์ประกอบระดับบน ในทางปฏิบัติ นี่หมายความว่า ตัวอย่างเช่น การตั้งค่าหน้าแบบอักษรขององค์ประกอบ "เนื้อหา" หมายความว่าทุกย่อหน้า ตาราง ฯลฯ ใช้แบบอักษรเดียวกันนั้นด้วย
แน่นอนว่านี่คือสิ่งที่คุณคาดหวัง แต่ให้พิจารณาคุณสมบัติที่ไม่ได้รับมา เช่น “ระยะขอบ” คุณไม่ต้องการให้ทุกย่อหน้าหรือบิตของข้อความตัวหนามีระยะขอบเท่ากันกับทั้งเอกสาร
ที่เกี่ยวข้อง: ตัวอย่างโค้ด CSS อย่างง่ายที่คุณเรียนรู้ได้ใน 10 นาที
หลักการที่ดีคือการกำหนดเป้าหมายองค์ประกอบโดยทั่วไปตามความเหมาะสม อย่ากำหนดเป้าหมายทุกองค์ประกอบเมื่อตัวเลือก "เนื้อหา" ธรรมดาจะทำ
ตัวเลือกระดับ 3
มีการเพิ่มคลาสหลอกอีกมากมายในระดับนี้ ควบคู่ไปกับตัวเลือกแอตทริบิวต์บางตัวและตัวรวมแบบใหม่
ลวดลาย |
แมตช์ |
E ~ F |
องค์ประกอบ F นำหน้าด้วยองค์ประกอบ E |
ตัวเลือกแอตทริบิวต์ |
E[foo^="bar"] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" ขึ้นต้นด้วยสตริง "bar" |
E[foo$="bar"] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" ลงท้ายด้วยสตริง "bar" |
E[foo*="bar"] |
องค์ประกอบ E ที่มีแอตทริบิวต์ "foo" มีสตริงย่อย "bar" |
คลาสหลอก |
E:root |
องค์ประกอบ E รูทของเอกสาร |
E:nth-child(n) |
องค์ประกอบ E ลูกที่ n ของผู้ปกครอง |
E:nth-last-child(n) |
องค์ประกอบ E ลูกที่ n ของผู้ปกครอง นับจากอันสุดท้าย |
E:nth-of-type(n) |
องค์ประกอบ E พี่น้องที่ n ของประเภท |
E:nth-last-of-type(n) |
องค์ประกอบ E พี่น้องลำดับที่ n ของประเภท นับจากอันสุดท้าย |
E:last-child |
องค์ประกอบ E ลูกคนสุดท้ายของผู้ปกครอง |
E:first-of-type |
องค์ประกอบ E พี่น้องคนแรกของประเภท |
E:last-of-type |
องค์ประกอบ E พี่น้องคนสุดท้ายของประเภท |
E:only-child |
องค์ประกอบ E ลูกคนเดียวของผู้ปกครอง |
E:only-of-type |
องค์ประกอบ E พี่น้องเท่านั้นของประเภท |
E:empty |
องค์ประกอบ E ที่ไม่มีลูก (รวมถึงโหนดข้อความ) |
E:target |
องค์ประกอบ E เป็นเป้าหมายของ URI ที่อ้างอิง |
E:enabled |
องค์ประกอบส่วนต่อประสานผู้ใช้ E ที่เปิดใช้งาน |
E:disabled |
องค์ประกอบส่วนต่อประสานผู้ใช้ E ที่ปิดใช้งาน |
E:checked |
องค์ประกอบส่วนต่อประสานผู้ใช้ E ที่ตรวจสอบแล้ว |
E:not(s) |
องค์ประกอบ E ที่ไม่ตรงกับตัวเลือกง่ายๆ s |
ตัวเลือกแอตทริบิวต์
คุณสามารถเลือกองค์ประกอบที่มีแอตทริบิวต์ที่ขึ้นต้นด้วยค่าที่กำหนด: a[href^="https:"]
, ลงท้ายด้วยค่าที่กำหนด: img[src$=".gif"]
, หรือมีค่า: a[*="value"]
.
คลาสหลอก
คลาสหลอกเพิ่มเติม ได้แก่ “:last-child”, “:empty” (เพื่อให้ตรงกับองค์ประกอบที่ไม่มีเนื้อหา) และ “:checked” ซึ่งตรงกับองค์ประกอบเช่นอินพุตช่องทำเครื่องหมาย แต่เมื่อเลือกแล้วเท่านั้น
General Sibling Combinator: พี่น้องที่ติดตาม
คล้ายกับ Adjacent Sibling Combinator จากระดับ 2 ซึ่งตรงกับพี่น้องที่ตามมาไม่ใช่แค่พี่น้องถัดไป:
h1 ~ p { font-size: 110%; }
ตัวเลือก CSS และวิธีใช้งาน
ตอนนี้คุณรู้ทุกอย่างเกี่ยวกับการเลือกส่วนของหน้าเว็บโดยใช้ CSS แล้ว ตอนนี้คุณพร้อมที่จะจัดรูปแบบหน้าเว็บของคุณด้วยคุณสมบัติ CSS ที่หลากหลายซึ่งครอบคลุมทุกอย่างตั้งแต่สีไปจนถึงการจัดวาง
เครดิตภาพ: Pankaj Patel / Unsplash