뚠뚠멍의 생각들

กฎพื้นฐานของ CSS (Normal flow, BFC, IFC)

สร้าง: 2024-09-07

สร้าง: 2024-09-07 20:11


เมื่อออกแบบ HTML CSS บางครั้งเลย์เอาต์อาจไม่ได้ออกมาตามที่ต้องการ

และฉันก็เคยค้นหาในกูเกิลบ่อยมากเลยล่ะ


เมื่อเร็วๆ นี้ ฉันได้ดูวิดีโอพูดคุยของนักพัฒนาจากเจโรโชะ แล้วก็เลยตัดสินใจที่จะมาศึกษาพื้นฐานของ CSS

- ฉันอยากจะเข้าใจเกี่ยวกับองค์ประกอบบล็อก องค์ประกอบอินไลน์ มาร์จิน และการจัดวาง


ถึงแม้ว่าฉันจะรู้เรื่องนี้จากประสบการณ์อยู่แล้ว แต่ก็จำเป็นที่จะต้องสรุปมันเอาไว้

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


1. Normal Flow

- ไม่ต้องคิดอะไรมากครับ องค์ประกอบทั้งหมดจะถูกจัดวางจากบนลงล่าง จากซ้ายไปขวา

* เวลาเขียนโพสต์ใน durumis แล้ววางแท็ก html ลงไป มันหายไปอ่ะ แก้ยังไงดี;;

- แท็ก p จะสร้างบล็อกสองบล็อก และแท็ก span จะวาดเป็นบรรทัดเดียว



2. BFC (Block Formatting Context)

- ส่วนใหญ่ใช้ในการสร้างเลย์เอาต์ (สร้างบล็อกแล้วใส่ข้อมูลอินไลน์ลงไปในนั้น)

- เป็นวิธีการที่องค์ประกอบระดับบล็อกเรียงซ้อนกัน

- องค์ประกอบระดับบล็อกมีดังนี้

<div>, <p>, <h1>~<h6>, <ul>, <ol>, <li>, <table>, <form>

- ไม่ว่าเนื้อหาภายในองค์ประกอบจะมีความยาวเท่าไหร่ก็ตาม องค์ประกอบจะครอบคลุมความกว้างทั้งหมดขององค์ประกอบหลัก (หนึ่งบรรทัด)

- สามารถใส่บล็อกหรือองค์ประกอบอินไลน์ลงในบล็อกได้

- สามารถตั้งค่า width, height, margin, padding ได้

- จะสร้างสองบรรทัดภายในแท็ก div

- กรณีที่สร้าง BFC ขึ้นมามีดังนี้ สามารถค้นหาทีละรายการได้

  • กรณีที่คุณสมบัติ float ไม่ใช่ none
  • กรณีที่คุณสมบัติ position เป็น absolute หรือ fixed
  • กรณีที่คุณสมบัติ display เป็น inline-block, table-cell, table-caption, flex, inline-flex, grid, inline-grid
  • กรณีที่คุณสมบัติ overflow ไม่ใช่ visible เป็นต้น


3. IFC (Inline Formatting Context)

- สร้างขึ้นภายในองค์ประกอบบล็อก (ไม่ใช่ระดับบรรทัด)

- ไม่สามารถตั้งค่า width และ height ได้โดยตรง (ใช้ขนาดของเนื้อหา)

- สามารถใช้ padding และ margin ในแนวนอนได้เท่านั้น

- สามารถใส่เฉพาะองค์ประกอบอินไลน์ลงในองค์ประกอบอินไลน์เท่านั้น

<span>, <a>, , <img>, <input> เป็นต้น


แล้วใช้ตอนไหนล่ะ?

- bfc ใช้เพื่อจัดการกับการโต้ตอบของ float และการลบล้างมาร์จิน


1. การโต้ตอบของ float

- ถ้าตั้งค่าสไตล์ที่อิสระให้กับลูก (float, position absolute, fixed, display inline-block เป็นต้น...)

- พ่อจะไม่สามารถครอบคลุมได้

- ในกรณีนี้ ให้ใช้ bfc ในองค์ประกอบหลักเพื่อสร้างเลย์เอาต์

- (ใช้ display: inline-block, overflow: auto, float: left ในแท็กหลัก)


2. การลบล้างมาร์จิน

- css จะทำให้มาร์จินด้านบนและล่างของแท็กที่อยู่ติดกันทับซ้อนกัน

