ค่าลอยใน CS: GO คืออะไร? ทุกอย่างเกี่ยวกับคุณสมบัติลอยการใช้งาน Float ในทางปฏิบัติ

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

ทรัพย์สิน ลอยใน CSSอนุญาตให้นักพัฒนารวมคอลัมน์เหมือนตารางในมาร์กอัป HTML โดยไม่ต้องใช้ตาราง หากไม่ใช่เพราะทรัพย์สิน ลอยดังนั้นเลย์เอาต์ CSS จะเป็นไปไม่ได้นอกจากการใช้การวางตำแหน่งแบบสัมบูรณ์และแบบสัมพัทธ์ซึ่งจะทำให้ไม่เป็นระเบียบและทำให้การจัดวางไม่สะดวกในการรักษา

ในบทความนี้เราจะบอกคุณ ทรัพย์สินคืออะไร ลอย และผลกระทบต่อองค์ประกอบในบริบทเฉพาะอย่างไร... นอกจากนี้เราจะเน้นความแตกต่างบางประการที่อาจเกิดขึ้นกับคุณสมบัตินี้ในเบราว์เซอร์ที่ใช้บ่อยที่สุด สุดท้ายนี้เราจะสาธิตการใช้งานจริงหลายประการของคุณสมบัติ ลอย... นอกจากนี้ควรให้การอภิปรายที่ครอบคลุมและทั่วถึงเกี่ยวกับคุณสมบัตินี้และผลกระทบต่อการพัฒนา CSS

นิยามและไวยากรณ์ของคุณสมบัติ CSS Float

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

ในภาพด้านบนคือส่วน“ ผู้อ่านไซต์” ของนิตยสาร. net ซึ่งมีรูปถ่ายของผู้อ่าน 3 รูปจัดชิดซ้ายในคอลัมน์โดยมีข้อความล้อมรอบรูปภาพ นี่เป็นแนวคิดพื้นฐานที่อยู่เบื้องหลังคุณสมบัติ float ในเค้าโครง CSS และแสดงให้เห็นถึงวิธีหนึ่งที่ใช้ในการออกแบบตาราง

ประสิทธิผลของการใช้โฟลตในเลย์เอาต์แบบหลายคอลัมน์อธิบายโดยดักลาสโบว์แมนในปี 2547 ในการนำเสนอแบบคลาสสิกของเขา No More Tables:

Bowman อธิบายหลักการที่อยู่เบื้องหลังเค้าโครงแบบไม่ใช้สเปรดชีตโดยใช้ไซต์เก่าของ Microsoft เป็นข้อมูลอ้างอิง Float ถูกนำมาใช้อย่างชัดเจนในการออกแบบใหม่จำลองของมาร์กอัปของ Microsoft

ไวยากรณ์

คุณสมบัติ Float สามารถรับค่าใดค่าหนึ่งจาก 4 ค่า ได้แก่ ซ้าย (ซ้าย) ขวา (ขวา) ไม่มีการจัดแนว (ไม่มี) และสืบทอด (สืบทอด) ประกาศตามที่แสดงในโค้ดด้านล่าง:

#sidebar (ลอย: ซ้าย;)

#sidebar (

ลอย: ซ้าย;

ค่าที่ใช้บ่อยที่สุดคือซ้ายและขวา ไม่มีหรือค่าลอยเริ่มต้นสำหรับองค์ประกอบใด ๆ ในหน้า HTML เป็นค่าเริ่มต้น ค่าสืบทอดซึ่งสามารถนำไปใช้กับคุณสมบัติ CSS เกือบทั้งหมดใช้ไม่ได้ในเวอร์ชัน Internet Explorerได้แก่ 7.

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

โดยทั่วไปองค์ประกอบลอยควรมี กำหนดความกว้างอย่างชัดเจน (เว้นแต่จะเป็นองค์ประกอบที่ถูกแทนที่เช่นรูปภาพ) เพื่อให้แน่ใจว่า float ทำงานตามที่คาดไว้และช่วยหลีกเลี่ยงปัญหาในบางเบราว์เซอร์

#sidebar (ลอย: ซ้าย; ความกว้าง: 350px;)

#sidebar (

ลอย: ซ้าย;

ความกว้าง: 350px;

คุณสมบัติขององค์ประกอบลอย

ด้านล่างนี้เป็นรายการลักษณะการทำงานขององค์ประกอบลอยตามข้อกำหนด CSS2:

กล่องลอยด้านซ้ายจะหักล้างซ้ายไปที่ขอบด้านซ้าย (หรือขอบขอบถ้าไม่มีขอบ) แตะขอบของเนื้อหาของกล่องหรือขอบของกล่องลอยอื่น

หากขนาดของบล็อกลอยเกินพื้นที่แนวนอนที่มีอยู่บล็อกลอยจะถูกเลื่อนลง

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

ขอบของบล็อกลอยจะไม่ชิดขอบของบล็อกที่อยู่ติดกัน

องค์ประกอบราก ( ) ไม่สามารถลอยได้

องค์ประกอบแบบอินไลน์ที่ลอยจะถูกแปลงเป็นองค์ประกอบบล็อก

ลอยในทางปฏิบัติ

กรณีการใช้งานที่ใช้บ่อยที่สุดสำหรับคุณสมบัติลอยคือภาพลอยที่มีการตัดข้อความ ตัวอย่างเช่น:

Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.

Donec non enim ใน turpis pulvinar อำนวยความสะดวก Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. นัมดุยไมล์, tincidunt quis, พอร์ตเทอร์สะสม, อำนวยความสะดวกลูคัส, เมตัส

CSS ที่ใช้กับรูปภาพในช่องด้านบนมีลักษณะดังนี้:

img (float: left; margin: 0 15px 5px 0; border: solid 1px #bbb;)

img (

ลอย: ซ้าย;

ระยะขอบ: 0 15px 5px 0;

เส้นขอบ: ทึบ 1px #bbb;

คุณสมบัติเดียวที่สามารถบรรลุผลนี้คือคุณสมบัติลอย คุณสมบัติอื่น ๆ (ขอบและขอบ) มีไว้เพื่อเหตุผลด้านความสวยงาม องค์ประกอบอื่น ๆ ในบล็อก (แท็ก

ด้วยข้อความ) ไม่จำเป็นต้องมีสไตล์ใด ๆ

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

กล่องนี้ลอยอยู่ทางซ้าย

นี้

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

ในตัวอย่างข้างต้น

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

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

การล้างลอย

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

มาดูตัวอย่างทั่วไปกัน - ส่วนท้ายล้อมรอบด้านขวาของมาร์กอัป 2 โคลน:

คอลัมน์ทางซ้ายลอยไปทางซ้าย

หากคุณดูที่หน้า IE6 และ IE7 คุณจะไม่พบปัญหาใด ๆ คอลัมน์ซ้ายและขวาอยู่ในตำแหน่งและส่วนท้ายอยู่ที่ด้านล่าง แต่ใน Firefox, Opera, Safari และ Chrome คุณจะเห็นสไลด์ส่วนท้ายผิดตำแหน่ง สิ่งนี้เกิดจากการใช้ลอยกับคอลัมน์ นี่เป็นพฤติกรรมที่ถูกต้องแม้ว่าจะเป็นปัญหามากกว่าก็ตาม ในการแก้ปัญหานี้เราใช้คุณสมบัติที่ชัดเจนข้างต้นโดยเทียบกับส่วนท้าย:

#footer (ชัดเจน: ทั้งคู่;)

#footer (

ชัดเจน: ทั้งสอง;

ผลลัพธ์แสดงไว้ด้านล่าง:

คอลัมน์ทางซ้ายลอยไปทางซ้าย

คอลัมน์ทางขวาก็ลอยไปทางซ้าย

คุณสมบัติที่ชัดเจนจะล้างเฉพาะองค์ประกอบที่ลอยดังนั้นการใช้ clear: ทั้งสองคอลัมน์จะไม่ทำให้ส่วนท้ายเลื่อนลงเนื่องจากส่วนท้ายไม่ใช่องค์ประกอบที่ลอย

คุณสมบัติที่ชัดเจนจะล้างเฉพาะองค์ประกอบที่ลอยเท่านั้น การใช้ clear คือคอลัมน์ทั้งสองจะไม่เว้นส่วนท้ายเนื่องจากไม่ใช่องค์ประกอบที่ลอย

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

การล็อกพาเรนต์

คุณลักษณะที่พบบ่อยที่สุดอย่างหนึ่งของมาร์กอัปแบบลอยคือ "ดรอปเอาต์" ของพาเรนต์ นี่แสดงให้เห็นในตัวอย่างด้านล่าง:

ที่อยู่อาศัยของ Pellentesque morbi tristique senectus et netus et มาเลซัวดาเป็นที่อยู่อาศัยของ ac turpis egestas Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante Donec eu libero นั่ง amet quam egestas semper.

โปรดสังเกตว่าด้านล่างของรูปภาพที่ลอยอยู่จะปรากฏนอกระดับบนสุด พาเรนต์ไม่ได้ขยายอย่างเต็มที่เพื่อให้มีภาพลอย นี่เป็นเพราะสิ่งที่เราพูดถึงก่อนหน้านี้: องค์ประกอบที่ลอยอยู่นอกโฟลว์ตามธรรมชาติของเอกสารแม้ว่าองค์ประกอบทั้งหมดของบล็อกจะแสดง แต่องค์ประกอบที่ลอยไม่อยู่ที่นั่น นี่ไม่ใช่ข้อบกพร่องของ CSS ทุกอย่างเป็นไปตามข้อกำหนดของ CSS เบราว์เซอร์ทั้งหมดทำเช่นเดียวกันในตัวอย่างนี้ ฉันต้องบอกว่าในตัวอย่างนี้การเพิ่มความกว้างของคอนเทนเนอร์สามารถป้องกันปัญหาใน IE ได้ แต่ปัญหาจะต้องได้รับการแก้ไขสำหรับ Firefox, Opera, Safari หรือ Chrome ด้วย

โซลูชันที่ 1: ลอยสำหรับภาชนะ

วิธีที่ง่ายที่สุดในการแก้ปัญหานี้คือลอยองค์ประกอบหลัก:

ที่อยู่อาศัยของ Pellentesque morbi tristique senectus et netus et มาเลซัวดาเป็นที่อยู่อาศัยของ ac turpis egestas Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante Donec eu libero นั่ง amet quam egestas semper.

ตอนนี้คอนเทนเนอร์ขยายออกเพื่อรองรับลูก ๆ ทั้งหมด ขออภัยการแก้ไขนี้จะใช้ได้ในบางกรณีเท่านั้นเนื่องจากพาเรนต์แบบลอยตัวอาจมีผลกระทบที่ไม่ต้องการกับเค้าโครงของคุณ

โซลูชันที่ 2: การเพิ่มมาร์กอัปเพิ่มเติม

นี่เป็นวิธีที่เลิกใช้แล้ว แต่เป็นตัวเลือกที่ง่าย เพียงเพิ่มองค์ประกอบพิเศษที่ด้านล่างของคอนเทนเนอร์และ "ล้าง" นี่คือวิธีที่ HTML จะดูแลหลังจากใช้วิธีนี้:

XHTML

ที่อยู่อาศัยของ Pellentesque morbi tristique senectus et netus et มาเลซัวดาเป็นที่อยู่อาศัยของ ac turpis egestas Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante Donec eu libero นั่ง amet quam egestas semper.

"//media.smashingmagazine.com/cdn_smash/wp-content/uploads/2009/10/lifesaver.jpg"width \u003d "200" height \u003d "222" alt \u003d "" /\u003e

ที่อยู่อาศัยของ Pellentesque morbi tristique senectus et netus et มาเลซัวดาเป็นที่อยู่อาศัยของ ac turpis egestas Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante Donec eu libero นั่ง amet quam egestas semper.

และด้วยเหตุนี้ CSS จึงถูกนำไปใช้กับองค์ประกอบใหม่:

Clearfix (ชัดเจน: ทั้งคู่;)

Clearfix (

ชัดเจน: ทั้งสอง;

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

โซลูชันที่ 3: องค์ประกอบหลังหลอก

The: after pseudo-element เพิ่มองค์ประกอบให้กับเพจ HTML ที่แสดงผล เทคนิคนี้ถูกนำมาใช้อย่างกว้างขวางเพื่อแก้ปัญหาการเคลียร์ลอย นี่คือลักษณะของ CSS:

Clearfix: after (เนื้อหา: "."; Display: block; height: 0; clear: both; visibility: hidden;)

Clearfix: หลังจาก (

เนื้อหา: "." ;

แสดง: บล็อก;

ความสูง: 0;

ชัดเจน: ทั้งสอง;

ทัศนวิสัย: ซ่อนอยู่;

คลาส CSS“ clearfix” ใช้กับคอนเทนเนอร์ใด ๆ ที่ลอยเด็กและไม่ขยายเพื่อรวมไว้

แต่วิธีนี้ใช้ไม่ได้กับ Internet Explorer ก่อนเวอร์ชัน 7 ดังนั้นสำหรับ IE คุณต้องใช้หนึ่งในตัวเลือกต่อไปนี้:

Clearfix (display: inline-block;) Clearfix (ซูม: 1;)

Clearfix (

แสดง: อินไลน์บล็อก;

Clearfix (

ซูม: 1;

ขึ้นอยู่กับประเภทของปัญหาคุณกำลังจัดการกับหนึ่งในสองวิธีที่จะแก้ไขปัญหาใน Internet Explorer ควรสังเกตว่าคุณสมบัติการซูมไม่ใช่คุณสมบัติมาตรฐานของ Microsoft ดังนั้น CSS ของคุณจะไม่ถูกต้อง

เนื่องจาก: after pseudo-element ไม่ทำงานใน IE6 / 7 เราจึงได้โค้ดที่ป่องและยุ่งยากเล็กน้อยและจำเป็นต้องใช้สไตล์เพิ่มเติมที่ไม่สามารถใช้ได้กับ IE เท่านั้นดังนั้นวิธีนี้จึงไม่ใช่วิธีที่ดีที่สุด แต่อาจเป็นวิธีที่ดีที่สุดที่เราพิจารณา ยัง.

โซลูชันที่ 4: คุณสมบัติล้น

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

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

// การแก้ไขนี้มีไว้สำหรับ IE6 เท่านั้น .clearfix (ความสูง: 1%; ล้น: มองเห็นได้;)

// การแก้ไขนี้มีไว้สำหรับ IE6 เท่านั้น

Clearfix (

ความสูง: 1%;

ล้น: มองเห็นได้;

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

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

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

ลอยข้อบกพร่องที่เกี่ยวข้องใน Internet Explorer

ในช่วงหลายปีที่ผ่านมามีบทความมากมายที่โพสต์บนเว็บเกี่ยวกับข้อผิดพลาดของ float ที่พบบ่อยในมาร์กอัป CSS พวกเขาทั้งหมดไม่น่าแปลกใจที่จัดการกับปัญหาเฉพาะของ Internet Explorer ด้านล่างนี้คุณจะพบรายการลิงก์ไปยังบทความจำนวนมากที่กล่าวถึงปัญหาที่เกี่ยวข้องกับโฟลต:

การเปลี่ยนคุณสมบัติ float ด้วย JavaScript

ในการเปลี่ยนค่า CSS ใน JavaScript คุณต้องเข้าถึงสไตล์ของออบเจ็กต์โดยการแปลงคุณสมบัติ CSS ที่ต้องการเป็น "Camel case" ตัวอย่างเช่นคุณสมบัติ CSS“ margin-left” จะกลายเป็น marginLeft คุณสมบัติสีพื้นหลังจะกลายเป็น BackgroundColor และอื่น ๆ แต่ด้วยคุณสมบัติ float นั้นแตกต่างออกไปเนื่องจากคำว่า float ถูกสงวนไว้ใน JavaScript แล้ว ดังนั้นสิ่งต่อไปนี้จะผิด:

สไตล์ styleFloat \u003d "ซ้าย";

// สำหรับเบราว์เซอร์อื่น ๆ ทั้งหมด

myDiv สไตล์. cssFloat \u003d "ซ้าย";

การใช้ Float ในทางปฏิบัติ

Floats สามารถใช้กับงานเลย์เอาต์ CSS ได้หลากหลาย มีการอธิบายตัวอย่างบางส่วนไว้ที่นี่

2 คอลัมน์ความกว้างคงที่

3 คอลัมน์เค้าโครงความสูงเท่ากัน

ภาพลอยพร้อมชื่อเรื่อง

เช่นเดียวกับที่เราพูดถึงก่อนหน้านี้ใน“ Float in Practice” Max Design อธิบายถึงวิธีการลอยรูปภาพด้วยส่วนหัวเพื่อให้ข้อความล้อมรอบได้อย่างเป็นธรรมชาติ

การนำทางแนวนอนพร้อมรายการที่ไม่ได้เรียงลำดับ

คุณสมบัติ float เป็นองค์ประกอบหลักในการเข้ารหัสแถบการนำทางแนวนอนที่ใช้สไปรท์ Chris Spooner จาก Line25 อธิบายถึงวิธีการสร้าง Menu of Awesomeness ที่แท็ก

  • การถือปุ่มนำทางใช้ float: left:

    เพื่อแสดงให้เห็นถึงความสำคัญของคุณสมบัติ float ในตัวอย่างนี้นี่คือภาพหน้าจอของภาพเดียวกันหลังจากใช้ firebug เพื่อลบ float: left:

    แกลเลอรีภาพถ่ายตามตาราง

    การใช้คุณสมบัติ float อย่างง่าย ๆ คือการลอย: ปล่อยชุดภาพถ่ายที่มีอยู่ในรายการที่ไม่เรียงลำดับซึ่งจะได้ผลลัพธ์เช่นเดียวกับสิ่งที่คุณอาจเห็นในเค้าโครงตาราง

    หน้าผลิตภัณฑ์ของ Foremost Canada (ดูภาพด้านบน) แสดงผลิตภัณฑ์ในรูปแบบกริดถัดจากแถบด้านข้าง ภาพถ่ายจะแสดงเป็นรายการที่ไม่เรียงลำดับพร้อมคุณสมบัติลอยสำหรับทุกคน

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

    หน้าฟูกของ Paragon Furniture (ดูภาพด้านบน) มีอีกตัวอย่างหนึ่งของหน้าผลิตภัณฑ์โดยใช้รายการที่ไม่เรียงลำดับพร้อมแท็กลอย

  • .

    หน้าผลการค้นหาของ iStockphoto (ดูภาพด้านบน) ยังมีตารางของรูปถ่ายที่มีโครงสร้างซึ่งรูปถ่ายจะมี float: left

    แท็กไม่ใช่
  • แท็ก

    การจัดตำแหน่ง ฟิลด์ที่มีปุ่ม

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

    คุณสมบัติ Float เป็นทรัพย์สินที่ทรงพลังและมีประสิทธิภาพสำหรับนักพัฒนาเว็บ HTML และ CSS ในทางกลับกันอาจเป็นเรื่องที่น่าหงุดหงิดและสับสนหากคุณไม่เข้าใจวิธีการทำงานอย่างเต็มที่

    แปลบทความ CSS ลอย 101... alistapart.com ต้นฉบับ

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

    เราเห็นการลอยตัวทุกวันในโลกสิ่งพิมพ์เมื่อเราดูบทความในนิตยสารที่มีรูปภาพทางซ้ายหรือขวาและมีข้อความอยู่รอบ ๆ ในโลก HTML / CSS ข้อความจะล้อมรอบรูปภาพโดยขึ้นอยู่กับคุณสมบัติลอยที่ใช้กับรูปภาพนั้น การใช้คุณสมบัติ float บนรูปภาพเป็นเพียงตัวอย่างหนึ่งของหลาย ๆ ตัวอย่างเช่นด้วยคุณสมบัติ float เราสามารถสร้างเค้าโครงสองคอลัมน์ยอดนิยมได้ง่ายมาก ในความเป็นจริงคุณสามารถลอยองค์ประกอบใดก็ได้ใน HTML ของคุณ ด้วยการเรียนรู้และทำความเข้าใจการใช้คุณสมบัติโฟลตพร้อมกับคุณสมบัติตำแหน่งคุณจะรู้สึกสบายใจและมั่นใจในการสร้างเลย์เอาต์ใด ๆ

    คำจำกัดความของโฟลต

    เริ่มต้นด้วยการกำหนดว่าคืออะไร ลอย.

    Float เป็นกล่องที่เลื่อนไปทางขวาหรือซ้ายตามแนวปัจจุบัน มากที่สุด ลักษณะที่น่าสนใจ float คือเนื้อหาสามารถไหลไปด้านข้างได้ เมื่อใช้คุณสมบัติ float: left เนื้อหาจะล้อมรอบกล่องลงมาจากด้านขวาและในทำนองเดียวกันกับ float: right, ลงจากด้านซ้าย

    คุณสมบัติ float มี 4 ค่าที่เราสามารถนำไปใช้ได้: left, right, inheritint และ none แต่ละความหมายค่อนข้างอธิบายตัวเองได้ ตัวอย่างเช่นถ้าคุณลอย: ซ้ายไปยังองค์ประกอบองค์ประกอบนั้นจะลอยไปที่เส้นขอบด้านซ้ายสุดของพาเรนต์ และถ้าคุณตั้งค่า float: right องค์ประกอบก็จะย้ายไปทางขวาเช่นเดียวกัน ค่า ihnerit บอกให้องค์ประกอบสืบทอดคุณสมบัติจากพาเรนต์ และค่าสุดท้ายไม่มีเป็นค่าเริ่มต้นและบอกว่าอย่าใช้คุณสมบัติ ลอย ไปยังรายการนี้

    #container (width: 960px; margin: 0 auto;) #content (float: left; width: 660px; background: #fff;) #navigation (float: right; width: 300px; background: #eee;) #footer ( ชัดเจน: ทั้งสอง; พื้นหลัง: #aaa; padding: 10px;)

    #footer ของเราติดอยู่ใต้ # บล็อกการนำทาง สิ่งนี้เกิดขึ้นเนื่องจากมีที่สำหรับ #footer ใต้บล็อก #navigation และนี่คือพฤติกรรมที่ถูกต้องสำหรับโฟลว์ปกติของเลย์เอาต์บล็อก แต่นี่ไม่ใช่สิ่งที่เราต้องการอย่างแน่นอนใช่หรือไม่? ฉันคิดว่าคุณเห็นความสัมพันธ์ระหว่าง float และชัดเจนแล้วและเข้าใจว่าพวกเขาเสริมกันอย่างไร

    หากคุณมีอาการหมกมุ่นเหมือนฉันคุณอาจสังเกตเห็นในตัวอย่าง F ความสูงที่แตกต่างกันของคอลัมน์ # เนื้อหาและ # การนำทาง มีวิธีแก้ไขหลายวิธี แต่อยู่นอกเหนือขอบเขตของบทความนี้ ฉันขอแนะนำให้อ่าน Faux Columns โดย Dan Cederholm เพื่อเรียนรู้วิธีสร้างบล็อกให้มีความสูงเท่ากันโดยไม่คำนึงถึงเนื้อหาภายใน

    ลอยก่อน

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

    ที่นี่เรามีบล็อกเล็ก ๆ ที่มีลอย: ภาพด้านขวาพร้อมข้อความล้อมรอบ CSS ของเรามีลักษณะดังนี้:

    #container (width: 280px; margin: 0 auto; padding: 10px; background: #aaa; border: 1px solid # 999;) img (float: right;)

    #container พาเรนต์ของเรามีความกว้างแคบและทำให้องค์ประกอบลอย (ภาพ) ของเราอยู่ภายในขอบ โค้ด HTML ของเรามีลักษณะดังนี้:


    ตัวอย่างนี้ทำให้เราได้ผลลัพธ์ที่ต้องการ แต่ถ้าเราใช้และจัดเรียงองค์ประกอบบางอย่างใน HTML ใหม่ล่ะ? ในตัวอย่าง I ฉันย้าย หลังข้อความ

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


    ผลลัพธ์ของเราไม่เป็นไปตามที่เราคาดหวัง ภาพของเราย้ายไปทางขวา แต่ไม่ได้อยู่ที่มุมบนตามที่เราต้องการอีกต่อไป แต่ตกลงมาด้านล่างย่อหน้า ที่แย่กว่านั้นคือมันยื่นออกมาจากด้านล่างของ #container parent ของเรา เกิดอะไรขึ้น?

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

    ประการที่สอง. สาเหตุที่ภาพดูเหมือนจะยื่นออกมาที่ด้านล่างของบล็อก #container ของเรานั้นเกี่ยวข้องกับสิ่งที่เรียกว่าการยุบ ลองพูดคุยเกี่ยวกับการยุบและตัวเลือกการแก้ปัญหา

    การยุบ

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

    ตอนนี้เรามาลองแก้ไขด้วย โดยใช้ CSS แทนที่จะเพิ่มมาร์กอัป HTML เพิ่มเติมในเอกสารของเราเหมือนที่เคยทำมาก่อน มีวิธีการที่อนุญาตให้พาเรนต์ "ใช้" คุณสมบัติที่ชัดเจนหลังจากองค์ประกอบที่ลอยทั้งหมด ในการดำเนินการนี้ให้ใช้คุณสมบัติ CSS มากเกินไปโดยมีค่าที่ซ่อนอยู่ โปรดทราบว่าคุณสมบัติล้นไม่ได้มีไว้สำหรับการใช้งานนี้และอาจทำให้เกิดปัญหาบางอย่างเช่นการซ่อนเนื้อหาหรือลักษณะของแถบเลื่อนที่ไม่ต้องการ อย่างไรก็ตามสำหรับตัวอย่างของเราเราจะยังคงใช้คุณสมบัติ overflow: hidden กับ # คอนเทนเนอร์หลักของเรา:

    #container (overflow: hidden; width: 260px; margin: 0 auto; padding: 10px 0 10px 10px; background: #aaa; border: 1px solid # 999;)

    และในที่สุดก็, Eric Meyer อธิบายวิธีแก้ไขปัญหาที่สามในบทความของเขาที่มีลอย ตาม CSS Spec 2.1:

    องค์ประกอบที่มีคุณสมบัติลอยจะขยายขอบเขตขององค์ประกอบที่ลอยอยู่ภายใน

    ดังนั้นด้วยการใช้คุณสมบัติ float กับ #container คอนเทนเนอร์ของเราจะมีรูปภาพและย่อหน้าของเราคล้ายกับวิธีการที่อธิบายไว้ข้างต้น

    ท้ายที่สุดแล้วการตัดสินใจทั้งหมดนี้ก็เหมือนกัน ทำให้องค์ประกอบหลักนับองค์ประกอบลอยในสตรีม แต่ละวิธีมีข้อดีและประโยชน์ของตัวเอง คุณต้องเข้าใจแต่ละข้อแล้วใช้สิ่งที่เหมาะกับสถานการณ์ของคุณมากที่สุด

    สรุป

    ด้วยการใช้คุณสมบัติลอยคุณสามารถปรับปรุงเทคนิคการจัดวางของคุณได้อย่างมาก การทำความเข้าใจว่าคุณสมบัตินี้ทำงานอย่างไรและสิ่งที่ส่งผลต่อพฤติกรรมของมันจะทำให้คุณมีรากฐานที่มั่นคงในการใช้โฟลตอย่างมีประสิทธิภาพ

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

    โฟลตคืออะไร?

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



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



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

    การตั้งค่าคุณสมบัติ ลอย สำหรับองค์ประกอบที่ใช้ CSS มีลักษณะดังนี้:

    #sidebar (ลอย: ขวา;)

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

    ลูกลอยใช้ทำอะไร?

    นอกจากตัวอย่างง่ายๆของการตัดข้อความรอบ ๆ รูปภาพแล้ว ลอย สามารถใช้เพื่อสร้างเค้าโครงเว็บ



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



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


    รีเซ็ตการห่อ

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



    ในตัวอย่างด้านบนแถบด้านข้างลอยอยู่ทางขวาของบล็อกเนื้อหาหลัก ส่วนท้ายได้ย้ายไปยังจุดว่างใต้แถบด้านข้างโดยล้อมรอบบล็อกเนื้อหาหลัก ในการแก้ไขปัญหานี้คุณต้องระบุค่าสำหรับ clear: คุณสมบัติทั้งสองของ "ส่วนท้าย" เพื่อ "ล้าง" โฟลว์รอบคอลัมน์ทั้งสอง

    #footer (ชัดเจน: ทั้งคู่;)

    ทรัพย์สิน ชัดเจน มีสี่ความหมาย ทั้งสอง ใช้เพื่อรีเซ็ตการห่อในทั้งสองทิศทาง ซ้าย และ ขวา ใช้เพื่อรีเซ็ตทิศทางเดียว - ซ้ายหรือขวาตามลำดับ ไม่มี เป็นค่าเริ่มต้น สืบทอด อาจเป็นค่าที่ห้า แต่ไม่ได้รับการสนับสนุนอย่างน่าประหลาดใจ Internet Explorer... การรีเซ็ตเฉพาะโฟลว์ซ้ายหรือขวานั้นค่อนข้างหายาก แต่ก็มีประโยชน์ในทางปฏิบัติ


    การล่มสลายที่ยิ่งใหญ่

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



    แต่ทางเลือกอื่นในการล่มสลายนั้นเลวร้ายยิ่งกว่า พิจารณาสถานการณ์ต่อไปนี้:



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

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

    ตัดเทคนิคการยกเลิก

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

    วิธีการบล็อกที่ว่างเปล่า

    มันเป็นบล็อกที่ว่างเปล่าอย่างแท้จริง

    ... บางครั้งคุณสามารถพบองค์ประกอบ
    หรือองค์ประกอบสุ่มอื่น ๆ แต่ div เป็นสิ่งที่พบบ่อยที่สุดเนื่องจากไม่มีสไตล์เริ่มต้นในเบราว์เซอร์ไม่มีฟังก์ชันพิเศษและไม่น่าจะอยู่ในสไตล์ CSS ทั่วไป วิธีนี้ถูกปฏิเสธโดยผู้บริสุทธิ์ทางความหมายเนื่องจากการมีอยู่ไม่มีความหมายตามบริบทบนหน้าเว็บและจะอยู่ที่นั่นสำหรับ ลักษณะ... แน่นอนในแง่ที่เข้มงวดพวกเขาพูดถูก แต่เขาทำงานของเขาและไม่ทำร้ายใคร

    วิธีการล้น

    ขึ้นอยู่กับการระบุคุณสมบัติ CSS ล้น สำหรับองค์ประกอบหลัก หากคุณสมบัตินี้ถูกตั้งค่าเป็น อัตโนมัติ หรือ ซ่อนอยู่ สำหรับองค์ประกอบหลักนั้นจะขยายหลังจากองค์ประกอบที่ลอยซึ่งจะล้างการลอยตัวรอบ ๆ อย่างมีประสิทธิภาพสำหรับองค์ประกอบที่ตามมา วิธีนี้มีความสวยงามทางความหมายเนื่องจากไม่ต้องใช้องค์ประกอบเพิ่มเติม อย่างไรก็ตามอย่างที่คุณเห็นเราได้เพิ่มไฟล์ div เพื่อใช้วิธีนี้ซึ่งเทียบเท่ากับการใช้บล็อกว่างที่ไม่ใช่ความหมายและมีความยืดหยุ่นน้อยกว่า นอกจากนี้ยังควรจำไว้ว่าคุณสมบัติ ล้น ไม่ได้มีไว้เพื่อปิดใช้งานการห่อ ระวังอย่าซ่อนเนื้อหาโดยไม่ได้ตั้งใจหรือทำให้แถบเลื่อนที่ไม่ต้องการ

    วิธีทำความสะอาดง่าย.

    ใช้ CSS pseudo-selector (: after) เพื่อลบการตัด แทนที่จะใช้ทรัพย์สิน ล้น สำหรับองค์ประกอบหลักให้ตั้งค่าคลาสเพิ่มเติมเช่น "clearfix" และใช้สไตล์ CSS ต่อไปนี้:

    Clearfix: after (เนื้อหา: "."; Visibility: hidden; display: block; height: 0; clear: both;)

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

    สถานการณ์ที่แตกต่างกันต้องใช้วิธีการต่างๆในการรีเซ็ตลูกลอย ยกตัวอย่างเช่นตารางของบล็อกประเภทต่างๆ



    เพื่อการรวมภาพที่ดีขึ้นของบล็อกที่คล้ายกันเราต้องเริ่มบรรทัดใหม่เมื่อสีเปลี่ยนไป เราสามารถใช้วิธี overflow หรือ light clear ถ้าแต่ละกลุ่มสีมีพาเรนต์ หรือใช้วิธีบล็อกว่างระหว่างกลุ่ม สามบล็อกหลักที่ไม่เคยมีมาก่อนหรือสามบล็อกว่างที่ไม่มีอยู่ก่อน ขึ้นอยู่กับคุณที่จะตัดสินใจว่าวิธีใดดีที่สุด


    ปัญหาเกี่ยวกับองค์ประกอบลอย

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

    กดเป็นอาการที่องค์ประกอบภายในกล่องลอยมีความกว้างกว่ากล่องนี้ (โดยปกติจะเกิดขึ้นกับรูปภาพ) เบราว์เซอร์ส่วนใหญ่จะแสดงส่วนที่ยื่นออกมาขององค์ประกอบที่ลอยอยู่ แต่จะไม่ส่งผลต่อการออกแบบ IE จะขยายกล่องลอยและมักจะมีผลกระทบอย่างมากกับเค้าโครง ตัวอย่างทั่วไปคือรูปภาพที่ยื่นออกมาจากบล็อกเนื้อหาหลักโดยดันแถบด้านข้างลง



    ตัดสินใจเร็ว ปัญหา: ใช้ overflow: hidden; เพื่อตัดส่วนเกินออก

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

    เราได้ระยะขอบซ้ายเข้ามา 40 พิกเซล., แทน 20 พิกเซล.

    การแก้ปัญหาอย่างรวดเร็ว: set display: อินไลน์สำหรับบล็อกลอยและไม่ต้องกังวลว่าองค์ประกอบจะยังคงเป็นแบบบล็อก

    3 Pixel Jog (3px Jog)... สาระสำคัญของจุดบกพร่องนี้คือข้อความที่อยู่ถัดจากองค์ประกอบที่ลอยอยู่นั้นถูกแทนที่ด้วยพิกเซลสามพิกเซลอย่างแปลกประหลาดราวกับว่าอยู่ภายใต้อิทธิพลของสนามพลังที่อยู่รอบองค์ประกอบที่ลอยอยู่ การแก้ปัญหาอย่างรวดเร็ว: กำหนดความกว้างและความสูงของข้อความที่ได้รับผลกระทบ

    IE7 ปรากฏขึ้น จุดบกพร่องของขอบล่างเมื่อพาเรนต์ลอยอยู่และพาเรนต์ลอยด้วย ขอบล่างของเด็กจะถูกละเว้นโดยองค์ประกอบของบรรพบุรุษ การแก้ปัญหาอย่างรวดเร็ว: ใช้ padding-bottom กับ parent แทนที่จะใช้ margin-bottom ของเด็ก

    องค์ประกอบทั้งหมดที่ปรากฏในหน้า HTML ไม่มีอะไรมากไปกว่ารูปสี่เหลี่ยม และโดยทั่วไปมีเพียงสองประเภท:

    1. บล็อก (blok) ซึ่งใช้ความกว้างทั้งหมดที่พวกเขาอยู่และแยกออกจากสิ่งที่อยู่ด้านบนและด้านล่าง ตัวอย่างเช่นแท็ก DIV, P, H
    2. ในตัว (อินไลน์) ตัวอย่างเช่น SPAN, STRONG, EM, A และ IMG

    ตาราง.

    บทบาทของคุณสมบัติเพิ่มขึ้นหลังจากเปลี่ยนจากเค้าโครงตารางเป็นรูปแบบ Div เนื่องจาก float ช่วยให้นักพัฒนาเว็บสามารถรวมคอลัมน์ได้โดยไม่ต้องใช้ตาราง สามารถรับค่า ขวา, ซ้าย, แต่ไม่ ศูนย์.

    ก่อนหน้านี้เค้าโครงเพจทำได้โดยใช้ ตาราง.

    บทบาทของคุณสมบัติลอยเพิ่มขึ้นตั้งแต่การเปลี่ยนจากเค้าโครงตารางเป็นเค้าโครง div เนื่องจาก float ช่วยให้นักพัฒนาเว็บรวมคอลัมน์โดยไม่ต้องใช้ตาราง สามารถรับค่า ขวา, ซ้าย, แต่ไม่ ศูนย์.

    การใช้คุณสมบัติการแสดงผล: บล็อก; หรือแสดง: อินไลน์; เราจะแปลงรูปสี่เหลี่ยมผืนผ้าประเภทหนึ่งเป็นอีกประเภทหนึ่ง ตัวอย่างเช่นรายการ UL ที่มี LI จำนวนหนึ่งสามารถจัดเรียงในแนวนอน:

    • PARAGRAPH
    • PARAGRAPH
    • PARAGRAPH
    • PARAGRAPH
    • PARAGRAPH
    • PARAGRAPH

    เมื่อใช้คุณสมบัติ float สี่เหลี่ยมผืนผ้าจะปิดกั้น แต่มีคุณสมบัติพิเศษคือความกว้างจะไม่กระจายไปทั่วเนื้อหาทั้งหมด ตัวอย่างเช่นส่วนหัว h3 มีลักษณะดังนี้:

    นี่คือ HEADER h3

    หากเราตั้งค่า display: inline; property ไว้เราจะเห็นว่าไม่เพียง แต่ความกว้างเท่านั้นที่เปลี่ยนไป แต่ยังรวมถึงระยะทางด้านบนและด้านล่างขององค์ประกอบด้วย:

    นี่คือ HEADER h3

    แต่ถ้าฉันต้องการวางตำแหน่งองค์ประกอบไปทางขวาและเพิ่ม text-align: right คราวนี้เราจะได้รับ:

    นี่คือ HEADER h3

    และค่อนข้างแตกต่างกันถ้า float: right;. โปรดทราบว่าระยะห่างด้านบนและด้านล่างขององค์ประกอบยังคงไม่เปลี่ยนแปลง:

    นี่คือ HEADER h3

    องค์ประกอบถัดจากชื่อจะทำงานอย่างไร

    ข้อความด้านบนยังคงไม่เปลี่ยนแปลงเนื่องจากไม่สามารถวางองค์ประกอบที่ลอยอยู่เหนือเส้นที่สร้างขึ้นได้

    นี่คือ HEADER h3

    แต่ข้อความสีแดงจะอยู่ใต้หัวข้อและจะล้อมรอบโดยไม่ต้องใส่สไตล์เพิ่มเติม และมีเพียงความสูง h3 เท่านั้นที่จะเอาชนะได้หน้าจะกลับสู่ลำดับตามธรรมชาติ


    A B C D องค์ประกอบที่ลอยอยู่จำนวนมากจะเป็นไปตามลำดับของตำแหน่ง

    ในข้อความ ...


    และการจัดตำแหน่งจะทำที่ขอบด้านล่างสุดของตัวอักษรที่อยู่ด้านเดียว


    A B C D ถ้าเราเดินเพื่อให้การไหลรอบองค์ประกอบสิ้นสุดลงด้วย ช่วงเวลาหนึ่ง (จากที่นี่), ใช้คุณสมบัติที่ชัดเจน เราสามารถเพิ่มลงในแท็กว่างได้


    ในการวางสี่เหลี่ยมบล็อกหลาย ๆ อันให้เท่ากันให้มีความกว้างเท่ากัน


    บล็อก 1
    บล็อก 2
    บล็อก 3
    บล็อก 4
    ระยะห่างระหว่างบล็อกอยู่ที่ไหน? หากตั้งค่าไว้องค์ประกอบที่ลอยอยู่จะหมดพื้นที่และจะเลื่อนลง
    บล็อก 1
    บล็อก 2
    บล็อก 3
    บล็อก 4
    ปัญหานี้แก้ไขได้โดยการเพิ่ม DIV อีกหนึ่งรายการ:
    บล็อก 1
    บล็อก 2
    บล็อก 3
    บล็อก 4

    เค้าโครงตารางสะดวกและเข้าใจง่ายซึ่งอาจเป็นสาเหตุที่ทำให้การแสดงผลแบบอะนาล็อก: ตารางปรากฏขึ้น ได้รับรูปร่างเดียวกันโดยมีรหัสน้อยกว่า

    บล็อก 1
    บล็อก 2
    บล็อก 3
    บล็อก 4
    โดยที่ระยะห่างชายแดนกำหนดระยะห่างแนวนอนและแนวตั้งระหว่างเส้นขอบเซลล์

    ตอนนี้คุณสามารถดูวิธีสร้างแกลเลอรีรูปภาพได้ หวังว่าจะไม่มีใครลืม

    ข้อความ ...

    ข้อความ ...


    ลิงค์ไปยังแหล่งที่มา:

    คำอธิบาย

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

    เบราว์เซอร์ประมวลผลโค้ด HTML ของเอกสารโดยเลื่อนจากบนลงล่างเมื่อการประมวลผลโค้ดมาถึงองค์ประกอบแบบลอยเบราว์เซอร์จะวางโค้ดก่อนตามขั้นตอนของเอกสารนั่นคือ ด้านล่างองค์ประกอบที่อยู่ในรหัสเอกสารจากนั้นจะลบองค์ประกอบลอยออกจากโฟลว์ปกติและชดเชยให้ชิดขอบซ้ายหรือขวาขององค์ประกอบหลักมากที่สุด:

    เนื่องจากองค์ประกอบลอยถูกลบออกจากโฟลว์เอกสารองค์ประกอบบล็อกที่เหลือที่อยู่ในโค้ดหลังจากถูกเลื่อนเข้าที่ราวกับว่าองค์ประกอบนี้ไม่มีอยู่

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

    แทนที่จะเป็นบล็อกลอยที่มีเนื้อหาข้อความคุณสามารถสร้างรูปภาพลอยได้ ในกรณีนี้ข้อความจะไหลไปรอบ ๆ รูปภาพ:

    ชื่อเอกสาร

    ใช้คุณสมบัติลอย CSS รูปภาพจะลอยอยู่ทางด้านซ้าย ข้อความที่อยู่ในโค้ด HTML ด้านล่างรูปภาพจะไหลไปรอบ ๆ รูปภาพทางด้านขวาและด้านล่าง



    ลอง "

    สามารถวางองค์ประกอบ float ได้มากกว่าหนึ่งรายการในแถวหากความกว้างขององค์ประกอบหลักอนุญาต หากองค์ประกอบหลักไม่กว้างพอการลอยตัวที่ไม่พอดีกับลอยอื่นจะถูกดันลง

    องค์ประกอบลอยตัวไม่มีผลต่อความสูงของพาเรนต์นั่นคือหากมีคอนเทนเนอร์บางส่วนและมีองค์ประกอบลอยอยู่เท่านั้นความสูงของคอนเทนเนอร์จะเป็นศูนย์ คุณสามารถแก้ปัญหานี้ได้ด้วยวิธีต่อไปนี้:

    1. กำหนดความสูงคงที่ - ในกรณีที่ทราบว่าความสูงของภาชนะควรเป็นเท่าใด
    2. ใช้คุณสมบัติล้นที่มีค่าอัตโนมัติหรือค่าที่ซ่อนอยู่กับคอนเทนเนอร์จากนั้นองค์ประกอบลอยจะถูกนำมาพิจารณาเมื่อคำนวณความสูงของคอนเทนเนอร์ วิธีนี้สามารถใช้ได้เมื่อไม่ทราบล่วงหน้าว่าความสูงของภาชนะควรเป็นเท่าใด

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

    หมายเหตุ: องค์ประกอบตำแหน่งแน่นอนและคงที่จะละเว้นคุณสมบัติลอย คุณสมบัติ float ยังไม่มีผลกับ flexboxes