ตัวอย่าง) ระยะห่างระหว่างแท็ก div สองแท็กด้านล่างนี้ จะไม่ใช่ 150px แต่เป็น 100px

- ในสถานการณ์ดังกล่าว ให้เพิ่มองค์ประกอบ bfc ใหม่ระหว่างแท็กทั้งสอง



หมายเหตุ durumis มีวิธีการคัดลอกวาง html ยังไงอ่ะ;;

ความคิดเห็น0

[สำหรับผู้ไม่ใช่ผู้เชี่ยวชาญ ด้านการพัฒนาซอฟต์แวร์ เพื่อความอยู่รอด] 14. สรุปเนื้อหาสัมภาษณ์ทางเทคนิคที่ผู้พัฒนาซอฟต์แวร์มือใหม่ถามบ่อยสรุปคำถามทางเทคนิคที่มักถามในการสัมภาษณ์งานผู้พัฒนาซอฟต์แวร์มือใหม่ (พื้นที่หน่วยความจำ โครงสร้างข้อมูล ฐานข้อมูล ฯลฯ) หวังว่าจะเป็นประโยชน์ในการเตรียมตัวสัมภาษณ์งานด้านการพัฒนา
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자
투잡뛰는 개발 노동자

April 3, 2024

รวมคำถามที่พบบ่อยเกี่ยวกับการเขียนบทความรวบรวมคำถามที่พบบ่อยเกี่ยวกับการเขียนบทความไว้ที่นี่ค่ะ ครอบคลุมคำถามและคำตอบเกี่ยวกับการใช้ฟังก์ชั่นต่างๆ เช่น การแบ่งบรรทัด การเปลี่ยนสีตัวอักษร การตั้งค่าหัวเรื่องและเนื้อหา การเพิ่มคำอธิบายภาพ การแก้ไขตัวอย่างและสรุปบทความโดย AI การเลือกประเทศ และการแ
durumis official blog
durumis official blog
durumis official blog
durumis official blog

January 25, 2024

คู่มือฉบับสมบูรณ์สำหรับคุณสมบัติ CSS object-fitเรียนรู้วิธีปรับขนาดและแสดงภาพเว็บอย่างมีประสิทธิภาพโดยใช้คุณสมบัติ CSS object-fit ค้นพบตัวเลือกต่างๆ เช่น การรักษาอัตราส่วนภาพ การตัด และการเติม
Meursyphus
Meursyphus
Meursyphus
Meursyphus

July 14, 2024

[บันทึกการสร้างเว็บไซต์หลายภาษา - วันที่ 22] สารบัญควรอยู่ตำแหน่งใดบทความบล็อกนี้กล่าวถึงความกังวลเกี่ยวกับตำแหน่งของสารบัญในเว็บเพจและกระบวนการแก้ปัญหา การเปรียบเทียบข้อดีและข้อเสียของการจัดวางที่ด้านบนและเหนือแท็ก h2 จากนั้นจึงเสนอวิธีการเลือกตำแหน่งที่ดีที่สุดที่เหมาะสมกับวัตถุประสงค์ของเนื้อหา
aghkuh1
aghkuh1
aghkuh1
aghkuh1

January 18, 2025

เริ่มต้นเขียนบทความแรกบนดูรูมิสแนะนำฟีเจอร์การเขียนบทความและตัวแก้ไขบนแพลตฟอร์มดูรูมิส พร้อมทั้งสำรวจฟีเจอร์ต่างๆ เช่น ฟีเจอร์จัดรูปแบบต่างๆ ลิงก์บ็อกซ์ เส้นแบ่ง และเสนอแนะการปรับปรุง
이것저것 잡다한 이야기
이것저것 잡다한 이야기
이것저것 잡다한 이야기
이것저것 잡다한 이야기

April 14, 2024

[บันทึกการสร้างเว็บไซต์หลายภาษา - วันที่ 23] ความแตกต่างระหว่างการตั้งค่า locale และ hreflangวันที่ 23 ของการสร้างเว็บไซต์หลายภาษา: การตั้งค่า locale ใช้สำหรับตั้งค่าภาษาและภูมิภาคของเว็บเพจ ในขณะที่การตั้งค่า hreflang ใช้สำหรับให้ข้อมูลภาษา/ภูมิภาคแก่เครื่องมือค้นหาเพื่อการเพิ่มประสิทธิภาพเครื่องมือค้นหา บทความนี้จะอธิบายรายละเอียดเกี่ยวกับความ
aghkuh1
aghkuh1
aghkuh1
aghkuh1

January 19, 2025