ดังที่คุณคงทราบแล้วว่า คุณสามารถจัดวางเว็บไซต์โดยใช้ตารางได้ ซึ่งในกรณีนี้ เพจจะถูกแบ่งออกเป็นเซลล์ คุณยังสามารถใช้บล็อกเพื่อวัตถุประสงค์เหล่านี้ได้เมื่อหน้าเว็บไซต์ประกอบด้วยองค์ประกอบแต่ละส่วน
ฉันอาจจะไม่ผิดถ้าฉันบอกว่าปัญหาร้ายแรงสำหรับผู้ดูแลเว็บมือใหม่หลายคนคืองานวางบล็อกในตำแหน่งที่กำหนดบนหน้าเว็บ
ปัญหาหลักประการหนึ่งเมื่อเค้าโครงโดยใช้บล็อกคือการวางตำแหน่ง (การจัดตำแหน่ง) ของบล็อกเดียวกันเหล่านี้
เล็กน้อยเกี่ยวกับเลเยอร์
ฉันคิดว่าหลายท่านเคยได้ยินเกี่ยวกับเรื่องดังกล่าวว่าเป็นเลเยอร์ และตามกฎแล้ว เลเยอร์จะเข้าใจว่าเป็นบล็อกที่ระบุโดยแท็ก
ไม่มีเลเยอร์ใน HTML มันเป็นเพียงอุปมา เมื่อเราพูดถึงเลเยอร์ มันหมายถึงคอนเทนเนอร์ html (องค์ประกอบ) บางตัวที่สามารถวางในตำแหน่งใดตำแหน่งหนึ่งบนหน้าเว็บได้
ความเข้าใจผิดประการที่สองคือ เฉพาะบล็อกที่ระบุโดยแท็กเท่านั้นที่ถูกจัดประเภทเป็นเลเยอร์
) รายการ (
- ) และองค์ประกอบอื่นๆ
- ก่อนอื่น ก่อนที่จะใช้ float กับองค์ประกอบใดๆ เรามาจัดเตรียมเนื้อหาให้กับองค์ประกอบ float เหล่านั้นโดยการเพิ่ม clearfix ให้กับ CSS ของเรา ในไฟล์ main.css ด้านล่างสไตล์กริดของเรา เราจะเพิ่ม clearfix ใต้ชื่อคลาสกลุ่มเหมือนเมื่อก่อน
- ในบรรดาพารามิเตอร์สไตล์มีคุณสมบัติพิเศษสำหรับการวางตำแหน่ง:ซ้าย
- - เพื่อกำหนดระยะห่างเป็นพิกเซลจากขอบด้านซ้ายของหน้าต่าง (พิกัด x)สูงสุด
- - เพื่อกำหนดระยะห่างเป็นพิกเซลจากขอบด้านบนของหน้าต่าง (พิกัด y)ดัชนี z
- ช่วยให้คุณสามารถติดตั้งองค์ประกอบในตำแหน่งหน้าต่างเฉพาะได้ คุณสมบัติตำแหน่งสามารถรับค่าได้สามค่า:แน่นอน - คุณสมบัติที่ระบุซ้าย - เพื่อกำหนดระยะห่างเป็นพิกเซลจากขอบด้านซ้ายของหน้าต่าง (พิกัด x)และ จะวางองค์ประกอบไว้ที่จุดที่มีพิกัดและ เอ็กซ์สัมพันธ์กับมุมซ้ายบนของคอนเทนเนอร์ (วัตถุที่มีองค์ประกอบ) หากถูกกำหนดไว้สำหรับองค์ประกอบภายนอกคอนเทนเนอร์ ต้นกำเนิดของพิกัดจะอยู่ที่มุมซ้ายบนของหน้า โปรดทราบว่าตำแหน่งขององค์ประกอบไม่ได้ขึ้นอยู่กับตำแหน่งของแท็กภายในเอกสาร HTML
- ญาติ- องค์ประกอบจะถูกติดตั้งตามตำแหน่งในข้อความต้นฉบับ ค่านี้ถูกกำหนดไว้ตามค่าเริ่มต้น ตัวอย่างเช่น หากองค์ประกอบอยู่ห่างจากจุดเริ่มต้นของการเลือกในข้อความเอกสารสามบรรทัด ดังนั้นโดยค่าเริ่มต้น คุณสมบัติการวางตำแหน่งจะถือว่าถูกตั้งค่าเป็น ญาติและคุณสมบัติของพิกัด ในบรรดาพารามิเตอร์สไตล์มีคุณสมบัติพิเศษสำหรับการวางตำแหน่ง:และ และ- ค่าเป็นศูนย์ ค่าที่ไม่ใช่ศูนย์ของคุณสมบัติด้านซ้ายและด้านบนระบุการเปลี่ยนแปลงขององค์ประกอบที่สัมพันธ์กับตำแหน่งเดิม
- คงที่- องค์ประกอบจะถูกวางในตำแหน่งที่แน่นอนโดยสัมพันธ์กับพื้นหลัง และจะไม่เคลื่อนที่เมื่อเลื่อนหน้า
- ไม่มี(ไม่มีอะไร) - แม้ว่าองค์ประกอบจะเกินส่วน (พื้นที่ที่จัดสรรไว้) แต่องค์ประกอบจะยังคงแสดงอยู่
- คลิป- ส่วนขององค์ประกอบที่ยื่นออกมาเกินขอบเขตของชิ้นส่วนจะถูกตัดออก
- เลื่อน- จะใช้การเลื่อน
- ในบรรดาพารามิเตอร์สไตล์มีคุณสมบัติพิเศษสำหรับการวางตำแหน่ง:- บล็อกถูกกดไปที่ขอบด้านซ้าย องค์ประกอบที่เหลือจะไหลไปรอบ ๆ ทางด้านขวา
- ขวา- บล็อกถูกกดไปที่ขอบด้านขวา องค์ประกอบที่เหลือจะไหลไปรอบๆ ทางด้านซ้าย
- ไม่มี- บล็อกไม่เคลื่อนที่และอยู่ในตำแหน่งตามคุณสมบัติ ตำแหน่ง.
- ในบรรดาพารามิเตอร์สไตล์มีคุณสมบัติพิเศษสำหรับการวางตำแหน่ง:- บล็อกควรอยู่ใต้บล็อกด้านซ้ายทั้งหมด
- ขวา- บล็อกจะต้องอยู่ด้านล่างบล็อกด้านขวาทั้งหมด
- ทั้งคู่- บล็อกจะต้องอยู่ต่ำกว่าบล็อกลอยทั้งหมด
- ไม่มี- ไม่มีข้อจำกัด นี่เป็นค่าเริ่มต้น
และตอนนี้เกี่ยวกับ โอ้.
ตามที่กล่าวไว้ข้างต้น คุณสามารถกำหนดตำแหน่งขององค์ประกอบ HTML ใดก็ได้ ไม่จำเป็นต้องมีแท็กเสมอไปสำหรับสิ่งนี้
- นอกจากนี้ การใช้แท็กนี้ไม่ได้บังคับให้คุณต้องให้ตำแหน่งใดๆ บนหน้าเว็บ
ความหมายของการใช้บล็อกที่ระบุโดยแท็ก
ลงมาสู่การรวมตัว เพราะคุณสามารถวางองค์ประกอบอื่นๆ ไว้ข้างในได้ (ย่อหน้า รูปภาพ ฯลฯ) สิ่งนี้จะสร้างบล็อกขนาดใหญ่ที่มีเนื้อหาหลากหลาย ซึ่งทำให้ง่ายต่อการวางตำแหน่งบนหน้าเว็บมากกว่าแต่ละองค์ประกอบแยกกัน
การวางตำแหน่งขององค์ประกอบ
การวางตำแหน่งมีสี่ประเภทหลัก:
1. คงที่
2. แน่นอน
3. แก้ไขแล้ว
4. ญาติ)
คงที่
ใช้เป็นตำแหน่งเริ่มต้น ในกรณีนี้เบราว์เซอร์จะดูโค้ด HTML แบ่งออกเป็นองค์ประกอบและเขียนหน้าจากองค์ประกอบเหล่านั้น ผลลัพธ์ที่ได้คือลำดับขององค์ประกอบจำนวนหนึ่ง จะแสดงตามลำดับที่ระบุไว้ในโค้ด html
การใช้พารามิเตอร์ ซ้าย บน ขวา และล่างไม่นำไปสู่ผลลัพธ์ใดๆ
ต้องคำนึงถึงการวางตำแหน่งแบบคงที่เมื่อใช้การวางตำแหน่งแบบสัมพันธ์
แน่นอน
เมื่อใช้การวางตำแหน่งที่แน่นอน พิกัดของมุมซ้ายบนของบล็อกจะถูกระบุ ในกรณีนี้ พิกัดจะถูกนับโดยสัมพันธ์กับตำแหน่งขององค์ประกอบหลัก หากองค์ประกอบหลักคือหน้าต่างเบราว์เซอร์ บล็อกนั้นก็จะอยู่ในแนวสัมพันธ์กัน หากมีองค์ประกอบอื่นที่บล็อกตั้งอยู่ การจัดตำแหน่งจะเกิดขึ้นโดยสัมพันธ์กับองค์ประกอบนี้
ที่ตายตัว
จากชื่อเป็นที่ชัดเจนว่าในกรณีนี้องค์ประกอบได้รับการแก้ไขแล้ว ตั้งอยู่ในตำแหน่งเฉพาะบนหน้าเว็บและไม่ย้ายไปที่ใด การจัดแนวประเภทนี้มักใช้สำหรับป๊อปอัป โดยจะอยู่ตรงกลางและไม่เลื่อนเมื่อคุณเลื่อนหน้า
ญาติ
การวางตำแหน่งประเภทนี้อาจทำได้ยาก ชื่อของมันไม่เหมาะเลย หลายๆ คนสับสนระหว่างการวางตำแหน่งองค์ประกอบแบบสัมพัทธ์และแบบสัมบูรณ์ อาจปรากฏว่าการจัดตำแหน่งสัมพันธ์กับองค์ประกอบหลัก และในกรณีของการวางตำแหน่งที่แน่นอน - สัมพันธ์กับหน้าต่างเบราว์เซอร์ แต่นั่นไม่เป็นความจริง
มีความจำเป็นต้องเข้าใจว่าตำแหน่งขององค์ประกอบในกรณีนี้เกิดขึ้นสัมพันธ์กับตำแหน่งขององค์ประกอบในตำแหน่งคงที่ นี่คือสิ่งที่กล่าวมาข้างต้น
พูดง่ายๆ ก็คือ คุณบอกให้เบราว์เซอร์ย้ายองค์ประกอบจำนวนพิกเซลมากโดยสัมพันธ์กับตำแหน่งที่องค์ประกอบนั้นอยู่ตามค่าเริ่มต้น
มีอีกจุดที่ยาก จะเกิดอะไรขึ้นหากองค์ประกอบหลักมีตำแหน่งที่สัมพันธ์กัน แต่องค์ประกอบที่ซ้อนกันมีตำแหน่งที่แน่นอน ในกรณีนี้ พิกัดขององค์ประกอบลูกจะถูกนับโดยสัมพันธ์กับองค์ประกอบหลัก โดยคำนึงถึงออฟเซ็ตขององค์ประกอบนั้น ถ้ามี
มาสรุปกัน
จึงมีทรัพย์สมบัติ ตำแหน่ง- คุณสมบัตินี้รับได้ 4 ค่า คงที่ สัมบูรณ์ คงที่ และสัมพันธ์กัน- ค่าเริ่มต้นคือ คงที่.
เมื่อคุณระบุพิกัดสำหรับองค์ประกอบ คุณต้องบอกเบราว์เซอร์ด้วยว่าควรคำนวณพิกัดเหล่านั้นอย่างไร เราต้องให้จุดเริ่มต้นแก่เขา
อย่าลืมว่าหากไม่มีทรัพย์สิน ตำแหน่งพิกัดจะไม่ถูกนำมาพิจารณา บล็อกจะยังคงอยู่ในตำแหน่งเดิมในตำแหน่งคงที่
ตอนนี้เรามาดูวิธีการตั้งค่าพิกัดกัน
เพื่อวัตถุประสงค์เหล่านี้ มีการใช้คุณสมบัติสี่ประเภท:
1. ด้านบน
2.ซ้าย
3.ขวา
4. ด้านล่าง
สูงสุด- ค่าบวก (เช่น 20px) จะย้ายบล็อกลง 20 พิกเซล ค่าลบ (-20px) จะย้ายองค์ประกอบขึ้น 20 พิกเซล ทั้งหมดนี้เกิดขึ้นสัมพันธ์กับมุมซ้ายบน
ซ้าย- เลื่อนไปทางซ้ายหรือขวาขึ้นอยู่กับป้าย สัมพันธ์กับมุมซ้ายบน
ขวา- เลื่อนไปทางขวาและซ้ายขึ้นอยู่กับป้าย สัมพันธ์กับมุมขวาบน
ด้านล่าง- เลื่อนขึ้นหรือลงขึ้นอยู่กับป้าย เกิดขึ้นสัมพันธ์กับมุมซ้ายล่าง
นี่คือโค้ด HTML:
และนี่คือ CSS:
#1 {
ตำแหน่ง:ญาติ;
ด้านบน:100px;
ซ้าย:100px;
ความกว้าง:500px;
ความสูง:500px;
สีพื้นหลัง:#CCCCCC;
}
#11 {
สีพื้นหลัง:#003399;
ตำแหน่ง:แน่นอน;
ด้านล่าง: -30px;
ขวา: -50px;
ความกว้าง:100px;
ความสูง:100px;
}
#2 {
สีพื้นหลัง:#990066;
ความกว้าง:200px;
ความสูง:300px
}
ฝึกฝน.
ในขณะที่ฉันกำลังเขียนอยู่ฉันก็คิดออกเอง
เครื่องมือหลักสองอย่างมักใช้สำหรับการจัดวางหน้า - การวางตำแหน่งและ การเคลื่อนไหวอย่างอิสระ (ลอยตัว)- การวางตำแหน่ง CSS ช่วยให้คุณระบุตำแหน่งที่กล่องขององค์ประกอบปรากฏ และ Free Float จะย้ายองค์ประกอบไปที่ขอบซ้ายหรือขวาของกล่องคอนเทนเนอร์ ทำให้เนื้อหาที่เหลือ "ไหล" ไปรอบๆ ได้
การวางตำแหน่งและการเคลื่อนไหวขององค์ประกอบอย่างอิสระ
1. ประเภทของตำแหน่ง
คุณสมบัติตำแหน่งช่วยให้คุณสามารถระบุตำแหน่งใหม่ของบล็อกได้อย่างแม่นยำโดยสัมพันธ์กับตำแหน่งที่จะอยู่ในโฟลว์ปกติของเอกสาร ตามค่าเริ่มต้น องค์ประกอบทั้งหมดจะถูกจัดเรียงตามลำดับตามลำดับที่กำหนดไว้ในโครงสร้างของเอกสาร HTML ทรัพย์สินไม่ได้รับมรดก
ตำแหน่ง
ความหมาย:
คงที่
ค่าเริ่มต้นหมายถึงไม่มีการวางตำแหน่ง องค์ประกอบต่างๆ จะถูกแสดงตามลำดับตามลำดับที่กำหนดไว้ในเอกสาร HTML ใช้เพื่อล้างค่าตำแหน่งอื่นๆ
ญาติ
องค์ประกอบที่มีตำแหน่งค่อนข้างถูกย้ายจากตำแหน่งปกติในทิศทางที่แตกต่างกันโดยสัมพันธ์กับขอบเขตของคอนเทนเนอร์หลัก แต่พื้นที่ที่องค์ประกอบนั้นไม่หายไป อย่างไรก็ตาม องค์ประกอบดังกล่าวอาจซ้อนทับเนื้อหาอื่นบนเพจ หากสำหรับองค์ประกอบที่มีตำแหน่งค่อนข้างสูงคุณตั้งค่าคุณสมบัติด้านบนและด้านล่างหรือซ้ายและขวาในเวลาเดียวกัน ในกรณีแรกเฉพาะด้านบนเท่านั้นที่จะใช้งานได้ ในวินาทีที่สอง - ซ้าย
การวางตำแหน่งแบบสัมพัทธ์ช่วยให้คุณสามารถตั้งค่าดัชนี z สำหรับองค์ประกอบได้ เช่นเดียวกับการวางตำแหน่งองค์ประกอบย่อยภายในบล็อก
แน่นอน
องค์ประกอบที่มีตำแหน่งที่แน่นอนจะถูกลบออกจากการไหลของเอกสารโดยสมบูรณ์ และอยู่ในตำแหน่งที่สัมพันธ์กับขอบเขตของบล็อกคอนเทนเนอร์ (องค์ประกอบอื่นหรือหน้าต่างเบราว์เซอร์) บล็อกคอนเทนเนอร์สำหรับองค์ประกอบที่มีตำแหน่งที่แน่นอนคือองค์ประกอบบรรพบุรุษที่ใกล้เคียงที่สุดซึ่งค่าคุณสมบัติตำแหน่งไม่คงที่ ตำแหน่งของขอบขององค์ประกอบถูกกำหนดโดยใช้คุณสมบัติออฟเซ็ต พื้นที่ที่องค์ประกอบดังกล่าวครอบครองจะยุบลงราวกับว่าไม่มีองค์ประกอบนั้นอยู่บนเพจ องค์ประกอบที่มีตำแหน่งที่แน่นอนสามารถซ้อนทับหรือถูกองค์ประกอบอื่นๆ ทับได้ (เนื่องจากคุณสมบัติดัชนี z) องค์ประกอบใด ๆ ที่อยู่ในตำแหน่งที่แน่นอนจะสร้างบล็อก กล่าวคือ จะใช้กับค่า display: block; -
ที่ตายตัว
แก้ไของค์ประกอบในตำแหน่งที่ระบุบนเพจ บล็อกคอนเทนเนอร์ขององค์ประกอบคงที่คือวิวพอร์ต นั่นคือองค์ประกอบจะคงที่โดยสัมพันธ์กับหน้าต่างเบราว์เซอร์เสมอ และไม่เปลี่ยนตำแหน่งในขณะที่เลื่อนหน้า องค์ประกอบจะถูกลบออกจากโฟลว์เอกสารหลักโดยสิ้นเชิง และสร้างขึ้นในโฟลว์เอกสารใหม่
อักษรย่อ
ตั้งค่าคุณสมบัติให้เป็นค่าเริ่มต้น
สืบทอด
สืบทอดค่าคุณสมบัติจากองค์ประกอบหลัก
ข้าว. 1. ความแตกต่างระหว่างการวางตำแหน่งแบบคงที่ แบบสัมพันธ์ และแบบสัมบูรณ์ 2. คุณสมบัติออฟเซ็ต
คุณสมบัติอธิบายออฟเซ็ตที่สัมพันธ์กับด้านที่ใกล้ที่สุดของบล็อกคอนเทนเนอร์ ตั้งค่าสำหรับองค์ประกอบที่ค่าคุณสมบัติตำแหน่งไม่คงที่ สามารถรับได้ทั้งค่าบวกและค่าลบ ไม่ได้รับมรดก
สำหรับคุณสมบัติด้านบน ค่าบวกจะย้ายขอบด้านบนขององค์ประกอบที่อยู่ในตำแหน่งด้านล่าง และค่าลบจะย้ายขอบด้านบนของบล็อกคอนเทนเนอร์ สำหรับคุณสมบัติด้านซ้าย ค่าบวกจะย้ายขอบขององค์ประกอบที่อยู่ในตำแหน่งไปทางขวา และค่าลบจะเลื่อนขอบขององค์ประกอบที่อยู่ในตำแหน่งไปทางซ้าย นั่นคือค่าบวกจะย้ายองค์ประกอบภายในบล็อกคอนเทนเนอร์และค่าลบจะย้ายองค์ประกอบไปด้านนอก
3. การวางตำแหน่งภายในองค์ประกอบ
สำหรับบล็อกคอนเทนเนอร์ขององค์ประกอบที่มีตำแหน่งที่แน่นอน ตำแหน่ง: คุณสมบัติสัมพัทธ์จะถูกตั้งค่าโดยไม่มีออฟเซ็ต ซึ่งช่วยให้องค์ประกอบสามารถวางตำแหน่งภายในองค์ประกอบคอนเทนเนอร์ได้
.wrap ( ช่องว่างภายใน: 10px; ความสูง: 150px; ตำแหน่ง: ญาติ; พื้นหลัง: #e7e6d4; การจัดแนวข้อความ: ขวา; เส้นขอบ: 3px ประ #645a4e; ) .white ( ตำแหน่ง: สัมบูรณ์; ความกว้าง: 200px; ด้านบน: 10px; ซ้าย : 10px; การขยาย: 10px; พื้นหลัง: #ffffff; เส้นขอบ: 3px ประ #312a22;
ข้าว. 2. ตำแหน่งสัมพัทธ์สัมบูรณ์4. ปัญหาการวางตำแหน่ง
1. หากตั้งค่าความกว้างหรือความสูงขององค์ประกอบในตำแหน่งที่แน่นอนเป็น auto ค่าจะถูกกำหนดโดยความกว้างหรือความสูงของเนื้อหาขององค์ประกอบ หากมีการประกาศความกว้างหรือความสูงอย่างชัดเจน นี่คือค่าที่จะกำหนด
2. หากภายในบล็อกที่มีตำแหน่ง: สัมบูรณ์ มีองค์ประกอบที่ตั้งค่าการลอยตัว ความสูงขององค์ประกอบนี้จะเท่ากับความสูงขององค์ประกอบที่สูงที่สุดเหล่านี้
3. สำหรับองค์ประกอบที่มีตำแหน่ง: สัมบูรณ์หรือตำแหน่ง: คงที่ คุณไม่สามารถตั้งค่าคุณสมบัติ float พร้อมกันได้ แต่สำหรับองค์ประกอบที่มีตำแหน่ง: สัมพันธ์ คุณสามารถทำได้
4. หากบรรพบุรุษขององค์ประกอบที่อยู่ในตำแหน่งเป็นองค์ประกอบบล็อก คอนเทนเนอร์บล็อกจะถูกสร้างขึ้นตามพื้นที่เนื้อหาที่คั่นด้วยเส้นขอบ หากบรรพบุรุษเป็นองค์ประกอบแบบอินไลน์ บล็อกคอนเทนเนอร์จะถูกสร้างขึ้นตามขอบเขตด้านนอกของเนื้อหา หากไม่มีบรรพบุรุษ บล็อกคอนเทนเนอร์จะเป็นองค์ประกอบเนื้อหา
5. การเคลื่อนไหวขององค์ประกอบอย่างอิสระ
ในลำดับปกติ องค์ประกอบบล็อกจะแสดงผลโดยเริ่มจากขอบด้านบนของหน้าต่างเบราว์เซอร์และทำงานไปทางขอบด้านล่าง คุณสมบัติ float ช่วยให้คุณสามารถย้ายองค์ประกอบใด ๆ โดยจัดตำแหน่งให้ชิดขอบซ้ายหรือขวาของหน้าเว็บหรือองค์ประกอบคอนเทนเนอร์ที่ประกอบด้วยองค์ประกอบนั้น ในกรณีนี้ องค์ประกอบบล็อกอื่นๆ จะเพิกเฉย และองค์ประกอบในบรรทัดจะย้ายไปทางขวาหรือซ้าย เพื่อเพิ่มพื้นที่ว่างและไหลไปรอบๆ
ข้าว. 3. การเคลื่อนไหวขององค์ประกอบอย่างอิสระ บล็อกแบบลอยใช้มิติของเนื้อหา โดยคำนึงถึงช่องว่างภายในและเส้นขอบ ขอบด้านบนและด้านล่างขององค์ประกอบแบบลอยไม่ยุบ คุณสมบัติ float ใช้กับทั้งองค์ประกอบบล็อกและองค์ประกอบแบบอินไลน์
ขอบด้านนอกด้านซ้ายหรือขวาขององค์ประกอบที่ถูกย้าย ต่างจากองค์ประกอบที่มีตำแหน่ง ไม่สามารถวางไปทางซ้าย (หรือขวา) ของขอบด้านในของบล็อกคอนเทนเนอร์ได้ เช่น ก้าวข้ามขอบเขตของมัน นอกจากนี้ หากมีการระบุช่องว่างภายในสำหรับคอนเทนเนอร์บล็อก บล็อกลอยจะมีระยะห่างจากขอบของคอนเทนเนอร์บล็อกตามระยะทางที่กำหนด
คุณสมบัติจะเปลี่ยนค่าที่คำนวณ (แสดงเบราว์เซอร์) ของคุณสมบัติการแสดงผลโดยอัตโนมัติเพื่อแสดง: บล็อกสำหรับค่าต่อไปนี้: inline , inline-block , table-row , table-row-group , table-column , table-column-group , ตารางเซลล์ ค่าของการเปลี่ยนแปลงตารางอินไลน์เป็นตาราง
คุณสมบัติไม่มีผลกระทบต่อองค์ประกอบที่มี display: flex และ display: inline-flex
เมื่อใช้คุณสมบัติ float กับองค์ประกอบบล็อก ต้องแน่ใจว่าได้ระบุความกว้าง สิ่งนี้จะสร้างพื้นที่สำหรับเนื้อหาอื่นในเบราว์เซอร์ แต่ถ้าความกว้างรวมของคอลัมน์ทั้งหมดมากกว่าพื้นที่ว่าง องค์ประกอบสุดท้ายจะลดลง
ในเวลาเดียวกัน ขอบแนวตั้งขององค์ประกอบแบบลอยจะไม่ยุบลงพร้อมกับระยะขอบขององค์ประกอบข้างเคียง ซึ่งแตกต่างจากองค์ประกอบบล็อกทั่วไป
6. ยกเลิกการไหลรอบองค์ประกอบ
6.1. ทรัพย์สินที่ชัดเจน
คุณสมบัติที่ชัดเจนจะกำหนดว่าองค์ประกอบที่ตามหลังองค์ประกอบลอยตัวจะถูกวางตำแหน่งอย่างไร คุณสมบัติยกเลิกการลอยบนด้านใดด้านหนึ่งหรือทั้งสองด้านขององค์ประกอบที่กำหนดโดยคุณสมบัติลอย หากต้องการป้องกันไม่ให้พื้นหลังหรือเส้นขอบแสดงใต้องค์ประกอบแบบลอย ให้ใช้กฎ (overflow: ซ่อนเร้น;)
6.2. การทำความสะอาดสตรีมด้วยสไตล์โดยใช้คลาส clearfix และ :after คลาสหลอก
สมมติว่าคุณมีคอนเทนเนอร์บล็อกที่ไม่ได้ระบุความกว้างและความสูง บล็อกลอยที่มีขนาดที่ระบุจะถูกวางไว้ข้างใน
.container ( padding: 20px; พื้นหลัง: #e7e6d4; border: 3px dashed #645a4e; ) .floatbox ( float: left; width: 300px; height: 150px; margin-right: 20px; padding: 0 20px; พื้นหลัง: #ffffff ; ขอบ: 3px ประ #666666; ข้าว. 4. “เอฟเฟกต์การยุบ” ของบล็อกคอนเทนเนอร์สารละลาย:
เราสร้างคลาส .clearfix และเมื่อใช้ร่วมกับคลาสหลอก :after ให้นำไปใช้กับคอนเทนเนอร์บล็อก
.container ( padding: 20px; พื้นหลัง: #e7e6d4; border: 3px dashed #645a4e; ) .floatbox ( float: left; width: 300px; height: 150px; margin-right: 20px; padding: 0 20px; พื้นหลัง: #ffffff ; เส้นขอบ: 3px ประ #666666; .clearfix:after ( เนื้อหา: ""; จอแสดงผล: บล็อก; ความสูง: 0; ชัดเจน: ทั้งสอง; การมองเห็น: ซ่อนเร้น; )ตัวเลือกที่สองสำหรับการล้างสตรีม:
Clearfix:หลัง (เนื้อหา: ""; แสดง: ตาราง; ชัดเจน: ทั้งสอง; )
ข้าว. 5. การใช้วิธี "ทำความสะอาด" กับบล็อกคอนเทนเนอร์ที่มีองค์ประกอบลอยตัว
6.3. วิธีง่ายๆ ในการทำความสะอาดสตรีม
มีเคล็ดลับอีกอย่างหนึ่งในการล้างโฟลว์สำหรับองค์ประกอบที่มีองค์ประกอบลอย เช่น รายการสัญลักษณ์แสดงหัวข้อย่อยแนวนอน:
Ul ( ระยะขอบ: 0; สไตล์รายการ: ไม่มี; การขยาย: 20px; พื้นหลัง: #e7e6d4; ล้น: อัตโนมัติ; ) li ( ลอย: ซ้าย; ความกว้าง: คำนวณ (100% / 3 - 20px); ความสูง: 50px; ระยะขอบ- ขวา: 20px; พื้นหลัง: #ffffff; เส้นขอบ: 3px ประ #666666; ) li:last-child (ระยะขอบ-ขวา: 0;) 6. ทำความสะอาดโฟลว์รายการแนวนอน
หนึ่งในสิ่งที่ดีที่สุดเกี่ยวกับ CSS คือสไตล์ทำให้เราสามารถวางตำแหน่งเนื้อหาและองค์ประกอบบนเพจได้แทบทุกวิถีทางเท่าที่จะจินตนาการได้ สิ่งนี้จะเพิ่มโครงสร้างให้กับการออกแบบของเราและช่วยทำให้เนื้อหามีภาพมากขึ้น
การวางตำแหน่งใน CSS มีหลายประเภท แต่ละประเภทมีขอบเขตของตัวเอง ในบทนี้ เราจะดูกรณีการใช้งานที่แตกต่างกันสองสามกรณี — การสร้างเลย์เอาต์ที่นำมาใช้ซ้ำได้ และการวางตำแหน่งองค์ประกอบแบบใช้แล้วทิ้งที่ไม่ซ้ำกัน — รวมถึงการอธิบายวิธีการบางอย่างในการดำเนินการดังกล่าว
การวางตำแหน่งผ่านการลอย
วิธีหนึ่งในการวางตำแหน่งองค์ประกอบบนเพจคือผ่านคุณสมบัติ float คุณสมบัตินี้ค่อนข้างหลากหลายและสามารถใช้งานได้หลายวิธี
โดยพื้นฐานแล้ว คุณสมบัติ float จะรับองค์ประกอบ ลบออกจากโฟลว์ปกติของเพจ และวางตำแหน่งไว้ทางซ้ายหรือขวาขององค์ประกอบหลัก องค์ประกอบอื่นๆ ทั้งหมดในหน้าจะล้อมรอบองค์ประกอบดังกล่าว ตัวอย่างเช่น ย่อหน้าจะล้อมรอบรูปภาพหากเป็นองค์ประกอบ ตั้งค่าคุณสมบัติ float แล้ว
เมื่อใช้คุณสมบัติ float กับองค์ประกอบหลายรายการพร้อมกัน จะทำให้สามารถสร้างเลย์เอาต์ที่มีองค์ประกอบลอยอยู่ติดกันหรือตรงข้ามกัน ดังที่แสดงในโครงร่างแบบหลายคอลัมน์
คุณสมบัติ float รับค่าหลายค่า โดยค่าที่ได้รับความนิยมมากที่สุด 2 ค่าคือค่าซ้ายและขวา ซึ่งทำให้องค์ประกอบลอยไปทางซ้ายหรือขวาของค่าแม่
Img ( ลอย: ซ้าย; )
ลอยในทางปฏิบัติ
เรามาสร้างเค้าโครงหน้าทั่วไปโดยมีส่วนหัวอยู่ด้านบน สองคอลัมน์ตรงกลาง และส่วนท้ายอยู่ที่ด้านล่าง ตามหลักการแล้ว หน้านี้ควรมาร์กอัปด้วยองค์ประกอบต่างๆ
,
,
...
...
สาธิตการวางแบบไม่มีโฟลต
นี่คือองค์ประกอบ และ
ส่วน ( ลอย: ซ้าย; ) กัน ( ลอย: ขวา; )
สำหรับการอ้างอิง องค์ประกอบแบบลอยจะถูกวางตำแหน่งตามขอบขององค์ประกอบหลัก หากไม่มีพาเรนต์ องค์ประกอบแบบลอยจะถูกวางตำแหน่งที่ขอบของหน้า
เมื่อเราตั้งค่าองค์ประกอบให้ลอย เราจะลบออกจากโฟลว์ปกติของเอกสาร HTML ซึ่งจะทำให้ความกว้างเริ่มต้นขององค์ประกอบนั้นกลายเป็นความกว้างของเนื้อหา บางครั้ง เช่น เมื่อเรากำลังสร้างคอลัมน์สำหรับเค้าโครงที่นำมาใช้ใหม่ ลักษณะการทำงานนี้เป็นสิ่งที่ไม่พึงประสงค์ ซึ่งสามารถแก้ไขได้โดยการเพิ่มคุณสมบัติความกว้างที่มีค่าคงที่สำหรับแต่ละคอลัมน์ นอกจากนี้ เพื่อป้องกันไม่ให้องค์ประกอบที่ลอยอยู่แตะกัน ส่งผลให้เนื้อหาขององค์ประกอบหนึ่งอยู่ติดกัน เราสามารถใช้คุณสมบัติมาร์จิ้นเพื่อกำหนดช่องว่างระหว่างองค์ประกอบต่างๆ
ด้านล่างนี้เราขยายบล็อกโค้ดก่อนหน้าโดยการเพิ่มระยะขอบและความกว้างสำหรับแต่ละคอลัมน์เพื่อให้รูปร่างผลลัพธ์ที่เราต้องการดีขึ้น
ส่วน ( ลอย: ซ้าย; ระยะขอบ: 0 1.5%; ความกว้าง: 63%; ) กัน ( ลอย: ขวา; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; )
การสาธิตเค้าโครงพร้อมโฟลต
float สามารถเปลี่ยนค่าการแสดงผลขององค์ประกอบได้
สำหรับองค์ประกอบแบบลอย สิ่งสำคัญคือต้องเข้าใจว่าองค์ประกอบนั้นถูกลบออกจากโฟลว์ปกติของหน้า และค่าที่แสดงเริ่มต้นขององค์ประกอบอาจเปลี่ยนแปลงได้ คุณสมบัติ float อาศัยค่าการแสดงผลขององค์ประกอบที่ถูกตั้งค่าเป็นบล็อก และสามารถเปลี่ยนค่าการแสดงผลเริ่มต้นขององค์ประกอบได้ หากยังไม่ได้แสดงผลเป็นองค์ประกอบบล็อก
ตัวอย่างเช่น องค์ประกอบที่ระบุการแสดงผลเป็นแบบอินไลน์ เช่น อินไลน์ ละเว้นคุณสมบัติความสูงหรือความกว้างใดๆ อย่างไรก็ตาม หากคุณระบุทศนิยมสำหรับองค์ประกอบแบบอินไลน์ ค่าที่แสดงจะเปลี่ยนเป็นบล็อก จากนั้นองค์ประกอบจะสามารถใช้คุณสมบัติความสูงหรือความกว้างได้แล้ว
เมื่อเราลอยองค์ประกอบ เราต้องระวังว่าจะส่งผลต่อค่าของคุณสมบัติการแสดงผลอย่างไร
สำหรับสองคอลัมน์ คุณสามารถตั้งค่า float คอลัมน์หนึ่งเป็นด้านซ้ายและอีกคอลัมน์เป็นด้านขวา แต่สำหรับหลายคอลัมน์ เราจะต้องเปลี่ยนแนวทางของเรา ตัวอย่างเช่น สมมติว่าเราต้องการให้มีแถวสามคอลัมน์ระหว่างองค์ประกอบของเรา และ
...
...
...
...
เพื่อจัดองค์ประกอบทั้งสามนี้ ในแถวที่มีสามคอลัมน์ เราต้องตั้งค่า float ให้กับองค์ประกอบทั้งหมด เหมือนซ้าย เรายังต้องปรับความกว้างด้วย โดยคำนึงถึงคอลัมน์เพิ่มเติมและวางไว้ติดกัน
ส่วน ( ลอย: ซ้าย; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; )
ที่นี่เรามีสามคอลัมน์ โดยทั้งหมดมีความกว้างและค่าระยะขอบเท่ากัน และตั้งค่าลอยไปทางซ้าย
การสาธิตเค้าโครงแบบสามคอลัมน์พร้อมทศนิยม
การล้างและลอยเนื้อหา
คุณสมบัติ float ได้รับการออกแบบมาเพื่อให้เนื้อหาไหลไปรอบๆ รูปภาพ ภาพสามารถทำให้เกิดการลอยตัวและเนื้อหาทั้งหมดที่อยู่รอบๆ ภาพนั้นจะไหลไปรอบๆ ภาพนั้นอย่างเป็นธรรมชาติ แม้ว่าคุณสมบัตินี้จะใช้งานได้ดีกับรูปภาพ แต่คุณสมบัติ float ไม่ได้มีจุดประสงค์เพื่อใช้ในการจัดวางและการวางตำแหน่งจริงๆ ดังนั้นจึงมาพร้อมกับข้อผิดพลาดบางประการ
ข้อผิดพลาดอย่างหนึ่งคือบางครั้งสไตล์ที่เหมาะสมไม่ปรากฏบนองค์ประกอบที่อยู่ติดกันหรือเป็นพาเรนต์ขององค์ประกอบแบบลอย เมื่อองค์ประกอบถูกตั้งค่าเป็นลอย องค์ประกอบนั้นจะถูกลบออกจากโฟลว์ปกติของเพจ และด้วยเหตุนี้ รูปแบบขององค์ประกอบรอบๆ องค์ประกอบที่ลอยอยู่จึงอาจได้รับผลกระทบในทางลบ
บ่อยครั้งที่ค่าของคุณสมบัติระยะขอบและช่องว่างภายในถูกตีความอย่างไม่ถูกต้อง ส่งผลให้ค่าเหล่านั้นผสานเข้ากับองค์ประกอบลอยตัว คุณสมบัติอื่น ๆ อาจได้รับผลกระทบเช่นกัน
จุดบกพร่องอีกประการหนึ่งคือบางครั้งเนื้อหาที่ไม่ต้องการเริ่มพันรอบองค์ประกอบโฟลต การลบองค์ประกอบออกจากโฟลว์ของเอกสารทำให้องค์ประกอบทั้งหมดรอบๆ องค์ประกอบแบบลอยสามารถข้ามได้ และใช้พื้นที่ว่างรอบๆ องค์ประกอบแบบลอย ซึ่งมักไม่เป็นที่พึงปรารถนา
ในตัวอย่างสองคอลัมน์ก่อนหน้าของเรา หลังจากที่เราเพิ่มทศนิยมให้กับองค์ประกอบแล้ว และ แต่ก่อนที่จะตั้งค่าคุณสมบัติ width ให้กับเนื้อหาภายในองค์ประกอบนั้น
การสาธิตเค้าโครงโดยไม่ต้องล้างโฟลต
เพื่อป้องกันไม่ให้เนื้อหาพันรอบองค์ประกอบแบบลอย เราจำเป็นต้องล้างโฟลตและทำให้เพจกลับสู่โฟลว์ปกติ เราจะมาดูวิธีการเคลียร์โฟลตแล้วมาดูเนื้อหากันดีกว่า
เคลียร์ลอย
การล้างโฟลตเกิดขึ้นโดยใช้คุณสมบัติ clear ซึ่งใช้ค่าที่แตกต่างกันหลายค่า: ค่าที่ใช้บ่อยที่สุดคือ left , right และทั้งสองอย่าง
Div ( ชัดเจน: ซ้าย; )
ค่าทางซ้ายจะล้างโฟลตทางซ้าย ในขณะที่ค่าทางขวาจะล้างโฟลตทางขวา อย่างไรก็ตาม ค่าทั้งสอง จะล้างโฟลตซ้ายและขวา และมักจะเป็นตัวเลือกที่เหมาะสมที่สุด
กลับไปที่ตัวอย่างก่อนหน้านี้ หากเราใช้คุณสมบัติ clear ที่มีค่าทั้งสองอย่างในองค์ประกอบ แล้วเราก็เคลียร์ทุ่นได้เลย สิ่งสำคัญคือต้องล้างองค์ประกอบที่ระบุหลังองค์ประกอบลอย ไม่ใช่ก่อนหน้า เพื่อให้เพจกลับสู่โฟลว์ปกติ
ส่วนท้าย ( ชัดเจน: ทั้งสอง; )
การสาธิตโครงร่างพร้อมการเคลียร์โฟลต
เนื้อหาลอย
แทนที่จะล้างข้อมูล float อีกทางเลือกหนึ่งคือตั้งค่าเนื้อหาให้ลอย ผลลัพธ์จะค่อนข้างเหมือนเดิม แต่เนื้อหาแบบลอยช่วยให้แน่ใจว่าสไตล์ของเราทั้งหมดจะแสดงอย่างถูกต้อง
ในการตั้งค่าเนื้อหาแบบลอย องค์ประกอบแบบลอยจะต้องอยู่ภายในองค์ประกอบหลัก โดยจะทำหน้าที่เป็นคอนเทนเนอร์ ปล่อยให้การไหลของเอกสารภายนอกเป็นปกติโดยสมบูรณ์ การจัดสไตล์สำหรับองค์ประกอบหลักนี้แสดงโดยคลาสกลุ่ม ดังที่แสดงไว้ที่นี่:
Group::before, .group::after ( content: ""; display: table; ) .group::after ( clear: ทั้งสอง; ) .group ( clear: ทั้งสอง; *zoom: 1; )
ไม่ค่อยมีอะไรเกิดขึ้นมากนัก แต่โดยพื้นฐานแล้ว CSS ทั้งหมดจะล้างองค์ประกอบที่ลอยอยู่ทั้งหมดภายในองค์ประกอบกลุ่มและคืนเอกสารกลับสู่โฟลว์ปกติ
โดยเฉพาะอย่างยิ่ง องค์ประกอบหลอก ::before และ ::after ตามที่กล่าวไว้ในบทที่ 4 จะสร้างองค์ประกอบแบบไดนามิกด้านบนและด้านล่างองค์ประกอบด้วยกลุ่มคลาส องค์ประกอบเหล่านี้ไม่รวมเนื้อหาใดๆ และแสดงผลเป็นองค์ประกอบตาราง คล้ายกับองค์ประกอบบล็อก องค์ประกอบที่สร้างขึ้นแบบไดนามิกหลังจากองค์ประกอบกลุ่มล้างโฟลตภายในองค์ประกอบกลุ่ม เช่นเดียวกับที่ชัดเจนก่อนหน้านี้ ในที่สุด องค์ประกอบกลุ่มยังล้างโฟลตใด ๆ ที่อาจปรากฏขึ้นก่อนหน้านั้น ในกรณีที่มีการโฟลตที่มีค่า left หรือ right รวมไปถึงเคล็ดลับเล็กน้อยที่ทำให้เบราว์เซอร์รุ่นเก่าเล่นได้ดี
มีโค้ดมากกว่าแค่ clear: ทั้งสองคำสั่ง แต่มันค่อนข้างมีประโยชน์
เมื่อพิจารณาเค้าโครงหน้าสองคอลัมน์ของเราแล้ว เราก็สามารถสรุปได้ และ องค์ประกอบหลัก องค์ประกอบหลักนี้จะมีองค์ประกอบลอยตัว รหัสจะมีลักษณะดังนี้:
...
...
...
...
Group::before, .group::after ( content: ""; display: table; ) .group::after ( clear:both; ) .group ( clear:both; *zoom: 1; ) ส่วน ( float: left ; ระยะขอบ: 0 1.5%; ความกว้าง: 63%; ) กัน ( ลอย: ขวา; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; )
การสาธิตเลย์เอาต์ที่มีเนื้อหาแบบโฟลต
เทคนิคที่แสดงที่นี่เรียกว่า "clearfix" และมักพบเห็นได้ทั่วไปในไซต์อื่นที่มีชื่อคลาส clearfix หรือ cf เราเลือกใช้กลุ่มชื่อคลาสเนื่องจากแสดงถึงกลุ่มขององค์ประกอบและแสดงเนื้อหาได้ดีกว่า
เมื่อองค์ประกอบลอยอยู่ สิ่งสำคัญคือต้องตรวจสอบว่าองค์ประกอบเหล่านั้นส่งผลต่อโฟลว์เพจอย่างไร และให้แน่ใจว่าโฟลว์เพจถูกรีเซ็ตโดยการล้างหรือผ่านเนื้อหาโฟลตตามที่ตั้งใจไว้ มิฉะนั้น การติดตามจำนวนโฟลตอาจทำให้เกิดอาการปวดหัวได้มาก โดยเฉพาะในหน้าที่มีหลายแถว โดยแต่ละแถวมีหลายคอลัมน์
ในทางปฏิบัติ
กลับไปที่ไซต์ Styles Conference แล้วลองเพิ่มโฟลตให้กับเนื้อหาบางส่วน
/* ================================================ ====== เคลียร์ฟิกซ์ ======= =================================== * / .group::before, .group::after ( เนื้อหา: " "; แสดง: ตาราง; ) .group::after ( ชัดเจน: ทั้งสอง; ) .group ( ชัดเจน: ทั้งสอง; *ซูม: 1; )
ตอนนี้เราสามารถใช้ float ได้แล้ว มากำหนดมันสำหรับตัวหลักกันดีกว่า องค์ประกอบภายในไปทางซ้ายและปล่อยให้เนื้อหาที่เหลือในส่วนหัวไหลไปทางขวา
เมื่อต้องการทำเช่นนี้ ให้เพิ่มคลาสโลโก้ให้กับองค์ประกอบ - ต่อไป ภายใน CSS ของเรา เราจะเพิ่มส่วนสไตล์ใหม่สำหรับส่วนหัวหลัก ในส่วนนี้เราจะเลือกองค์ประกอบ
ด้วยคลาสโลโก้และตั้งค่าโฟลตไปทางซ้าย
การประชุมสไตล์/* ======================================= หัวเรื่องหลัก ====== = =================================== */ .logo ( float: left; )
ขณะที่เราอยู่ที่นี่ มาเพิ่มรายละเอียดอีกเล็กน้อยให้กับโลโก้ของเรา เริ่มต้นด้วยการวางองค์ประกอบ
หรือการแบ่งบรรทัดระหว่างคำว่า "สไตล์" และ "การประชุม" เพื่อบังคับให้ข้อความโลโก้ของเราปรากฏเป็นสองบรรทัด
ใน CSS เราจะเพิ่มเส้นขอบที่ด้านบนของโลโก้และช่องว่างภายในแนวตั้งเพื่อให้โลโก้ "หายใจ" ได้อย่างอิสระ
สไตล์
การประชุม
โลโก้ ( ขอบบน: 4px solid #648880; padding: 40px 0 22px 0; float: left; )
เนื่องจากเราสร้างธาตุขึ้นมา float เราต้องการตั้งค่าเนื้อหาให้ float ผู้ปกครองทันทีสำหรับ เป็นองค์ประกอบ
...
เราจะเพิ่มคลาสกลุ่มลงไป นี่จะใช้สไตล์ clearfix ที่เราตั้งไว้ก่อนหน้านี้ องค์ประกอบ กลายเป็นรูปเป็นร่างแล้ว มาดูองค์ประกอบกันดีกว่า เราจะกำหนดลอยลิขสิทธิ์ของเราไว้ข้างใน และปล่อยให้องค์ประกอบอื่นๆ ไหลรอบๆ ไปทางขวา
ไม่เหมือนธาตุ อย่างไรก็ตาม เราจะไม่นำคลาสไปใช้กับองค์ประกอบแบบลอยโดยตรง คราวนี้เราจะเพิ่มคลาสให้กับพาเรนต์ขององค์ประกอบ float และใช้ตัวเลือก CSS ที่ไม่ซ้ำกันเพื่อเลือกองค์ประกอบจากนั้นให้มันเป็น float
เริ่มต้นด้วยการเพิ่มคลาส primary-footer ให้กับองค์ประกอบ - เพราะเรารู้ว่าเราจะมีองค์ประกอบที่คล่องตัวอยู่ภายใน จากนั้นเราควรเพิ่มคลาสกลุ่มในขณะที่เราอยู่
...
ตอนนี้คลาส primary-footer ถูกตั้งค่าบนองค์ประกอบแล้ว เราสามารถใช้คลาสนี้เพื่อเลือกองค์ประกอบโดยเฉพาะได้ ใช้ CSS เราอยากให้มันลอยเหมือนซ้าย อย่าลืมสร้างส่วนใหม่ในไฟล์ main.css ของเราสำหรับรูปแบบส่วนท้ายหลัก
/* ======================================== ชั้นใต้ดินหลัก ====== ==================================== */ .primary-footer ขนาดเล็ก ( float: left; ) เพื่อตรวจสอบ - ที่นี่เราเลือกองค์ประกอบ ซึ่งควรอยู่ภายในองค์ประกอบที่มีค่าแอตทริบิวต์คลาสเป็น primary-footer เช่นองค์ประกอบของเรา , ตัวอย่างเช่น.
สุดท้ายนี้ เราจะเพิ่มช่องว่างภายในเล็กน้อยที่ด้านบนและด้านล่างขององค์ประกอบ ซึ่งจะช่วยแยกส่วนออกจากส่วนที่เหลือของหน้าเล็กน้อย เราสามารถทำได้โดยตรงโดยใช้คลาส primary-footer
ส่วนท้ายหลัก ( padding-bottom: 44px; padding-top: 44px; )
คำนึงถึงการเปลี่ยนแปลงองค์ประกอบทั้งหมดนี้ และ เราต้องแน่ใจว่าได้รวมไว้ในทุกหน้า ไม่ใช่แค่หน้า index.html
ข้าว. 5.01. การใช้องค์ประกอบลอยหลายรายการ และ ในหน้าหลักของ Styles Conference ทำงานร่วมกัน
การวางตำแหน่งผ่านอินไลน์บล็อก
นอกเหนือจากการใช้ float แล้ว อีกวิธีหนึ่งที่เราสามารถวางตำแหน่งเนื้อหาได้คือการใช้คุณสมบัติการแสดงผลร่วมกับค่า inline-block วิธีการบล็อกแบบอินไลน์ ดังที่เราจะกล่าวถึงในภายหลัง มีประโยชน์เป็นหลักสำหรับการจัดวางหน้าหรือการวางองค์ประกอบในบรรทัดที่อยู่ติดกัน
โปรดจำไว้ว่าค่าบล็อกอินไลน์สำหรับคุณสมบัติการแสดงผลจะแสดงองค์ประกอบในบรรทัด และอนุญาตให้องค์ประกอบเหล่านั้นรับคุณสมบัติทั้งหมดของโมเดลกล่อง รวมถึงความสูง ความกว้าง การแพ็ดดิ้ง เส้นขอบ และระยะขอบ การใช้ inline-block ช่วยให้เราสามารถใช้ประโยชน์จากโมเดลบล็อกได้อย่างเต็มที่โดยไม่ต้องกังวลกับการล้างโฟลตใดๆ
อินไลน์บล็อกในทางปฏิบัติ
ลองมาดูตัวอย่างสามคอลัมน์ของเราตั้งแต่ต้น เราจะเริ่มต้นด้วยการบันทึก HTML ของเราดังนี้:
...
...
...
...
...
ตอนนี้แทนที่จะลอยสำหรับองค์ประกอบทั้งสามของเรา เราจะเปลี่ยนค่าการแสดงผลเป็น inline-block โดยปล่อยให้คุณสมบัติระยะขอบและความกว้างเหมือนเดิม ด้วยเหตุนี้ CSS ของเราจึงมีลักษณะดังนี้:
ส่วน ( จอแสดงผล: อินไลน์บล็อก; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; )
น่าเสียดายที่โค้ดนี้เพียงอย่างเดียวไม่เพียงพอที่จะทำเคล็ดลับและองค์ประกอบสุดท้าย ถูกผลักไปที่บรรทัดใหม่ โปรดจำไว้ว่า เนื่องจากองค์ประกอบบล็อกอินไลน์ปรากฏบนบรรทัดติดกัน จึงมีช่องว่างระหว่างองค์ประกอบเหล่านั้น เมื่อเพิ่มขนาดของแต่ละช่องว่างเข้ากับความกว้างและค่าระยะขอบแนวนอนขององค์ประกอบทั้งหมดในแถว ความกว้างโดยรวมจะใหญ่เกินไป โดยผลักองค์ประกอบสุดท้ายออกไป ไปที่บรรทัดใหม่ เพื่อแสดงรายการทั้งหมด ในหนึ่งบรรทัด คุณควรลบช่องว่างระหว่างแต่ละบรรทัดออก
.
การสาธิตองค์ประกอบอินไลน์บล็อกพร้อมพื้นที่
การลบช่องว่างระหว่างองค์ประกอบอินไลน์บล็อก
มีหลายวิธีในการลบช่องว่างระหว่างองค์ประกอบบล็อกอินไลน์ และบางวิธีก็ซับซ้อนกว่าวิธีอื่นๆ เราจะมุ่งเน้นไปที่สองวิธีที่ง่ายที่สุด ซึ่งทั้งสองวิธีเกิดขึ้นใน HTML
วิธีแก้ไขแรกคือการใส่แท็กเปิดองค์ประกอบใหม่แต่ละรายการ ในบรรทัดเดียวกับแท็กปิดขององค์ประกอบก่อนหน้า - แทนที่จะใช้บรรทัดใหม่สำหรับแต่ละองค์ประกอบ เราจะเริ่มต้นองค์ประกอบต่างๆ ในบรรทัดเดียวกัน HTML ของเราอาจมีลักษณะดังนี้:
...
...
...
...
...
การเขียนองค์ประกอบแบบอินไลน์บล็อกด้วยวิธีนี้ทำให้มั่นใจได้ว่าไม่มีช่องว่างระหว่างองค์ประกอบดังกล่าวใน HTML ดังนั้นช่องว่างจะไม่ปรากฏขึ้นเมื่อเพจถูกแสดง
การสาธิตองค์ประกอบอินไลน์บล็อกโดยไม่มีช่องว่าง
อีกวิธีในการลบช่องว่างระหว่างองค์ประกอบบล็อกอินไลน์คือการเปิดความคิดเห็น HTML ทันทีหลังแท็กปิดขององค์ประกอบ จากนั้นปิดความคิดเห็นก่อนแท็กเปิดขององค์ประกอบถัดไป ซึ่งช่วยให้องค์ประกอบบล็อกอินไลน์เริ่มต้นและสิ้นสุดในบรรทัดที่แยกกันใน HTML และจะ "ใส่เครื่องหมายความคิดเห็น" ช่องว่างที่เป็นไปได้ระหว่างองค์ประกอบ รหัสผลลัพธ์จะมีลักษณะดังนี้:
...
...
...
...
...
ไม่มีตัวเลือกใดที่สมบูรณ์แบบ แต่มีประโยชน์ ฉันมักจะชอบใช้ความคิดเห็นเพื่อการจัดระเบียบที่ดีขึ้น แต่ตัวเลือกที่คุณเลือกนั้นขึ้นอยู่กับคุณเลย
สร้างเค้าโครงที่นำมาใช้ซ้ำได้
เมื่อสร้างไซต์ วิธีที่ดีที่สุดเสมอคือการเขียนสไตล์โมดูลาร์ที่สามารถนำมาใช้ซ้ำที่อื่นได้ และเลย์เอาต์ที่นำมาใช้ซ้ำได้จะอยู่ที่ด้านบนของรายการโค้ดที่นำมาใช้ซ้ำได้ เค้าโครงสามารถสร้างได้โดยใช้องค์ประกอบลอยหรือบล็อกอินไลน์ แต่องค์ประกอบใดทำงานได้ดีที่สุดและเพราะเหตุใด
คำถามที่ว่าองค์ประกอบแบบลอยหรือแบบอินไลน์บล็อกดีกว่าสำหรับโครงสร้างหน้าหรือไม่นั้นเปิดให้ถกเถียงกัน แนวทางของฉันคือการใช้องค์ประกอบบล็อกอินไลน์เพื่อสร้างกริดหรือเค้าโครงหน้า จากนั้นใช้โฟลตเมื่อฉันต้องการให้เนื้อหาไหลไปรอบๆ องค์ประกอบ (ซึ่งเป็นสิ่งที่โฟลตได้รับการออกแบบมาเมื่อทำงานกับรูปภาพ) โดยทั่วไปแล้ว ฉันยังพบว่าองค์ประกอบแบบอินไลน์บล็อกใช้งานได้ง่ายกว่าอีกด้วย
อย่างไรก็ตาม ใช้สิ่งที่ดีที่สุดสำหรับคุณ หากคุณคุ้นเคยกับวิธีหนึ่งมากกว่าอีกวิธีหนึ่ง ก็ให้ใช้วิธีนั้น
มีข้อกำหนด CSS ใหม่ในงาน - โดยเฉพาะคุณสมบัติเฟล็กซ์และกริด - ซึ่งจะช่วยคุณตัดสินใจว่าจะจัดวางหน้าเว็บของคุณอย่างไรให้ดีที่สุด จับตาดูวิธีการเหล่านี้เมื่อเริ่มปรากฏขึ้น
ในทางปฏิบัติ
ด้วยความเข้าใจอย่างถ่องแท้เกี่ยวกับเลย์เอาต์ที่นำมาใช้ซ้ำได้ ก็ถึงเวลาที่จะนำไปใช้บนเว็บไซต์ Styles Conference ของเรา
สำหรับเว็บไซต์ Styles Conference เราจะสร้างเค้าโครงสามคอลัมน์โดยใช้องค์ประกอบบล็อกอินไลน์ เราจะทำเช่นนี้เพื่อให้ได้คอลัมน์สามคอลัมน์ที่มีความกว้างเท่ากัน หรือสองคอลัมน์ที่มีความกว้างทั้งหมดหารระหว่างคอลัมน์เหล่านั้นเป็น 2/3 สำหรับคอลัมน์หนึ่ง และ 1/3 สำหรับอีกคอลัมน์หนึ่ง
ขั้นแรก เราจะสร้างคลาสที่กำหนดความกว้างของคอลัมน์เหล่านี้ เราจะเรียกทั้งสองคลาสนี้ว่า col-1-3 สำหรับหนึ่งในสาม และ col-2-3 สำหรับสองในสาม ในส่วนกริดของไฟล์ main.css เรามาดำเนินการต่อและกำหนดคลาสเหล่านี้และความกว้างที่สอดคล้องกัน
Col-1-3 (กว้าง: 33.33%; ) .col-2-3 (กว้าง: 66.66%; )
เราต้องการให้ทั้งสองคอลัมน์ปรากฏเป็นองค์ประกอบบล็อกแบบอินไลน์ เราต้องตรวจสอบให้แน่ใจด้วยว่าได้ตั้งค่าการจัดตำแหน่งแนวตั้งไว้ที่ด้านบนสุดของแต่ละคอลัมน์
มาสร้างตัวเลือกใหม่สองตัวที่แชร์การแสดงผลและการจัดแนวตั้ง
Col-1-3, .col-2-3 ( display: inline-block; Vertical-align: top; )
ลองดู CSS อีกครั้ง เราสร้างตัวเลือกคลาสสองตัว col-1-3 และ col-2-3 คั่นด้วยเครื่องหมายจุลภาค เครื่องหมายจุลภาคที่ส่วนท้ายของตัวเลือกแรกหมายความว่าตัวเลือกอื่นตามด้วย หลังจากตัวเลือกที่สอง จะมีเครื่องหมายปีกกาเปิด ซึ่งบ่งชี้ว่าคำอธิบายสไตล์เริ่มต้นขึ้น ด้วยการใช้เครื่องหมายจุลภาคเพื่อแยกตัวเลือก เราสามารถผูกสไตล์หนึ่งเข้ากับตัวเลือกหลายตัวพร้อมกันได้
เราต้องการเว้นวรรคระหว่างคอลัมน์เพื่อช่วยแยกเนื้อหา ซึ่งสามารถทำได้โดยการเพิ่มช่องว่างภายในแนวนอนลงในแต่ละคอลัมน์
วิธีนี้ใช้ได้ผลดี แต่เมื่อวางสองคอลัมน์ติดกัน ความกว้างของช่องว่างระหว่างคอลัมน์ทั้งสองจะกว้างเป็นสองเท่าของระยะห่างจากขอบด้านนอก เพื่อให้เกิดความสมดุล เราจะวางคอลัมน์ทั้งหมดของเราไว้ในตารางและเพิ่มช่องว่างภายในแบบเดียวกันลงไป
ลองใช้คลาสกริดเพื่อกำหนดกริดของเรา จากนั้นกำหนดช่องว่างในแนวนอนแบบเดียวกันให้กับคลาสกริด col-1-3 และ col-2-3 ด้วยเครื่องหมายจุลภาคเพื่อแยกตัวเลือกของเราอีกครั้ง CSS ของเราจะมีหน้าตาดังนี้:
ตาราง, .col-1-3, .col-2-3 ( ช่องว่างด้านซ้าย: 15px; ช่องว่างด้านขวา: 15px; )
เวลาจะวาง padding แนวนอน ก็ต้องระวังครับ โปรดจำไว้ว่าในบทเรียนที่แล้วเราได้สร้างคอนเทนเนอร์ที่มีคลาสคอนเทนเนอร์เพื่อจัดเนื้อหาทั้งหมดของเราไว้ตรงกลางหน้าด้วยความกว้าง 960 พิกเซล ในปัจจุบัน หากเราใส่องค์ประกอบตารางไว้ในองค์ประกอบคอนเทนเนอร์ การเสริมแนวนอนขององค์ประกอบเหล่านั้นจะยุบลงด้วยกัน และคอลัมน์ของเราจะไม่ปรากฏเป็นสัดส่วนกับความกว้างของส่วนที่เหลือของหน้า
เราจะดำเนินการนี้โดยแจกแจงกฎชุดเก่าของคอนเทนเนอร์ออกดังต่อไปนี้:
คอนเทนเนอร์, .grid ( ระยะขอบ: 0 อัตโนมัติ; ความกว้าง: 960px; ) .container ( ช่องว่างด้านซ้าย: 30px; ช่องว่างด้านขวา: 30px; )
ตอนนี้องค์ประกอบใดๆ ที่มีคลาสคอนเทนเนอร์หรือกริดจะมีความกว้าง 960 พิกเซลและอยู่ที่กึ่งกลางของหน้า นอกจากนี้ เรายังรักษาช่องว่างภายในแนวนอนที่มีอยู่สำหรับองค์ประกอบใดๆ ที่มีคลาสคอนเทนเนอร์โดยการย้ายไปยังชุดกฎใหม่ที่แยกจากกัน
เอาล่ะ ส่วนที่ยากทั้งหมดของการตั้งค่า mesh เสร็จสมบูรณ์แล้ว ตอนนี้ได้เวลาทำงานกับ HTML ของเราแล้วดูว่าคลาสเหล่านี้ทำงานอย่างไร
เราจะเริ่มต้นด้วยทีเซอร์ในหน้าแรกในไฟล์ index.html ซึ่งจัดเรียงเป็นสามคอลัมน์ ทีเซอร์ปัจจุบันถูกรวมไว้ในองค์ประกอบ กับคลาสคอนเทนเนอร์ เราต้องการเปลี่ยนคลาสคอนเทนเนอร์เป็นกริดเพื่อที่เราจะได้เริ่มวางคอลัมน์ไว้ข้างใน
...
...
...
...
และสุดท้าย เนื่องจากแต่ละคอลัมน์ของเราเป็นองค์ประกอบบล็อกแบบอินไลน์ เราจึงต้องแน่ใจว่าได้ลบช่องว่างระหว่างคอลัมน์เหล่านั้นออก ในการดำเนินการนี้ เราจะใช้ความคิดเห็นและเพิ่มเอกสารประกอบลงในแต่ละส่วนเพื่อจัดระเบียบโค้ดของเราให้ดีขึ้น
...
...
...
ในการตรวจสอบ เราได้แสดงความคิดเห็นไว้ในบรรทัดที่ 3 โดยระบุส่วน "ผู้พูด" ที่ตามมา ที่ท้ายบรรทัดที่ 7 เราจะเปิดความคิดเห็นทันทีหลังแท็กปิด ภายในความคิดเห็นนี้ ในบรรทัดที่ 9 เรากำหนดส่วน "กำหนดการ" ต่อไปนี้ จากนั้นปิดความคิดเห็นที่จุดเริ่มต้นของบรรทัด 11 ก่อนแท็กเปิด - โครงสร้างความคิดเห็นที่คล้ายกันจะปรากฏในบรรทัดที่ 13 ถึง 17 ระหว่างองค์ประกอบทั้งสอง ก่อนถึงส่วนสถานที่จัดงาน โดยทั่วไป เราได้ใส่ความคิดเห็นเกี่ยวกับช่องว่างที่อาจเกิดขึ้นระหว่างคอลัมน์ ขณะเดียวกันก็ใช้ความคิดเห็นเดียวกันเพื่อระบุส่วนต่างๆ ของเรา
ขณะนี้เรามีตารางสามคอลัมน์ที่ใช้ซ้ำได้ซึ่งสนับสนุนเค้าโครงที่แตกต่างกัน โดยใช้ความกว้างคอลัมน์ 1/3 และ 2/3 หน้าแรกของเราตอนนี้มีสามคอลัมน์ โดยแยกทีเซอร์ทั้งหมดออก
ข้าว. 5.02. หน้าแรกของ Styles Conference มีเค้าโครงสามคอลัมน์แล้ว
การสาธิตและซอร์สโค้ด
ด้านล่างนี้ คุณสามารถดูเว็บไซต์ Styles Conference ในสถานะปัจจุบัน รวมถึงดาวน์โหลดซอร์สโค้ดปัจจุบันของเว็บไซต์ได้
การวางตำแหน่งองค์ประกอบที่ไม่ซ้ำ
ไม่ช้าก็เร็ว ทุกคนจะต้องการวางตำแหน่งองค์ประกอบอย่างแม่นยำ แต่องค์ประกอบแบบลอยหรือบล็อกแบบอินไลน์ไม่อนุญาตให้ใช้กลอุบายดังกล่าว องค์ประกอบแบบลอยที่ลบองค์ประกอบออกจากโฟลว์ของหน้ามักจะให้ผลลัพธ์ที่ไม่พึงประสงค์ เนื่องจากองค์ประกอบที่อยู่รอบๆ ล้อมรอบองค์ประกอบแบบลอย องค์ประกอบบล็อกแบบอินไลน์ เว้นแต่ว่าเรากำลังสร้างคอลัมน์ อาจค่อนข้างยุ่งยากเมื่อพูดถึงการวางตำแหน่งอย่างถูกต้อง สำหรับสถานการณ์เช่นนี้ เราสามารถใช้คุณสมบัติตำแหน่งร่วมกับคุณสมบัติออฟเซ็ตของบล็อกได้
คุณสมบัติตำแหน่งจะกำหนดวิธีการจัดตำแหน่งองค์ประกอบบนเพจ และจะแสดงในการไหลของเอกสารปกติหรือไม่ ใช้ร่วมกับคุณสมบัติออฟเซ็ตของบล็อก top , right , lower และ left ซึ่งกำหนดตำแหน่งองค์ประกอบที่จะวางอย่างแม่นยำโดยการเคลื่อนย้ายองค์ประกอบไปในทิศทางที่ต่างกัน
ตามค่าเริ่มต้น ค่าตำแหน่งขององค์ประกอบแต่ละรายการจะถูกตั้งค่าเป็น static ซึ่งหมายความว่าองค์ประกอบนั้นมีอยู่ในขั้นตอนปกติของเอกสาร และไม่ได้ใช้คุณสมบัติใดๆ ในการวางตำแหน่ง ค่าคงที่มักถูกเขียนทับโดยค่าสัมพัทธ์หรือค่าสัมบูรณ์ ซึ่งเราจะดูต่อไป
ตำแหน่งสัมพัทธ์
การตั้งค่าคุณสมบัติตำแหน่งเป็นแบบสัมพันธ์ช่วยให้องค์ประกอบปรากฏในโฟลว์ปกติของเพจ โดยสงวนพื้นที่สำหรับองค์ประกอบตามที่ตั้งใจไว้ และป้องกันไม่ให้องค์ประกอบอื่นๆ ไหลรอบๆ องค์ประกอบนั้น อย่างไรก็ตาม ยังช่วยให้คุณแก้ไขตำแหน่งขององค์ประกอบโดยใช้คุณสมบัติออฟเซ็ตได้ด้วย ตัวอย่างเช่น พิจารณา HTML และ CSS ต่อไปนี้:
...
...
...
Div ( ความสูง: 100px; ความกว้าง: 100px; ) .offset ( ซ้าย: 20px; ตำแหน่ง: ญาติ; ด้านบน: 20px; )
การสาธิตการวางตำแหน่งสัมพัทธ์
ที่นี่สำหรับองค์ประกอบที่สอง
ด้วยคลาสออฟเซ็ต ค่าตำแหน่งจะถูกตั้งค่าเป็นญาติ เช่นเดียวกับคุณสมบัติออฟเซ็ตสองรายการ - ด้านซ้ายและด้านบน การทำเช่นนี้จะรักษาตำแหน่งเดิมขององค์ประกอบ และองค์ประกอบอื่นๆ จะไม่ได้รับอนุญาตให้ย้ายเข้าไปในพื้นที่นั้น นอกจากนี้ คุณสมบัติออฟเซ็ตจะย้ายองค์ประกอบโดยการกด 20 พิกเซลจากด้านซ้าย และ 20 พิกเซลจากด้านบนของตำแหน่งเดิมสำหรับองค์ประกอบที่มีตำแหน่งค่อนข้างมาก สิ่งสำคัญคือต้องรู้ว่าคุณสมบัติออฟเซ็ตของบล็อกจะกำหนดตำแหน่งที่องค์ประกอบจะถูกย้าย โดยพิจารณาจากตำแหน่งเดิม ดังนั้นคุณสมบัติด้านซ้ายที่มีค่า 20 พิกเซลจะผลักองค์ประกอบไปทางขวา 20 พิกเซล คุณสมบัติบนสุดที่มีค่า 20px จะดันองค์ประกอบลง 20px
เมื่อเราวางตำแหน่งองค์ประกอบโดยใช้คุณสมบัติออฟเซ็ต องค์ประกอบจะซ้อนทับองค์ประกอบที่อยู่ด้านล่าง แทนที่จะกดลงเหมือนคุณสมบัติระยะขอบหรือช่องว่างภายใน
ตำแหน่งที่แน่นอน
ค่าสัมบูรณ์สำหรับคุณสมบัติตำแหน่งแตกต่างจากค่าสัมพัทธ์ตรงที่องค์ประกอบที่มีตำแหน่งที่แน่นอนไม่ปรากฏในโฟลว์ปกติของเอกสาร และไม่มีการสงวนพื้นที่และตำแหน่งดั้งเดิมขององค์ประกอบที่มีตำแหน่งที่แน่นอน
นอกจากนี้ องค์ประกอบที่มีตำแหน่งที่แน่นอนจะเคลื่อนที่โดยสัมพันธ์กับองค์ประกอบหลักที่อยู่ในตำแหน่งใกล้เคียงที่สุด หากไม่มีตำแหน่งพาเรนต์ที่ค่อนข้างสูง องค์ประกอบที่อยู่ในตำแหน่งที่แน่นอนจะถูกวางตำแหน่งโดยสัมพันธ์กับองค์ประกอบนั้น
- นี่เป็นข้อมูลเล็กๆ น้อยๆ มาดูกันว่ามันทำงานอย่างไรภายในโค้ดบางส่วน:
...
ส่วน ( ตำแหน่ง: ญาติ; ) div ( ตำแหน่ง: สัมบูรณ์; ขวา: 20px; ด้านบน: 20px; )
การสาธิตการวางตำแหน่งสัมบูรณ์
ในตัวอย่างนี้องค์ประกอบ อยู่ในตำแหน่งที่สัมพันธ์กับ แต่ไม่รวมคุณสมบัติออฟเซ็ตใดๆ ดังนั้นตำแหน่งจึงไม่เปลี่ยนแปลง องค์ประกอบ ด้วยคลาสออฟเซ็ตรวมถึงค่าตำแหน่งเป็นค่าสัมบูรณ์ ตั้งแต่ธาตุ เป็นองค์ประกอบหลักที่อยู่ในตำแหน่งใกล้เคียงที่สุด จากนั้นองค์ประกอบ จะมีตำแหน่งสัมพันธ์กับองค์ประกอบ
.สำหรับองค์ประกอบที่มีตำแหน่งค่อนข้างดี คุณสมบัติออฟเซ็ตจะกำหนดทิศทางที่องค์ประกอบจะถูกย้ายโดยสัมพันธ์กับตัวเอง สำหรับองค์ประกอบที่มีตำแหน่งที่แน่นอน คุณสมบัติออฟเซ็ตจะกำหนดทิศทางที่องค์ประกอบจะถูกย้ายโดยสัมพันธ์กับพาเรนต์ที่มีตำแหน่งใกล้เคียงที่สุด
อันเป็นผลมาจากคุณสมบัติด้านขวาและด้านบนองค์ประกอบ
จะปรากฏ 20 พิกเซลจากด้านขวา และ 20 พิกเซลจากด้านบนด้านใน
.ตั้งแต่ธาตุ
ตำแหน่งที่แน่นอน จะไม่อยู่ในตำแหน่งปกติของหน้า และจะทับซ้อนองค์ประกอบใดๆ รอบๆ หน้า อีกทั้งตำแหน่งเริ่มต้น ไม่ได้ถูกบันทึก และองค์ประกอบอื่นๆ อาจเข้ามาแทนที่นี้ โดยทั่วไป การวางตำแหน่งส่วนใหญ่สามารถเกิดขึ้นได้โดยไม่ต้องใช้คุณสมบัติตำแหน่งและคุณสมบัติออฟเซ็ต แต่ในบางกรณีอาจมีประโยชน์อย่างยิ่งประวัติย่อ
การเรียนรู้วิธีวางตำแหน่งเนื้อหาใน HTML และ CSS ถือเป็นก้าวสำคัญสู่การเรียนรู้ภาษาเหล่านี้ เพิ่มโมเดลบล็อกเข้าไปด้วย และเราก็พร้อมที่จะเป็นนักพัฒนาส่วนหน้า
ข้างต้นเราได้พูดถึงวิธีที่คุณสามารถวางตำแหน่งองค์ประกอบของหน้าโดยใช้ตารางได้ แต่สามารถทำได้โดยใช้สไตล์
- เพื่อระบุลำดับที่องค์ประกอบจะทับซ้อนกัน นี่เป็นมิติใหม่ องค์ประกอบที่มีดัชนี z ใหญ่กว่าจะปรากฏเหนือองค์ประกอบที่มีดัชนี z น้อยกว่า
แน่นอนว่าการใช้คุณสมบัติทั้งสามนี้ไม่ได้สร้างเอฟเฟกต์ของพื้นที่สามมิติ แต่นี่เป็นอะไรที่มากกว่าพื้นผิวเรียบ ในกรณีนี้เราพูดถึงพื้นที่ 2.5 มิติ นอกจากคุณสมบัติของพิกัดแล้ว เรายังต้องการคุณสมบัติอีกด้วยตำแหน่ง ซึ่งเมื่อรวมกับคุณสมบัติแล้วซ้าย และสูงสุด
ตัวอย่างต่อไปนี้แสดงการใช้คุณสมบัติ ดัชนี z- แม้ว่าในข้อความของโปรแกรมรูปภาพจะอธิบายไว้เหนือองค์ประกอบอื่น ๆ โดยการกำหนดดัชนีด้วยตัวเลขจำนวนมาก รูปภาพนั้นจะถูกย้ายไปไว้ด้านบนของข้อความแรก ดังนั้นการใช้ทรัพย์สิน ดัชนี zปลดปล่อยคุณจากพันธนาการของลำดับธรรมชาติของการกล่าวถึงองค์ประกอบในข้อความของโปรแกรม HTML
<НЕАD>การวางตำแหน่ง НЕАD>
ข้อความที่วางตำแหน่ง nepBbiuН1>
Н1>
ข้าว. 666. การใช้คุณสมบัติ i-index ช่วยให้คุณสามารถเปลี่ยนลำดับตามธรรมชาติขององค์ประกอบในข้อความของเอกสาร HTML
เมื่อวางองค์ประกอบองค์ประกอบอาจกลายเป็นว่าขนาดขององค์ประกอบเกินขนาดของชิ้นส่วน (พื้นที่จัดสรรที่ระบุในตัวอย่างของเราโดยแท็ก
- ตัวอย่างเช่น ข้อความหรือรูปภาพไม่พอดีกับสี่เหลี่ยมที่จัดสรรไว้อย่างสมบูรณ์ ในกรณีนี้ก็มีคุณสมบัติ ล้น(ล้น). คุณสมบัติ ล้นสามารถมีได้สามความหมาย:
ตัวอย่างต่อไปนี้ใช้คุณสมบัติ ล้นเพื่อสร้างกลไกการเลื่อนสำหรับข้อความแรก
<НЕАD><ТIТLЕ>การวางตำแหน่งТIТLЕ>НЕАD>
ข้อความที่วางตำแหน่ง riepBbiMН1>
ข้อความตำแหน่งที่สองН1>
ข้าว. 667 กลไกการเลื่อนข้อความถูกนำมาใช้โดยใช้คุณสมบัติโอเวอร์โฟลว์
แน่นอนว่าหน้าที่ไม่น่าดูจากภาพวาดก่อนหน้านี้ถูกสร้างขึ้นเพียงเพื่อแสดงให้เห็นถึงความสามารถของภาษาในการวางตำแหน่งองค์ประกอบต่างๆ
คุณตัดสินใจด้วยตัวเองว่าคุณจะใช้เครื่องมือใดและเพื่อวัตถุประสงค์ใดบนเว็บเพจของคุณ
การใช้คุณสมบัติการวางตำแหน่งทำให้การสร้างเอฟเฟกต์สามมิติสำหรับฉลากของคุณเป็นเรื่องง่าย แนวคิดก็คือการแสดงข้อความที่มีเนื้อหาเดียวกันซึ่งจะมีการเลื่อนเล็กน้อยเมื่อสัมพันธ์กันและลงสีด้วยสีที่ต่างกัน ลองเขียนโปรแกรมที่เกี่ยวข้องเป็นแบบฝึกหัด
รูปภาพแสดงสิ่งที่จะเกิดขึ้นโดยประมาณ ด้านล่างรูปเป็นหนึ่งในเวอร์ชันที่เป็นไปได้ของโปรแกรมที่สร้างคำจารึก "สามมิติ"ТITLE> <НЕАD>
ข้อความปริมาตร" STYLE = "ตำแหน่ง: สัมบูรณ์; บน: 0; ซ้าย: 0; ความกว้าง: 600;Р>
ข้อความปริมาตรР>
ความสูง:100;ระยะขอบ: บน: 10">
ข้อความปริมาตร โปรดทราบว่าวิธีการสร้างชื่อที่มีประสิทธิภาพนี้ประหยัดกว่าการใช้ไฟล์กราฟิกที่มีเนื้อหาคล้ายกันมากเมื่อวางตำแหน่งบล็อกที่สัมพันธ์กัน คุณจะต้องตั้งค่าคุณสมบัติ
ตำแหน่งสัมพัทธ์
ตำแหน่ง:ญาติ
และคุณสมบัติการเคลื่อนตัว การกระจัดในกรณีนี้จะเกิดขึ้นไม่สัมพันธ์กับองค์ประกอบ "พาเรนต์" (เช่นเดียวกับการวางตำแหน่งสัมบูรณ์) แต่สัมพันธ์กับบล็อกในการไหลปกติ สิ่งนี้จะชัดเจนยิ่งขึ้นด้วยตัวอย่าง สมมติว่าเรามีหน้า HTML ที่มี div สามรายการ:
มากำหนดขนาดและขอบเขตของบล็อกเหล่านี้ในสไตล์ชีต:
#blok1, #blok2, #blok3 ( ขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; )
ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้:
ตอนนี้เรามาเปลี่ยนตำแหน่งของบล็อกที่สองโดยการเพิ่มกฎลงในหน้าสไตล์:
#blok1, #blok2, #blok3 ( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; ) #blok2( ตำแหน่ง:ญาติ; ซ้าย:50px; ด้านบน:25px; )
ตอนนี้หน้าของเรามีลักษณะดังนี้:
บล็อกที่สองของเราได้เลื่อนลงและไปทางขวาสัมพันธ์กับตำแหน่งที่มันควรจะเป็นในกระแสปกติ บล็อกที่เหลือยังคงอยู่ในสถานที่ของพวกเขา ในทางปฏิบัติ การวางตำแหน่งแบบสัมพันธ์นั้นไม่ค่อยได้ใช้ ดังนั้นเราจะไม่ใส่ใจกับมันอีกต่อไป และจะพิจารณาบล็อกแบบลอย
บล็อกดังกล่าวสามารถเคลื่อนที่ไปรอบๆ หน้าได้อย่างอิสระ รูปภาพใน HTML ทำงานในลักษณะเดียวกัน โดยจัดเรียงโดยใช้พารามิเตอร์ จัดตำแหน่ง.
บล็อกลอยถูกกำหนดโดยคุณสมบัติ ลอยซึ่งกำหนดว่าบล็อกจะลอยอยู่หรือไม่และจะเคลื่อนที่ไปในทิศทางใด มีสามตัวเลือก:
ลองดูตัวอย่าง สมมติว่าเรามีหน้า HTML พร้อมด้วยโค้ดต่อไปนี้: การวางตำแหน่งบล็อก
บล็อก 1 ข้อความ
และหน้า style.css ด้วยโค้ดต่อไปนี้:
#blok1( ขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; )
ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้:
มาทำให้บล็อกของเราลอยแล้วดันไปทางขอบซ้าย:
#blok1( border:1px solid red; width:150px; height:50px; float:left; )
ทีนี้มาดันบล็อกไปที่ขอบด้านขวา:
#blok1( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; ลอย:ขวา; )
ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้:
จะเกิดอะไรขึ้นหากมีบล็อกลอยหลายบล็อกบนหน้า? มาเพิ่มบล็อกอื่นในหน้า html ของเรา:
การวางตำแหน่งบล็อก
บล็อก 1 ข้อความ
บล็อกข้อความ 2
เพียงองค์ประกอบบางส่วนบนหน้า อาจเป็นได้เพียงข้อความ ลิงก์ รายการ รูปภาพ ฯลฯ
และให้มูลค่าทรัพย์สินที่แตกต่างกันแก่พวกเขา ลอย:
#blok1( border:1px solid red; width:150px; height:50px; float:left; ) #blok2( border:1px solid red; width:150px; height:50px; float:right; )
ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้:
เกิดอะไรขึ้นถ้าพวกเขามีค่าเหมือนกัน? ตัวอย่างเช่น:
#blok1( border:1px solid red; width:150px; height:50px; float:left; ) #blok2( border:1px solid red; width:150px; height:50px; float:left; )
จากนั้นบล็อกที่สองจะถูกกดไปที่ขอบด้านขวาของบล็อกแรก:
สถานการณ์จะคล้ายกันสำหรับค่าเดียวกัน ขวา:
#blok1( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; ) #blok2( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; )
โปรดทราบ: บล็อกแรก 1 จะถูกกดไปที่ขอบด้านขวา จากนั้นบล็อก 2 จะถูกกดลงไป
แต่จะเป็นอย่างไรถ้าเราต้องการให้บล็อกถูกกดไปที่ขอบด้านขวา แต่อยู่ด้านล่างอีกบล็อกหนึ่ง มีคุณสมบัติสำหรับสิ่งนี้ ชัดเจนซึ่งระบุว่าด้านใดของบล็อกลอยไม่สามารถอยู่ติดกับบล็อกลอยอื่นได้ คุณสมบัตินี้สามารถตั้งค่าเป็นหนึ่งในสี่ค่า:
เรามาตั้งค่าคุณสมบัตินี้สำหรับบล็อกที่สองในตัวอย่างสุดท้ายของเรา: #blok1( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; ) #blok2( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; clear:right; )
ตอนนี้มันกลายเป็นอย่างที่ฉันต้องการ: หนึ่งช่วงตึกอยู่ใต้อีกช่วงหนึ่ง:
ในบทเรียนที่แล้ว เราได้สร้างเพจลักษณะนี้โดยใช้การกำหนดตำแหน่งแบบสัมบูรณ์:
มาดูกันว่าสามารถทำได้โดยใช้บล็อกลอยได้อย่างไร ดังนั้นโค้ดสำหรับเพจจึงเป็นดังนี้:
การวางตำแหน่งบล็อก
ส่วนหัวของไซต์
เนื้อหา
บล็อกข่าว
ด้านล่างของไซต์
ในหน้า style.css เรามาตั้งค่าขนาดและพื้นหลังสำหรับบล็อกของเรากันก่อน:
#header( พื้นหลัง:darkred; width:715px; height:100px; ) #menu( พื้นหลัง:oldlace; width:190px; height:300px; ) #content( พื้นหลัง:oldlace; width:525px; height:300px; ) #footer ( พื้นหลัง:darkred; width:715px; height:30px; ) #news( พื้นหลัง:สีเหลือง; ความกว้าง:150px; ความสูง:280px; )
ตอนนี้บล็อกของเราอยู่ในกระแสปกติเช่น อันหนึ่งอยู่ใต้อีกอันหนึ่ง เราจำเป็นต้องสร้างบล็อก เมนูและ เนื้อหาลอยและถนัดซ้าย บล็อก ข่าวควรกดชิดขอบด้านขวา เช่น เราจะทำให้มันเป็นบล็อกลอยมือขวา:
#header( พื้นหลัง:darkred; width:715px; height:100px; ) #menu( พื้นหลัง:oldlace; width:190px; height:300px; float:left; ) #content( พื้นหลัง:oldlace; width:525px; height:300px ; float:left; ) #footer( พื้นหลัง:darkred; width:715px; height:30px; ) #news( พื้นหลัง:สีเหลือง; ความกว้าง:150px; ความสูง:280px; float:right; )
หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้:
ลองดูบล็อกข่าวของเรา คุณจะเห็นว่ามันอยู่ใต้ข้อความในบล็อก เนื้อหา- แต่เราต้องการให้บล็อกข่าวอยู่ทางด้านขวา และข้อความจะไหลรอบๆ บล็อกข่าวทางด้านซ้าย
ทำไมมันไม่ได้ผลสำหรับเรา? เพราะบล็อคของเรา ข่าวในโค้ด html จะอยู่ด้านล่างข้อความและเฉพาะข้อความที่อยู่ด้านล่างเท่านั้นที่จะไหลไปรอบๆ เพื่อแก้ไขปัญหานี้ เราจำเป็นต้องวางของเรา div = "ข่าว"เหนือข้อความ (เช่น ก่อนคำว่า "เนื้อหา"):
การวางตำแหน่งบล็อก
ส่วนหัวของไซต์
บล็อกข่าว
เนื้อหา
ด้านล่างของไซต์
ตอนนี้บล็อกข่าวของเราเข้าแทนที่แล้ว:
และเพื่อไม่ให้กดใกล้กับขอบด้านบนและด้านขวา เราจะเพิ่มค่ามาร์จิ้นสำหรับบล็อกนี้:
#news( พื้นหลัง:สีเหลือง; ความกว้าง:150px; ความสูง:280px; ลอย:ขวา; ระยะขอบ:10px; )
ตอนนี้เราได้รับผลลัพธ์เช่นเดียวกับการวางตำแหน่งแบบสัมบูรณ์
ยอมรับว่าการใช้บล็อกลอยจะง่ายกว่าในการจัดวางหน้า: คุณไม่จำเป็นต้องนับพิกเซล และโค้ดจะสั้นกว่า นอกจากนี้ด้วยรูปแบบ "ของเหลว" เราไม่สามารถระบุตำแหน่งที่แน่นอนของบล็อกบนหน้าจอได้ และด้วยความช่วยเหลือของบล็อกลอยที่เราไม่ต้องการสิ่งนี้ ก็เพียงพอที่จะระบุเฉพาะจุดสังเกต (ทางด้านซ้ายบน ด้านขวา ด้านล่าง หรือในบรรทัดเดียวกัน)
บล็อกคงที่
ดังที่คุณจำได้ ด้วยการวางตำแหน่งที่คงที่ บล็อกจะคงที่โดยสัมพันธ์กับพื้นที่รับชม ในบางวิธี บล็อกแบบตายตัวจะคล้ายกับเฟรม การเลื่อนใช้ได้เฉพาะภายในเฟรมเท่านั้น แต่ไม่สามารถเลื่อนภายในบล็อกได้
บล็อกแบบคงที่มีข้อเสียเปรียบที่สำคัญประการหนึ่ง: เบราว์เซอร์ Internet Explorer ไม่รองรับ ดังนั้นจึงไม่ควรใช้ในตอนนี้ ดังนั้นที่นี่เราจะระบุเฉพาะไวยากรณ์ของกฎดังกล่าวหากคุณต้องการลองด้วยตัวเอง (เช่นในเบราว์เซอร์ Opera)
#blok( ตำแหน่ง:คงที่; ซ้าย:0px; ด้านบน:0px; )
บล็อกที่มีตัวระบุ "blok" จะยังคงอยู่เมื่อเลื่อนหน้า
นั่นคือทั้งหมดสำหรับวันนี้ ในบทต่อไป เราจะมาทำความรู้จักกับคุณสมบัติของบล็อกและประเภทของบล็อกเพิ่มเติม
ตามที่กล่าวไว้ข้างต้น คุณสามารถกำหนดตำแหน่งขององค์ประกอบ HTML ใดก็ได้ ไม่จำเป็นต้องมีแท็กเสมอไปสำหรับสิ่งนี้
ความหมายของการใช้บล็อกที่ระบุโดยแท็ก การวางตำแหน่งมีสี่ประเภทหลัก: 1. คงที่ ใช้เป็นตำแหน่งเริ่มต้น ในกรณีนี้เบราว์เซอร์จะดูโค้ด HTML แบ่งออกเป็นองค์ประกอบและเขียนหน้าจากองค์ประกอบเหล่านั้น ผลลัพธ์ที่ได้คือลำดับขององค์ประกอบจำนวนหนึ่ง จะแสดงตามลำดับที่ระบุไว้ในโค้ด html การใช้พารามิเตอร์ ซ้าย บน ขวา และล่างไม่นำไปสู่ผลลัพธ์ใดๆ ต้องคำนึงถึงการวางตำแหน่งแบบคงที่เมื่อใช้การวางตำแหน่งแบบสัมพันธ์ เมื่อใช้การวางตำแหน่งที่แน่นอน พิกัดของมุมซ้ายบนของบล็อกจะถูกระบุ ในกรณีนี้ พิกัดจะถูกนับโดยสัมพันธ์กับตำแหน่งขององค์ประกอบหลัก หากองค์ประกอบหลักคือหน้าต่างเบราว์เซอร์ บล็อกนั้นก็จะอยู่ในแนวสัมพันธ์กัน หากมีองค์ประกอบอื่นที่บล็อกตั้งอยู่ การจัดตำแหน่งจะเกิดขึ้นโดยสัมพันธ์กับองค์ประกอบนี้ จากชื่อเป็นที่ชัดเจนว่าในกรณีนี้องค์ประกอบได้รับการแก้ไขแล้ว ตั้งอยู่ในตำแหน่งเฉพาะบนหน้าเว็บและไม่ย้ายไปที่ใด การจัดแนวประเภทนี้มักใช้สำหรับป๊อปอัป โดยจะอยู่ตรงกลางและไม่เลื่อนเมื่อคุณเลื่อนหน้า การวางตำแหน่งประเภทนี้อาจทำได้ยาก ชื่อของมันไม่เหมาะเลย หลายๆ คนสับสนระหว่างการวางตำแหน่งองค์ประกอบแบบสัมพัทธ์และแบบสัมบูรณ์ อาจปรากฏว่าการจัดตำแหน่งสัมพันธ์กับองค์ประกอบหลัก และในกรณีของการวางตำแหน่งที่แน่นอน - สัมพันธ์กับหน้าต่างเบราว์เซอร์ แต่นั่นไม่เป็นความจริง มีความจำเป็นต้องเข้าใจว่าตำแหน่งขององค์ประกอบในกรณีนี้เกิดขึ้นสัมพันธ์กับตำแหน่งขององค์ประกอบในตำแหน่งคงที่ นี่คือสิ่งที่กล่าวมาข้างต้น พูดง่ายๆ ก็คือ คุณบอกให้เบราว์เซอร์ย้ายองค์ประกอบจำนวนพิกเซลมากโดยสัมพันธ์กับตำแหน่งที่องค์ประกอบนั้นอยู่ตามค่าเริ่มต้น มีอีกจุดที่ยาก จะเกิดอะไรขึ้นหากองค์ประกอบหลักมีตำแหน่งที่สัมพันธ์กัน แต่องค์ประกอบที่ซ้อนกันมีตำแหน่งที่แน่นอน ในกรณีนี้ พิกัดขององค์ประกอบลูกจะถูกนับโดยสัมพันธ์กับองค์ประกอบหลัก โดยคำนึงถึงออฟเซ็ตขององค์ประกอบนั้น ถ้ามี จึงมีทรัพย์สมบัติ ตำแหน่ง- คุณสมบัตินี้รับได้ 4 ค่า คงที่ สัมบูรณ์ คงที่ และสัมพันธ์กัน- ค่าเริ่มต้นคือ คงที่. เมื่อคุณระบุพิกัดสำหรับองค์ประกอบ คุณต้องบอกเบราว์เซอร์ด้วยว่าควรคำนวณพิกัดเหล่านั้นอย่างไร เราต้องให้จุดเริ่มต้นแก่เขา อย่าลืมว่าหากไม่มีทรัพย์สิน ตำแหน่งพิกัดจะไม่ถูกนำมาพิจารณา บล็อกจะยังคงอยู่ในตำแหน่งเดิมในตำแหน่งคงที่ เพื่อวัตถุประสงค์เหล่านี้ มีการใช้คุณสมบัติสี่ประเภท: 1. ด้านบน สูงสุด- ค่าบวก (เช่น 20px) จะย้ายบล็อกลง 20 พิกเซล ค่าลบ (-20px) จะย้ายองค์ประกอบขึ้น 20 พิกเซล ทั้งหมดนี้เกิดขึ้นสัมพันธ์กับมุมซ้ายบน ซ้าย- เลื่อนไปทางซ้ายหรือขวาขึ้นอยู่กับป้าย สัมพันธ์กับมุมซ้ายบน ขวา- เลื่อนไปทางขวาและซ้ายขึ้นอยู่กับป้าย สัมพันธ์กับมุมขวาบน ด้านล่าง- เลื่อนขึ้นหรือลงขึ้นอยู่กับป้าย เกิดขึ้นสัมพันธ์กับมุมซ้ายล่าง นี่คือโค้ด HTML: และนี่คือ CSS: #1 { #11 { #2 { ฝึกฝน. ในขณะที่ฉันกำลังเขียนอยู่ฉันก็คิดออกเอง เครื่องมือหลักสองอย่างมักใช้สำหรับการจัดวางหน้า - การวางตำแหน่งและ การเคลื่อนไหวอย่างอิสระ (ลอยตัว)- การวางตำแหน่ง CSS ช่วยให้คุณระบุตำแหน่งที่กล่องขององค์ประกอบปรากฏ และ Free Float จะย้ายองค์ประกอบไปที่ขอบซ้ายหรือขวาของกล่องคอนเทนเนอร์ ทำให้เนื้อหาที่เหลือ "ไหล" ไปรอบๆ ได้ คุณสมบัติตำแหน่งช่วยให้คุณสามารถระบุตำแหน่งใหม่ของบล็อกได้อย่างแม่นยำโดยสัมพันธ์กับตำแหน่งที่จะอยู่ในโฟลว์ปกติของเอกสาร ตามค่าเริ่มต้น องค์ประกอบทั้งหมดจะถูกจัดเรียงตามลำดับตามลำดับที่กำหนดไว้ในโครงสร้างของเอกสาร HTML ทรัพย์สินไม่ได้รับมรดก หากสำหรับองค์ประกอบที่มีตำแหน่งค่อนข้างสูงคุณตั้งค่าคุณสมบัติด้านบนและด้านล่างหรือซ้ายและขวาในเวลาเดียวกัน ในกรณีแรกเฉพาะด้านบนเท่านั้นที่จะใช้งานได้ ในวินาทีที่สอง - ซ้าย การวางตำแหน่งแบบสัมพัทธ์ช่วยให้คุณสามารถตั้งค่าดัชนี z สำหรับองค์ประกอบได้ เช่นเดียวกับการวางตำแหน่งองค์ประกอบย่อยภายในบล็อก ตำแหน่งของขอบขององค์ประกอบถูกกำหนดโดยใช้คุณสมบัติออฟเซ็ต พื้นที่ที่องค์ประกอบดังกล่าวครอบครองจะยุบลงราวกับว่าไม่มีองค์ประกอบนั้นอยู่บนเพจ องค์ประกอบที่มีตำแหน่งที่แน่นอนสามารถซ้อนทับหรือถูกองค์ประกอบอื่นๆ ทับได้ (เนื่องจากคุณสมบัติดัชนี z) องค์ประกอบใด ๆ ที่อยู่ในตำแหน่งที่แน่นอนจะสร้างบล็อก กล่าวคือ จะใช้กับค่า display: block; - คุณสมบัติอธิบายออฟเซ็ตที่สัมพันธ์กับด้านที่ใกล้ที่สุดของบล็อกคอนเทนเนอร์ ตั้งค่าสำหรับองค์ประกอบที่ค่าคุณสมบัติตำแหน่งไม่คงที่ สามารถรับได้ทั้งค่าบวกและค่าลบ ไม่ได้รับมรดก สำหรับคุณสมบัติด้านบน ค่าบวกจะย้ายขอบด้านบนขององค์ประกอบที่อยู่ในตำแหน่งด้านล่าง และค่าลบจะย้ายขอบด้านบนของบล็อกคอนเทนเนอร์ สำหรับคุณสมบัติด้านซ้าย ค่าบวกจะย้ายขอบขององค์ประกอบที่อยู่ในตำแหน่งไปทางขวา และค่าลบจะเลื่อนขอบขององค์ประกอบที่อยู่ในตำแหน่งไปทางซ้าย นั่นคือค่าบวกจะย้ายองค์ประกอบภายในบล็อกคอนเทนเนอร์และค่าลบจะย้ายองค์ประกอบไปด้านนอก สำหรับบล็อกคอนเทนเนอร์ขององค์ประกอบที่มีตำแหน่งที่แน่นอน ตำแหน่ง: คุณสมบัติสัมพัทธ์จะถูกตั้งค่าโดยไม่มีออฟเซ็ต ซึ่งช่วยให้องค์ประกอบสามารถวางตำแหน่งภายในองค์ประกอบคอนเทนเนอร์ได้
1. หากตั้งค่าความกว้างหรือความสูงขององค์ประกอบในตำแหน่งที่แน่นอนเป็น auto ค่าจะถูกกำหนดโดยความกว้างหรือความสูงของเนื้อหาขององค์ประกอบ หากมีการประกาศความกว้างหรือความสูงอย่างชัดเจน นี่คือค่าที่จะกำหนด ในลำดับปกติ องค์ประกอบบล็อกจะแสดงผลโดยเริ่มจากขอบด้านบนของหน้าต่างเบราว์เซอร์และทำงานไปทางขอบด้านล่าง คุณสมบัติ float ช่วยให้คุณสามารถย้ายองค์ประกอบใด ๆ โดยจัดตำแหน่งให้ชิดขอบซ้ายหรือขวาของหน้าเว็บหรือองค์ประกอบคอนเทนเนอร์ที่ประกอบด้วยองค์ประกอบนั้น ในกรณีนี้ องค์ประกอบบล็อกอื่นๆ จะเพิกเฉย และองค์ประกอบในบรรทัดจะย้ายไปทางขวาหรือซ้าย เพื่อเพิ่มพื้นที่ว่างและไหลไปรอบๆ บล็อกแบบลอยใช้มิติของเนื้อหา โดยคำนึงถึงช่องว่างภายในและเส้นขอบ ขอบด้านบนและด้านล่างขององค์ประกอบแบบลอยไม่ยุบ คุณสมบัติ float ใช้กับทั้งองค์ประกอบบล็อกและองค์ประกอบแบบอินไลน์ ขอบด้านนอกด้านซ้ายหรือขวาขององค์ประกอบที่ถูกย้าย ต่างจากองค์ประกอบที่มีตำแหน่ง ไม่สามารถวางไปทางซ้าย (หรือขวา) ของขอบด้านในของบล็อกคอนเทนเนอร์ได้ เช่น ก้าวข้ามขอบเขตของมัน นอกจากนี้ หากมีการระบุช่องว่างภายในสำหรับคอนเทนเนอร์บล็อก บล็อกลอยจะมีระยะห่างจากขอบของคอนเทนเนอร์บล็อกตามระยะทางที่กำหนด คุณสมบัติจะเปลี่ยนค่าที่คำนวณ (แสดงเบราว์เซอร์) ของคุณสมบัติการแสดงผลโดยอัตโนมัติเพื่อแสดง: บล็อกสำหรับค่าต่อไปนี้: inline , inline-block , table-row , table-row-group , table-column , table-column-group , ตารางเซลล์ ค่าของการเปลี่ยนแปลงตารางอินไลน์เป็นตาราง คุณสมบัติไม่มีผลกระทบต่อองค์ประกอบที่มี display: flex และ display: inline-flex เมื่อใช้คุณสมบัติ float กับองค์ประกอบบล็อก ต้องแน่ใจว่าได้ระบุความกว้าง สิ่งนี้จะสร้างพื้นที่สำหรับเนื้อหาอื่นในเบราว์เซอร์ แต่ถ้าความกว้างรวมของคอลัมน์ทั้งหมดมากกว่าพื้นที่ว่าง องค์ประกอบสุดท้ายจะลดลง ในเวลาเดียวกัน ขอบแนวตั้งขององค์ประกอบแบบลอยจะไม่ยุบลงพร้อมกับระยะขอบขององค์ประกอบข้างเคียง ซึ่งแตกต่างจากองค์ประกอบบล็อกทั่วไป คุณสมบัติที่ชัดเจนจะกำหนดว่าองค์ประกอบที่ตามหลังองค์ประกอบลอยตัวจะถูกวางตำแหน่งอย่างไร คุณสมบัติยกเลิกการลอยบนด้านใดด้านหนึ่งหรือทั้งสองด้านขององค์ประกอบที่กำหนดโดยคุณสมบัติลอย หากต้องการป้องกันไม่ให้พื้นหลังหรือเส้นขอบแสดงใต้องค์ประกอบแบบลอย ให้ใช้กฎ (overflow: ซ่อนเร้น;) สมมติว่าคุณมีคอนเทนเนอร์บล็อกที่ไม่ได้ระบุความกว้างและความสูง บล็อกลอยที่มีขนาดที่ระบุจะถูกวางไว้ข้างใน
สารละลาย:
ตัวเลือกที่สองสำหรับการล้างสตรีม: Clearfix:หลัง (เนื้อหา: ""; แสดง: ตาราง; ชัดเจน: ทั้งสอง; ) มีเคล็ดลับอีกอย่างหนึ่งในการล้างโฟลว์สำหรับองค์ประกอบที่มีองค์ประกอบลอย เช่น รายการสัญลักษณ์แสดงหัวข้อย่อยแนวนอน: Ul ( ระยะขอบ: 0; สไตล์รายการ: ไม่มี; การขยาย: 20px; พื้นหลัง: #e7e6d4; ล้น: อัตโนมัติ; ) li ( ลอย: ซ้าย; ความกว้าง: คำนวณ (100% / 3 - 20px); ความสูง: 50px; ระยะขอบ- ขวา: 20px; พื้นหลัง: #ffffff; เส้นขอบ: 3px ประ #666666; ) li:last-child (ระยะขอบ-ขวา: 0;) 6. ทำความสะอาดโฟลว์รายการแนวนอน หนึ่งในสิ่งที่ดีที่สุดเกี่ยวกับ CSS คือสไตล์ทำให้เราสามารถวางตำแหน่งเนื้อหาและองค์ประกอบบนเพจได้แทบทุกวิถีทางเท่าที่จะจินตนาการได้ สิ่งนี้จะเพิ่มโครงสร้างให้กับการออกแบบของเราและช่วยทำให้เนื้อหามีภาพมากขึ้น การวางตำแหน่งใน CSS มีหลายประเภท แต่ละประเภทมีขอบเขตของตัวเอง ในบทนี้ เราจะดูกรณีการใช้งานที่แตกต่างกันสองสามกรณี — การสร้างเลย์เอาต์ที่นำมาใช้ซ้ำได้ และการวางตำแหน่งองค์ประกอบแบบใช้แล้วทิ้งที่ไม่ซ้ำกัน — รวมถึงการอธิบายวิธีการบางอย่างในการดำเนินการดังกล่าว วิธีหนึ่งในการวางตำแหน่งองค์ประกอบบนเพจคือผ่านคุณสมบัติ float คุณสมบัตินี้ค่อนข้างหลากหลายและสามารถใช้งานได้หลายวิธี โดยพื้นฐานแล้ว คุณสมบัติ float จะรับองค์ประกอบ ลบออกจากโฟลว์ปกติของเพจ และวางตำแหน่งไว้ทางซ้ายหรือขวาขององค์ประกอบหลัก องค์ประกอบอื่นๆ ทั้งหมดในหน้าจะล้อมรอบองค์ประกอบดังกล่าว ตัวอย่างเช่น ย่อหน้าจะล้อมรอบรูปภาพหากเป็นองค์ประกอบ ตั้งค่าคุณสมบัติ float แล้ว เมื่อใช้คุณสมบัติ float กับองค์ประกอบหลายรายการพร้อมกัน จะทำให้สามารถสร้างเลย์เอาต์ที่มีองค์ประกอบลอยอยู่ติดกันหรือตรงข้ามกัน ดังที่แสดงในโครงร่างแบบหลายคอลัมน์ คุณสมบัติ float รับค่าหลายค่า โดยค่าที่ได้รับความนิยมมากที่สุด 2 ค่าคือค่าซ้ายและขวา ซึ่งทำให้องค์ประกอบลอยไปทางซ้ายหรือขวาของค่าแม่ Img ( ลอย: ซ้าย; ) เรามาสร้างเค้าโครงหน้าทั่วไปโดยมีส่วนหัวอยู่ด้านบน สองคอลัมน์ตรงกลาง และส่วนท้ายอยู่ที่ด้านล่าง ตามหลักการแล้ว หน้านี้ควรมาร์กอัปด้วยองค์ประกอบต่างๆ
นี่คือองค์ประกอบ ส่วน ( ลอย: ซ้าย; ) กัน ( ลอย: ขวา; ) สำหรับการอ้างอิง องค์ประกอบแบบลอยจะถูกวางตำแหน่งตามขอบขององค์ประกอบหลัก หากไม่มีพาเรนต์ องค์ประกอบแบบลอยจะถูกวางตำแหน่งที่ขอบของหน้า เมื่อเราตั้งค่าองค์ประกอบให้ลอย เราจะลบออกจากโฟลว์ปกติของเอกสาร HTML ซึ่งจะทำให้ความกว้างเริ่มต้นขององค์ประกอบนั้นกลายเป็นความกว้างของเนื้อหา บางครั้ง เช่น เมื่อเรากำลังสร้างคอลัมน์สำหรับเค้าโครงที่นำมาใช้ใหม่ ลักษณะการทำงานนี้เป็นสิ่งที่ไม่พึงประสงค์ ซึ่งสามารถแก้ไขได้โดยการเพิ่มคุณสมบัติความกว้างที่มีค่าคงที่สำหรับแต่ละคอลัมน์ นอกจากนี้ เพื่อป้องกันไม่ให้องค์ประกอบที่ลอยอยู่แตะกัน ส่งผลให้เนื้อหาขององค์ประกอบหนึ่งอยู่ติดกัน เราสามารถใช้คุณสมบัติมาร์จิ้นเพื่อกำหนดช่องว่างระหว่างองค์ประกอบต่างๆ ด้านล่างนี้เราขยายบล็อกโค้ดก่อนหน้าโดยการเพิ่มระยะขอบและความกว้างสำหรับแต่ละคอลัมน์เพื่อให้รูปร่างผลลัพธ์ที่เราต้องการดีขึ้น ส่วน ( ลอย: ซ้าย; ระยะขอบ: 0 1.5%; ความกว้าง: 63%; ) กัน ( ลอย: ขวา; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; ) สำหรับองค์ประกอบแบบลอย สิ่งสำคัญคือต้องเข้าใจว่าองค์ประกอบนั้นถูกลบออกจากโฟลว์ปกติของหน้า และค่าที่แสดงเริ่มต้นขององค์ประกอบอาจเปลี่ยนแปลงได้ คุณสมบัติ float อาศัยค่าการแสดงผลขององค์ประกอบที่ถูกตั้งค่าเป็นบล็อก และสามารถเปลี่ยนค่าการแสดงผลเริ่มต้นขององค์ประกอบได้ หากยังไม่ได้แสดงผลเป็นองค์ประกอบบล็อก ตัวอย่างเช่น องค์ประกอบที่ระบุการแสดงผลเป็นแบบอินไลน์ เช่น อินไลน์ ละเว้นคุณสมบัติความสูงหรือความกว้างใดๆ อย่างไรก็ตาม หากคุณระบุทศนิยมสำหรับองค์ประกอบแบบอินไลน์ ค่าที่แสดงจะเปลี่ยนเป็นบล็อก จากนั้นองค์ประกอบจะสามารถใช้คุณสมบัติความสูงหรือความกว้างได้แล้ว เมื่อเราลอยองค์ประกอบ เราต้องระวังว่าจะส่งผลต่อค่าของคุณสมบัติการแสดงผลอย่างไร สำหรับสองคอลัมน์ คุณสามารถตั้งค่า float คอลัมน์หนึ่งเป็นด้านซ้ายและอีกคอลัมน์เป็นด้านขวา แต่สำหรับหลายคอลัมน์ เราจะต้องเปลี่ยนแนวทางของเรา ตัวอย่างเช่น สมมติว่าเราต้องการให้มีแถวสามคอลัมน์ระหว่างองค์ประกอบของเรา
เพื่อจัดองค์ประกอบทั้งสามนี้ ส่วน ( ลอย: ซ้าย; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; ) ที่นี่เรามีสามคอลัมน์ โดยทั้งหมดมีความกว้างและค่าระยะขอบเท่ากัน และตั้งค่าลอยไปทางซ้าย คุณสมบัติ float ได้รับการออกแบบมาเพื่อให้เนื้อหาไหลไปรอบๆ รูปภาพ ภาพสามารถทำให้เกิดการลอยตัวและเนื้อหาทั้งหมดที่อยู่รอบๆ ภาพนั้นจะไหลไปรอบๆ ภาพนั้นอย่างเป็นธรรมชาติ แม้ว่าคุณสมบัตินี้จะใช้งานได้ดีกับรูปภาพ แต่คุณสมบัติ float ไม่ได้มีจุดประสงค์เพื่อใช้ในการจัดวางและการวางตำแหน่งจริงๆ ดังนั้นจึงมาพร้อมกับข้อผิดพลาดบางประการ ข้อผิดพลาดอย่างหนึ่งคือบางครั้งสไตล์ที่เหมาะสมไม่ปรากฏบนองค์ประกอบที่อยู่ติดกันหรือเป็นพาเรนต์ขององค์ประกอบแบบลอย เมื่อองค์ประกอบถูกตั้งค่าเป็นลอย องค์ประกอบนั้นจะถูกลบออกจากโฟลว์ปกติของเพจ และด้วยเหตุนี้ รูปแบบขององค์ประกอบรอบๆ องค์ประกอบที่ลอยอยู่จึงอาจได้รับผลกระทบในทางลบ บ่อยครั้งที่ค่าของคุณสมบัติระยะขอบและช่องว่างภายในถูกตีความอย่างไม่ถูกต้อง ส่งผลให้ค่าเหล่านั้นผสานเข้ากับองค์ประกอบลอยตัว คุณสมบัติอื่น ๆ อาจได้รับผลกระทบเช่นกัน จุดบกพร่องอีกประการหนึ่งคือบางครั้งเนื้อหาที่ไม่ต้องการเริ่มพันรอบองค์ประกอบโฟลต การลบองค์ประกอบออกจากโฟลว์ของเอกสารทำให้องค์ประกอบทั้งหมดรอบๆ องค์ประกอบแบบลอยสามารถข้ามได้ และใช้พื้นที่ว่างรอบๆ องค์ประกอบแบบลอย ซึ่งมักไม่เป็นที่พึงปรารถนา ในตัวอย่างสองคอลัมน์ก่อนหน้าของเรา หลังจากที่เราเพิ่มทศนิยมให้กับองค์ประกอบแล้ว เพื่อป้องกันไม่ให้เนื้อหาพันรอบองค์ประกอบแบบลอย เราจำเป็นต้องล้างโฟลตและทำให้เพจกลับสู่โฟลว์ปกติ เราจะมาดูวิธีการเคลียร์โฟลตแล้วมาดูเนื้อหากันดีกว่า การล้างโฟลตเกิดขึ้นโดยใช้คุณสมบัติ clear ซึ่งใช้ค่าที่แตกต่างกันหลายค่า: ค่าที่ใช้บ่อยที่สุดคือ left , right และทั้งสองอย่าง Div ( ชัดเจน: ซ้าย; ) ค่าทางซ้ายจะล้างโฟลตทางซ้าย ในขณะที่ค่าทางขวาจะล้างโฟลตทางขวา อย่างไรก็ตาม ค่าทั้งสอง จะล้างโฟลตซ้ายและขวา และมักจะเป็นตัวเลือกที่เหมาะสมที่สุด กลับไปที่ตัวอย่างก่อนหน้านี้ หากเราใช้คุณสมบัติ clear ที่มีค่าทั้งสองอย่างในองค์ประกอบ ส่วนท้าย ( ชัดเจน: ทั้งสอง; ) แทนที่จะล้างข้อมูล float อีกทางเลือกหนึ่งคือตั้งค่าเนื้อหาให้ลอย ผลลัพธ์จะค่อนข้างเหมือนเดิม แต่เนื้อหาแบบลอยช่วยให้แน่ใจว่าสไตล์ของเราทั้งหมดจะแสดงอย่างถูกต้อง ในการตั้งค่าเนื้อหาแบบลอย องค์ประกอบแบบลอยจะต้องอยู่ภายในองค์ประกอบหลัก โดยจะทำหน้าที่เป็นคอนเทนเนอร์ ปล่อยให้การไหลของเอกสารภายนอกเป็นปกติโดยสมบูรณ์ การจัดสไตล์สำหรับองค์ประกอบหลักนี้แสดงโดยคลาสกลุ่ม ดังที่แสดงไว้ที่นี่: Group::before, .group::after ( content: ""; display: table; ) .group::after ( clear: ทั้งสอง; ) .group ( clear: ทั้งสอง; *zoom: 1; ) ไม่ค่อยมีอะไรเกิดขึ้นมากนัก แต่โดยพื้นฐานแล้ว CSS ทั้งหมดจะล้างองค์ประกอบที่ลอยอยู่ทั้งหมดภายในองค์ประกอบกลุ่มและคืนเอกสารกลับสู่โฟลว์ปกติ โดยเฉพาะอย่างยิ่ง องค์ประกอบหลอก ::before และ ::after ตามที่กล่าวไว้ในบทที่ 4 จะสร้างองค์ประกอบแบบไดนามิกด้านบนและด้านล่างองค์ประกอบด้วยกลุ่มคลาส องค์ประกอบเหล่านี้ไม่รวมเนื้อหาใดๆ และแสดงผลเป็นองค์ประกอบตาราง คล้ายกับองค์ประกอบบล็อก องค์ประกอบที่สร้างขึ้นแบบไดนามิกหลังจากองค์ประกอบกลุ่มล้างโฟลตภายในองค์ประกอบกลุ่ม เช่นเดียวกับที่ชัดเจนก่อนหน้านี้ ในที่สุด องค์ประกอบกลุ่มยังล้างโฟลตใด ๆ ที่อาจปรากฏขึ้นก่อนหน้านั้น ในกรณีที่มีการโฟลตที่มีค่า left หรือ right รวมไปถึงเคล็ดลับเล็กน้อยที่ทำให้เบราว์เซอร์รุ่นเก่าเล่นได้ดี มีโค้ดมากกว่าแค่ clear: ทั้งสองคำสั่ง แต่มันค่อนข้างมีประโยชน์ เมื่อพิจารณาเค้าโครงหน้าสองคอลัมน์ของเราแล้ว เราก็สามารถสรุปได้
Group::before, .group::after ( content: ""; display: table; ) .group::after ( clear:both; ) .group ( clear:both; *zoom: 1; ) ส่วน ( float: left ; ระยะขอบ: 0 1.5%; ความกว้าง: 63%; ) กัน ( ลอย: ขวา; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; ) เทคนิคที่แสดงที่นี่เรียกว่า "clearfix" และมักพบเห็นได้ทั่วไปในไซต์อื่นที่มีชื่อคลาส clearfix หรือ cf เราเลือกใช้กลุ่มชื่อคลาสเนื่องจากแสดงถึงกลุ่มขององค์ประกอบและแสดงเนื้อหาได้ดีกว่า เมื่อองค์ประกอบลอยอยู่ สิ่งสำคัญคือต้องตรวจสอบว่าองค์ประกอบเหล่านั้นส่งผลต่อโฟลว์เพจอย่างไร และให้แน่ใจว่าโฟลว์เพจถูกรีเซ็ตโดยการล้างหรือผ่านเนื้อหาโฟลตตามที่ตั้งใจไว้ มิฉะนั้น การติดตามจำนวนโฟลตอาจทำให้เกิดอาการปวดหัวได้มาก โดยเฉพาะในหน้าที่มีหลายแถว โดยแต่ละแถวมีหลายคอลัมน์ กลับไปที่ไซต์ Styles Conference แล้วลองเพิ่มโฟลตให้กับเนื้อหาบางส่วน /* ================================================ ====== เคลียร์ฟิกซ์ ======= =================================== * / .group::before, .group::after ( เนื้อหา: " "; แสดง: ตาราง; ) .group::after ( ชัดเจน: ทั้งสอง; ) .group ( ชัดเจน: ทั้งสอง; *ซูม: 1; ) ไปทางซ้ายและปล่อยให้เนื้อหาที่เหลือในส่วนหัวไหลไปทางขวา
/* ======================================= หัวเรื่องหลัก ====== = =================================== */ .logo ( float: left; ) หรือการแบ่งบรรทัดระหว่างคำว่า "สไตล์" และ "การประชุม" เพื่อบังคับให้ข้อความโลโก้ของเราปรากฏเป็นสองบรรทัด
การประชุม โลโก้ ( ขอบบน: 4px solid #648880; padding: 40px 0 22px 0; float: left; )
เราจะเพิ่มคลาสกลุ่มลงไป นี่จะใช้สไตล์ clearfix ที่เราตั้งไว้ก่อนหน้านี้ ไม่เหมือนธาตุ เริ่มต้นด้วยการเพิ่มคลาส primary-footer ให้กับองค์ประกอบ
ตอนนี้คลาส primary-footer ถูกตั้งค่าบนองค์ประกอบแล้ว เพื่อตรวจสอบ - ที่นี่เราเลือกองค์ประกอบ ซึ่งควรอยู่ภายในองค์ประกอบที่มีค่าแอตทริบิวต์คลาสเป็น primary-footer เช่นองค์ประกอบของเรา สุดท้ายนี้ เราจะเพิ่มช่องว่างภายในเล็กน้อยที่ด้านบนและด้านล่างขององค์ประกอบ ส่วนท้ายหลัก ( padding-bottom: 44px; padding-top: 44px; ) คำนึงถึงการเปลี่ยนแปลงองค์ประกอบทั้งหมดนี้ ข้าว. 5.01. การใช้องค์ประกอบลอยหลายรายการ นอกเหนือจากการใช้ float แล้ว อีกวิธีหนึ่งที่เราสามารถวางตำแหน่งเนื้อหาได้คือการใช้คุณสมบัติการแสดงผลร่วมกับค่า inline-block วิธีการบล็อกแบบอินไลน์ ดังที่เราจะกล่าวถึงในภายหลัง มีประโยชน์เป็นหลักสำหรับการจัดวางหน้าหรือการวางองค์ประกอบในบรรทัดที่อยู่ติดกัน โปรดจำไว้ว่าค่าบล็อกอินไลน์สำหรับคุณสมบัติการแสดงผลจะแสดงองค์ประกอบในบรรทัด และอนุญาตให้องค์ประกอบเหล่านั้นรับคุณสมบัติทั้งหมดของโมเดลกล่อง รวมถึงความสูง ความกว้าง การแพ็ดดิ้ง เส้นขอบ และระยะขอบ การใช้ inline-block ช่วยให้เราสามารถใช้ประโยชน์จากโมเดลบล็อกได้อย่างเต็มที่โดยไม่ต้องกังวลกับการล้างโฟลตใดๆ ลองมาดูตัวอย่างสามคอลัมน์ของเราตั้งแต่ต้น เราจะเริ่มต้นด้วยการบันทึก HTML ของเราดังนี้:
ตอนนี้แทนที่จะลอยสำหรับองค์ประกอบทั้งสามของเรา ส่วน ( จอแสดงผล: อินไลน์บล็อก; ระยะขอบ: 0 1.5%; ความกว้าง: 30%; ) น่าเสียดายที่โค้ดนี้เพียงอย่างเดียวไม่เพียงพอที่จะทำเคล็ดลับและองค์ประกอบสุดท้าย มีหลายวิธีในการลบช่องว่างระหว่างองค์ประกอบบล็อกอินไลน์ และบางวิธีก็ซับซ้อนกว่าวิธีอื่นๆ เราจะมุ่งเน้นไปที่สองวิธีที่ง่ายที่สุด ซึ่งทั้งสองวิธีเกิดขึ้นใน HTML วิธีแก้ไขแรกคือการใส่แท็กเปิดองค์ประกอบใหม่แต่ละรายการ
การเขียนองค์ประกอบแบบอินไลน์บล็อกด้วยวิธีนี้ทำให้มั่นใจได้ว่าไม่มีช่องว่างระหว่างองค์ประกอบดังกล่าวใน HTML ดังนั้นช่องว่างจะไม่ปรากฏขึ้นเมื่อเพจถูกแสดง อีกวิธีในการลบช่องว่างระหว่างองค์ประกอบบล็อกอินไลน์คือการเปิดความคิดเห็น HTML ทันทีหลังแท็กปิดขององค์ประกอบ จากนั้นปิดความคิดเห็นก่อนแท็กเปิดขององค์ประกอบถัดไป ซึ่งช่วยให้องค์ประกอบบล็อกอินไลน์เริ่มต้นและสิ้นสุดในบรรทัดที่แยกกันใน HTML และจะ "ใส่เครื่องหมายความคิดเห็น" ช่องว่างที่เป็นไปได้ระหว่างองค์ประกอบ รหัสผลลัพธ์จะมีลักษณะดังนี้:
ไม่มีตัวเลือกใดที่สมบูรณ์แบบ แต่มีประโยชน์ ฉันมักจะชอบใช้ความคิดเห็นเพื่อการจัดระเบียบที่ดีขึ้น แต่ตัวเลือกที่คุณเลือกนั้นขึ้นอยู่กับคุณเลย เมื่อสร้างไซต์ วิธีที่ดีที่สุดเสมอคือการเขียนสไตล์โมดูลาร์ที่สามารถนำมาใช้ซ้ำที่อื่นได้ และเลย์เอาต์ที่นำมาใช้ซ้ำได้จะอยู่ที่ด้านบนของรายการโค้ดที่นำมาใช้ซ้ำได้ เค้าโครงสามารถสร้างได้โดยใช้องค์ประกอบลอยหรือบล็อกอินไลน์ แต่องค์ประกอบใดทำงานได้ดีที่สุดและเพราะเหตุใด คำถามที่ว่าองค์ประกอบแบบลอยหรือแบบอินไลน์บล็อกดีกว่าสำหรับโครงสร้างหน้าหรือไม่นั้นเปิดให้ถกเถียงกัน แนวทางของฉันคือการใช้องค์ประกอบบล็อกอินไลน์เพื่อสร้างกริดหรือเค้าโครงหน้า จากนั้นใช้โฟลตเมื่อฉันต้องการให้เนื้อหาไหลไปรอบๆ องค์ประกอบ (ซึ่งเป็นสิ่งที่โฟลตได้รับการออกแบบมาเมื่อทำงานกับรูปภาพ) โดยทั่วไปแล้ว ฉันยังพบว่าองค์ประกอบแบบอินไลน์บล็อกใช้งานได้ง่ายกว่าอีกด้วย อย่างไรก็ตาม ใช้สิ่งที่ดีที่สุดสำหรับคุณ หากคุณคุ้นเคยกับวิธีหนึ่งมากกว่าอีกวิธีหนึ่ง ก็ให้ใช้วิธีนั้น มีข้อกำหนด CSS ใหม่ในงาน - โดยเฉพาะคุณสมบัติเฟล็กซ์และกริด - ซึ่งจะช่วยคุณตัดสินใจว่าจะจัดวางหน้าเว็บของคุณอย่างไรให้ดีที่สุด จับตาดูวิธีการเหล่านี้เมื่อเริ่มปรากฏขึ้น ด้วยความเข้าใจอย่างถ่องแท้เกี่ยวกับเลย์เอาต์ที่นำมาใช้ซ้ำได้ ก็ถึงเวลาที่จะนำไปใช้บนเว็บไซต์ Styles Conference ของเรา สำหรับเว็บไซต์ Styles Conference เราจะสร้างเค้าโครงสามคอลัมน์โดยใช้องค์ประกอบบล็อกอินไลน์ เราจะทำเช่นนี้เพื่อให้ได้คอลัมน์สามคอลัมน์ที่มีความกว้างเท่ากัน หรือสองคอลัมน์ที่มีความกว้างทั้งหมดหารระหว่างคอลัมน์เหล่านั้นเป็น 2/3 สำหรับคอลัมน์หนึ่ง และ 1/3 สำหรับอีกคอลัมน์หนึ่ง ขั้นแรก เราจะสร้างคลาสที่กำหนดความกว้างของคอลัมน์เหล่านี้ เราจะเรียกทั้งสองคลาสนี้ว่า col-1-3 สำหรับหนึ่งในสาม และ col-2-3 สำหรับสองในสาม ในส่วนกริดของไฟล์ main.css เรามาดำเนินการต่อและกำหนดคลาสเหล่านี้และความกว้างที่สอดคล้องกัน Col-1-3 (กว้าง: 33.33%; ) .col-2-3 (กว้าง: 66.66%; ) เราต้องการให้ทั้งสองคอลัมน์ปรากฏเป็นองค์ประกอบบล็อกแบบอินไลน์ เราต้องตรวจสอบให้แน่ใจด้วยว่าได้ตั้งค่าการจัดตำแหน่งแนวตั้งไว้ที่ด้านบนสุดของแต่ละคอลัมน์ มาสร้างตัวเลือกใหม่สองตัวที่แชร์การแสดงผลและการจัดแนวตั้ง Col-1-3, .col-2-3 ( display: inline-block; Vertical-align: top; ) ลองดู CSS อีกครั้ง เราสร้างตัวเลือกคลาสสองตัว col-1-3 และ col-2-3 คั่นด้วยเครื่องหมายจุลภาค เครื่องหมายจุลภาคที่ส่วนท้ายของตัวเลือกแรกหมายความว่าตัวเลือกอื่นตามด้วย หลังจากตัวเลือกที่สอง จะมีเครื่องหมายปีกกาเปิด ซึ่งบ่งชี้ว่าคำอธิบายสไตล์เริ่มต้นขึ้น ด้วยการใช้เครื่องหมายจุลภาคเพื่อแยกตัวเลือก เราสามารถผูกสไตล์หนึ่งเข้ากับตัวเลือกหลายตัวพร้อมกันได้ เราต้องการเว้นวรรคระหว่างคอลัมน์เพื่อช่วยแยกเนื้อหา ซึ่งสามารถทำได้โดยการเพิ่มช่องว่างภายในแนวนอนลงในแต่ละคอลัมน์ วิธีนี้ใช้ได้ผลดี แต่เมื่อวางสองคอลัมน์ติดกัน ความกว้างของช่องว่างระหว่างคอลัมน์ทั้งสองจะกว้างเป็นสองเท่าของระยะห่างจากขอบด้านนอก เพื่อให้เกิดความสมดุล เราจะวางคอลัมน์ทั้งหมดของเราไว้ในตารางและเพิ่มช่องว่างภายในแบบเดียวกันลงไป ลองใช้คลาสกริดเพื่อกำหนดกริดของเรา จากนั้นกำหนดช่องว่างในแนวนอนแบบเดียวกันให้กับคลาสกริด col-1-3 และ col-2-3 ด้วยเครื่องหมายจุลภาคเพื่อแยกตัวเลือกของเราอีกครั้ง CSS ของเราจะมีหน้าตาดังนี้: ตาราง, .col-1-3, .col-2-3 ( ช่องว่างด้านซ้าย: 15px; ช่องว่างด้านขวา: 15px; ) เวลาจะวาง padding แนวนอน ก็ต้องระวังครับ โปรดจำไว้ว่าในบทเรียนที่แล้วเราได้สร้างคอนเทนเนอร์ที่มีคลาสคอนเทนเนอร์เพื่อจัดเนื้อหาทั้งหมดของเราไว้ตรงกลางหน้าด้วยความกว้าง 960 พิกเซล ในปัจจุบัน หากเราใส่องค์ประกอบตารางไว้ในองค์ประกอบคอนเทนเนอร์ การเสริมแนวนอนขององค์ประกอบเหล่านั้นจะยุบลงด้วยกัน และคอลัมน์ของเราจะไม่ปรากฏเป็นสัดส่วนกับความกว้างของส่วนที่เหลือของหน้า เราจะดำเนินการนี้โดยแจกแจงกฎชุดเก่าของคอนเทนเนอร์ออกดังต่อไปนี้: คอนเทนเนอร์, .grid ( ระยะขอบ: 0 อัตโนมัติ; ความกว้าง: 960px; ) .container ( ช่องว่างด้านซ้าย: 30px; ช่องว่างด้านขวา: 30px; ) ตอนนี้องค์ประกอบใดๆ ที่มีคลาสคอนเทนเนอร์หรือกริดจะมีความกว้าง 960 พิกเซลและอยู่ที่กึ่งกลางของหน้า นอกจากนี้ เรายังรักษาช่องว่างภายในแนวนอนที่มีอยู่สำหรับองค์ประกอบใดๆ ที่มีคลาสคอนเทนเนอร์โดยการย้ายไปยังชุดกฎใหม่ที่แยกจากกัน เอาล่ะ ส่วนที่ยากทั้งหมดของการตั้งค่า mesh เสร็จสมบูรณ์แล้ว ตอนนี้ได้เวลาทำงานกับ HTML ของเราแล้วดูว่าคลาสเหล่านี้ทำงานอย่างไร เราจะเริ่มต้นด้วยทีเซอร์ในหน้าแรกในไฟล์ index.html ซึ่งจัดเรียงเป็นสามคอลัมน์ ทีเซอร์ปัจจุบันถูกรวมไว้ในองค์ประกอบ
...
...
...
...
และสุดท้าย เนื่องจากแต่ละคอลัมน์ของเราเป็นองค์ประกอบบล็อกแบบอินไลน์ เราจึงต้องแน่ใจว่าได้ลบช่องว่างระหว่างคอลัมน์เหล่านั้นออก ในการดำเนินการนี้ เราจะใช้ความคิดเห็นและเพิ่มเอกสารประกอบลงในแต่ละส่วนเพื่อจัดระเบียบโค้ดของเราให้ดีขึ้น
...
...
...
ในการตรวจสอบ เราได้แสดงความคิดเห็นไว้ในบรรทัดที่ 3 โดยระบุส่วน "ผู้พูด" ที่ตามมา ที่ท้ายบรรทัดที่ 7 เราจะเปิดความคิดเห็นทันทีหลังแท็กปิด ภายในความคิดเห็นนี้ ในบรรทัดที่ 9 เรากำหนดส่วน "กำหนดการ" ต่อไปนี้ จากนั้นปิดความคิดเห็นที่จุดเริ่มต้นของบรรทัด 11 ก่อนแท็กเปิด ขณะนี้เรามีตารางสามคอลัมน์ที่ใช้ซ้ำได้ซึ่งสนับสนุนเค้าโครงที่แตกต่างกัน โดยใช้ความกว้างคอลัมน์ 1/3 และ 2/3 หน้าแรกของเราตอนนี้มีสามคอลัมน์ โดยแยกทีเซอร์ทั้งหมดออก ข้าว. 5.02. หน้าแรกของ Styles Conference มีเค้าโครงสามคอลัมน์แล้ว ด้านล่างนี้ คุณสามารถดูเว็บไซต์ Styles Conference ในสถานะปัจจุบัน รวมถึงดาวน์โหลดซอร์สโค้ดปัจจุบันของเว็บไซต์ได้ ไม่ช้าก็เร็ว ทุกคนจะต้องการวางตำแหน่งองค์ประกอบอย่างแม่นยำ แต่องค์ประกอบแบบลอยหรือบล็อกแบบอินไลน์ไม่อนุญาตให้ใช้กลอุบายดังกล่าว องค์ประกอบแบบลอยที่ลบองค์ประกอบออกจากโฟลว์ของหน้ามักจะให้ผลลัพธ์ที่ไม่พึงประสงค์ เนื่องจากองค์ประกอบที่อยู่รอบๆ ล้อมรอบองค์ประกอบแบบลอย องค์ประกอบบล็อกแบบอินไลน์ เว้นแต่ว่าเรากำลังสร้างคอลัมน์ อาจค่อนข้างยุ่งยากเมื่อพูดถึงการวางตำแหน่งอย่างถูกต้อง สำหรับสถานการณ์เช่นนี้ เราสามารถใช้คุณสมบัติตำแหน่งร่วมกับคุณสมบัติออฟเซ็ตของบล็อกได้ คุณสมบัติตำแหน่งจะกำหนดวิธีการจัดตำแหน่งองค์ประกอบบนเพจ และจะแสดงในการไหลของเอกสารปกติหรือไม่ ใช้ร่วมกับคุณสมบัติออฟเซ็ตของบล็อก top , right , lower และ left ซึ่งกำหนดตำแหน่งองค์ประกอบที่จะวางอย่างแม่นยำโดยการเคลื่อนย้ายองค์ประกอบไปในทิศทางที่ต่างกัน ตามค่าเริ่มต้น ค่าตำแหน่งขององค์ประกอบแต่ละรายการจะถูกตั้งค่าเป็น static ซึ่งหมายความว่าองค์ประกอบนั้นมีอยู่ในขั้นตอนปกติของเอกสาร และไม่ได้ใช้คุณสมบัติใดๆ ในการวางตำแหน่ง ค่าคงที่มักถูกเขียนทับโดยค่าสัมพัทธ์หรือค่าสัมบูรณ์ ซึ่งเราจะดูต่อไป การตั้งค่าคุณสมบัติตำแหน่งเป็นแบบสัมพันธ์ช่วยให้องค์ประกอบปรากฏในโฟลว์ปกติของเพจ โดยสงวนพื้นที่สำหรับองค์ประกอบตามที่ตั้งใจไว้ และป้องกันไม่ให้องค์ประกอบอื่นๆ ไหลรอบๆ องค์ประกอบนั้น อย่างไรก็ตาม ยังช่วยให้คุณแก้ไขตำแหน่งขององค์ประกอบโดยใช้คุณสมบัติออฟเซ็ตได้ด้วย ตัวอย่างเช่น พิจารณา HTML และ CSS ต่อไปนี้:
Div ( ความสูง: 100px; ความกว้าง: 100px; ) .offset ( ซ้าย: 20px; ตำแหน่ง: ญาติ; ด้านบน: 20px; ) ที่นี่สำหรับองค์ประกอบที่สอง สำหรับองค์ประกอบที่มีตำแหน่งค่อนข้างมาก สิ่งสำคัญคือต้องรู้ว่าคุณสมบัติออฟเซ็ตของบล็อกจะกำหนดตำแหน่งที่องค์ประกอบจะถูกย้าย โดยพิจารณาจากตำแหน่งเดิม ดังนั้นคุณสมบัติด้านซ้ายที่มีค่า 20 พิกเซลจะผลักองค์ประกอบไปทางขวา 20 พิกเซล คุณสมบัติบนสุดที่มีค่า 20px จะดันองค์ประกอบลง 20px เมื่อเราวางตำแหน่งองค์ประกอบโดยใช้คุณสมบัติออฟเซ็ต องค์ประกอบจะซ้อนทับองค์ประกอบที่อยู่ด้านล่าง แทนที่จะกดลงเหมือนคุณสมบัติระยะขอบหรือช่องว่างภายใน ค่าสัมบูรณ์สำหรับคุณสมบัติตำแหน่งแตกต่างจากค่าสัมพัทธ์ตรงที่องค์ประกอบที่มีตำแหน่งที่แน่นอนไม่ปรากฏในโฟลว์ปกติของเอกสาร และไม่มีการสงวนพื้นที่และตำแหน่งดั้งเดิมขององค์ประกอบที่มีตำแหน่งที่แน่นอน นอกจากนี้ องค์ประกอบที่มีตำแหน่งที่แน่นอนจะเคลื่อนที่โดยสัมพันธ์กับองค์ประกอบหลักที่อยู่ในตำแหน่งใกล้เคียงที่สุด หากไม่มีตำแหน่งพาเรนต์ที่ค่อนข้างสูง องค์ประกอบที่อยู่ในตำแหน่งที่แน่นอนจะถูกวางตำแหน่งโดยสัมพันธ์กับองค์ประกอบนั้น
ส่วน ( ตำแหน่ง: ญาติ; ) div ( ตำแหน่ง: สัมบูรณ์; ขวา: 20px; ด้านบน: 20px; ) ในตัวอย่างนี้องค์ประกอบ สำหรับองค์ประกอบที่มีตำแหน่งค่อนข้างดี คุณสมบัติออฟเซ็ตจะกำหนดทิศทางที่องค์ประกอบจะถูกย้ายโดยสัมพันธ์กับตัวเอง สำหรับองค์ประกอบที่มีตำแหน่งที่แน่นอน คุณสมบัติออฟเซ็ตจะกำหนดทิศทางที่องค์ประกอบจะถูกย้ายโดยสัมพันธ์กับพาเรนต์ที่มีตำแหน่งใกล้เคียงที่สุด อันเป็นผลมาจากคุณสมบัติด้านขวาและด้านบนองค์ประกอบ ตั้งแต่ธาตุ การเรียนรู้วิธีวางตำแหน่งเนื้อหาใน HTML และ CSS ถือเป็นก้าวสำคัญสู่การเรียนรู้ภาษาเหล่านี้ เพิ่มโมเดลบล็อกเข้าไปด้วย และเราก็พร้อมที่จะเป็นนักพัฒนาส่วนหน้า ข้างต้นเราได้พูดถึงวิธีที่คุณสามารถวางตำแหน่งองค์ประกอบของหน้าโดยใช้ตารางได้ แต่สามารถทำได้โดยใช้สไตล์ - เพื่อระบุลำดับที่องค์ประกอบจะทับซ้อนกัน นี่เป็นมิติใหม่ องค์ประกอบที่มีดัชนี z ใหญ่กว่าจะปรากฏเหนือองค์ประกอบที่มีดัชนี z น้อยกว่า ตัวอย่างต่อไปนี้แสดงการใช้คุณสมบัติ ดัชนี z- แม้ว่าในข้อความของโปรแกรมรูปภาพจะอธิบายไว้เหนือองค์ประกอบอื่น ๆ โดยการกำหนดดัชนีด้วยตัวเลขจำนวนมาก รูปภาพนั้นจะถูกย้ายไปไว้ด้านบนของข้อความแรก ดังนั้นการใช้ทรัพย์สิน ดัชนี zปลดปล่อยคุณจากพันธนาการของลำดับธรรมชาติของการกล่าวถึงองค์ประกอบในข้อความของโปรแกรม HTML ข้าว. 666. การใช้คุณสมบัติ i-index ช่วยให้คุณสามารถเปลี่ยนลำดับตามธรรมชาติขององค์ประกอบในข้อความของเอกสาร HTML เมื่อวางองค์ประกอบองค์ประกอบอาจกลายเป็นว่าขนาดขององค์ประกอบเกินขนาดของชิ้นส่วน (พื้นที่จัดสรรที่ระบุในตัวอย่างของเราโดยแท็ก ตัวอย่างต่อไปนี้ใช้คุณสมบัติ ล้นเพื่อสร้างกลไกการเลื่อนสำหรับข้อความแรก ข้าว. 667 กลไกการเลื่อนข้อความถูกนำมาใช้โดยใช้คุณสมบัติโอเวอร์โฟลว์ แน่นอนว่าหน้าที่ไม่น่าดูจากภาพวาดก่อนหน้านี้ถูกสร้างขึ้นเพียงเพื่อแสดงให้เห็นถึงความสามารถของภาษาในการวางตำแหน่งองค์ประกอบต่างๆ คุณตัดสินใจด้วยตัวเองว่าคุณจะใช้เครื่องมือใดและเพื่อวัตถุประสงค์ใดบนเว็บเพจของคุณ การใช้คุณสมบัติการวางตำแหน่งทำให้การสร้างเอฟเฟกต์สามมิติสำหรับฉลากของคุณเป็นเรื่องง่าย แนวคิดก็คือการแสดงข้อความที่มีเนื้อหาเดียวกันซึ่งจะมีการเลื่อนเล็กน้อยเมื่อสัมพันธ์กันและลงสีด้วยสีที่ต่างกัน ลองเขียนโปรแกรมที่เกี่ยวข้องเป็นแบบฝึกหัด STYLE = "ตำแหน่ง: สัมบูรณ์; บน: 0; ซ้าย: 0; ความกว้าง: 600;Р> ข้อความปริมาตรР> ความสูง:100;ระยะขอบ: บน: 10"> ข้อความปริมาตร โปรดทราบว่าวิธีการสร้างชื่อที่มีประสิทธิภาพนี้ประหยัดกว่าการใช้ไฟล์กราฟิกที่มีเนื้อหาคล้ายกันมากเมื่อวางตำแหน่งบล็อกที่สัมพันธ์กัน คุณจะต้องตั้งค่าคุณสมบัติ ตำแหน่งสัมพัทธ์ ตำแหน่ง:ญาติ และคุณสมบัติการเคลื่อนตัว การกระจัดในกรณีนี้จะเกิดขึ้นไม่สัมพันธ์กับองค์ประกอบ "พาเรนต์" (เช่นเดียวกับการวางตำแหน่งสัมบูรณ์) แต่สัมพันธ์กับบล็อกในการไหลปกติ สิ่งนี้จะชัดเจนยิ่งขึ้นด้วยตัวอย่าง สมมติว่าเรามีหน้า HTML ที่มี div สามรายการ: มากำหนดขนาดและขอบเขตของบล็อกเหล่านี้ในสไตล์ชีต: #blok1, #blok2, #blok3 ( ขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; ) ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้: ตอนนี้เรามาเปลี่ยนตำแหน่งของบล็อกที่สองโดยการเพิ่มกฎลงในหน้าสไตล์: #blok1, #blok2, #blok3 ( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; ) #blok2( ตำแหน่ง:ญาติ; ซ้าย:50px; ด้านบน:25px; ) ตอนนี้หน้าของเรามีลักษณะดังนี้: บล็อกที่สองของเราได้เลื่อนลงและไปทางขวาสัมพันธ์กับตำแหน่งที่มันควรจะเป็นในกระแสปกติ บล็อกที่เหลือยังคงอยู่ในสถานที่ของพวกเขา ในทางปฏิบัติ การวางตำแหน่งแบบสัมพันธ์นั้นไม่ค่อยได้ใช้ ดังนั้นเราจะไม่ใส่ใจกับมันอีกต่อไป และจะพิจารณาบล็อกแบบลอย บล็อกดังกล่าวสามารถเคลื่อนที่ไปรอบๆ หน้าได้อย่างอิสระ รูปภาพใน HTML ทำงานในลักษณะเดียวกัน โดยจัดเรียงโดยใช้พารามิเตอร์ จัดตำแหน่ง. บล็อกลอยถูกกำหนดโดยคุณสมบัติ ลอยซึ่งกำหนดว่าบล็อกจะลอยอยู่หรือไม่และจะเคลื่อนที่ไปในทิศทางใด มีสามตัวเลือก: การวางตำแหน่งบล็อก บล็อก 1 ข้อความ และหน้า style.css ด้วยโค้ดต่อไปนี้: #blok1( ขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; ) ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้: มาทำให้บล็อกของเราลอยแล้วดันไปทางขอบซ้าย: #blok1( border:1px solid red; width:150px; height:50px; float:left; ) ทีนี้มาดันบล็อกไปที่ขอบด้านขวา: #blok1( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; ลอย:ขวา; ) ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้: จะเกิดอะไรขึ้นหากมีบล็อกลอยหลายบล็อกบนหน้า? มาเพิ่มบล็อกอื่นในหน้า html ของเรา: การวางตำแหน่งบล็อก บล็อก 1 ข้อความ บล็อกข้อความ 2 เพียงองค์ประกอบบางส่วนบนหน้า อาจเป็นได้เพียงข้อความ ลิงก์ รายการ รูปภาพ ฯลฯ และให้มูลค่าทรัพย์สินที่แตกต่างกันแก่พวกเขา ลอย:
#blok1( border:1px solid red; width:150px; height:50px; float:left; ) #blok2( border:1px solid red; width:150px; height:50px; float:right; ) ตอนนี้หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้: เกิดอะไรขึ้นถ้าพวกเขามีค่าเหมือนกัน? ตัวอย่างเช่น: #blok1( border:1px solid red; width:150px; height:50px; float:left; ) #blok2( border:1px solid red; width:150px; height:50px; float:left; ) จากนั้นบล็อกที่สองจะถูกกดไปที่ขอบด้านขวาของบล็อกแรก: สถานการณ์จะคล้ายกันสำหรับค่าเดียวกัน ขวา:
#blok1( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; ) #blok2( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; ) โปรดทราบ: บล็อกแรก 1 จะถูกกดไปที่ขอบด้านขวา จากนั้นบล็อก 2 จะถูกกดลงไป แต่จะเป็นอย่างไรถ้าเราต้องการให้บล็อกถูกกดไปที่ขอบด้านขวา แต่อยู่ด้านล่างอีกบล็อกหนึ่ง มีคุณสมบัติสำหรับสิ่งนี้ ชัดเจนซึ่งระบุว่าด้านใดของบล็อกลอยไม่สามารถอยู่ติดกับบล็อกลอยอื่นได้ คุณสมบัตินี้สามารถตั้งค่าเป็นหนึ่งในสี่ค่า: #blok1( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; ) #blok2( เส้นขอบ:1px สีแดงทึบ; ความกว้าง:150px; ความสูง:50px; float:right; clear:right; ) ตอนนี้มันกลายเป็นอย่างที่ฉันต้องการ: หนึ่งช่วงตึกอยู่ใต้อีกช่วงหนึ่ง: ในบทเรียนที่แล้ว เราได้สร้างเพจลักษณะนี้โดยใช้การกำหนดตำแหน่งแบบสัมบูรณ์: มาดูกันว่าสามารถทำได้โดยใช้บล็อกลอยได้อย่างไร ดังนั้นโค้ดสำหรับเพจจึงเป็นดังนี้: การวางตำแหน่งบล็อก ส่วนหัวของไซต์ เนื้อหา บล็อกข่าว ด้านล่างของไซต์ ในหน้า style.css เรามาตั้งค่าขนาดและพื้นหลังสำหรับบล็อกของเรากันก่อน: #header( พื้นหลัง:darkred; width:715px; height:100px; ) #menu( พื้นหลัง:oldlace; width:190px; height:300px; ) #content( พื้นหลัง:oldlace; width:525px; height:300px; ) #footer ( พื้นหลัง:darkred; width:715px; height:30px; ) #news( พื้นหลัง:สีเหลือง; ความกว้าง:150px; ความสูง:280px; ) ตอนนี้บล็อกของเราอยู่ในกระแสปกติเช่น อันหนึ่งอยู่ใต้อีกอันหนึ่ง เราจำเป็นต้องสร้างบล็อก เมนูและ เนื้อหาลอยและถนัดซ้าย บล็อก ข่าวควรกดชิดขอบด้านขวา เช่น เราจะทำให้มันเป็นบล็อกลอยมือขวา: #header( พื้นหลัง:darkred; width:715px; height:100px; ) #menu( พื้นหลัง:oldlace; width:190px; height:300px; float:left; ) #content( พื้นหลัง:oldlace; width:525px; height:300px ; float:left; ) #footer( พื้นหลัง:darkred; width:715px; height:30px; ) #news( พื้นหลัง:สีเหลือง; ความกว้าง:150px; ความสูง:280px; float:right; ) หน้าของเราในเบราว์เซอร์มีลักษณะดังนี้: ลองดูบล็อกข่าวของเรา คุณจะเห็นว่ามันอยู่ใต้ข้อความในบล็อก เนื้อหา- แต่เราต้องการให้บล็อกข่าวอยู่ทางด้านขวา และข้อความจะไหลรอบๆ บล็อกข่าวทางด้านซ้าย ทำไมมันไม่ได้ผลสำหรับเรา? เพราะบล็อคของเรา ข่าวในโค้ด html จะอยู่ด้านล่างข้อความและเฉพาะข้อความที่อยู่ด้านล่างเท่านั้นที่จะไหลไปรอบๆ เพื่อแก้ไขปัญหานี้ เราจำเป็นต้องวางของเรา div = "ข่าว"เหนือข้อความ (เช่น ก่อนคำว่า "เนื้อหา"): การวางตำแหน่งบล็อก ส่วนหัวของไซต์ บล็อกข่าว เนื้อหา ด้านล่างของไซต์ ตอนนี้บล็อกข่าวของเราเข้าแทนที่แล้ว: และเพื่อไม่ให้กดใกล้กับขอบด้านบนและด้านขวา เราจะเพิ่มค่ามาร์จิ้นสำหรับบล็อกนี้: #news( พื้นหลัง:สีเหลือง; ความกว้าง:150px; ความสูง:280px; ลอย:ขวา; ระยะขอบ:10px; ) ตอนนี้เราได้รับผลลัพธ์เช่นเดียวกับการวางตำแหน่งแบบสัมบูรณ์ ยอมรับว่าการใช้บล็อกลอยจะง่ายกว่าในการจัดวางหน้า: คุณไม่จำเป็นต้องนับพิกเซล และโค้ดจะสั้นกว่า นอกจากนี้ด้วยรูปแบบ "ของเหลว" เราไม่สามารถระบุตำแหน่งที่แน่นอนของบล็อกบนหน้าจอได้ และด้วยความช่วยเหลือของบล็อกลอยที่เราไม่ต้องการสิ่งนี้ ก็เพียงพอที่จะระบุเฉพาะจุดสังเกต (ทางด้านซ้ายบน ด้านขวา ด้านล่าง หรือในบรรทัดเดียวกัน) บล็อกคงที่ ดังที่คุณจำได้ ด้วยการวางตำแหน่งที่คงที่ บล็อกจะคงที่โดยสัมพันธ์กับพื้นที่รับชม ในบางวิธี บล็อกแบบตายตัวจะคล้ายกับเฟรม การเลื่อนใช้ได้เฉพาะภายในเฟรมเท่านั้น แต่ไม่สามารถเลื่อนภายในบล็อกได้ บล็อกแบบคงที่มีข้อเสียเปรียบที่สำคัญประการหนึ่ง: เบราว์เซอร์ Internet Explorer ไม่รองรับ ดังนั้นจึงไม่ควรใช้ในตอนนี้ ดังนั้นที่นี่เราจะระบุเฉพาะไวยากรณ์ของกฎดังกล่าวหากคุณต้องการลองด้วยตัวเอง (เช่นในเบราว์เซอร์ Opera) #blok( ตำแหน่ง:คงที่; ซ้าย:0px; ด้านบน:0px; ) บล็อกที่มีตัวระบุ "blok" จะยังคงอยู่เมื่อเลื่อนหน้า นั่นคือทั้งหมดสำหรับวันนี้ ในบทต่อไป เราจะมาทำความรู้จักกับคุณสมบัติของบล็อกและประเภทของบล็อกเพิ่มเติมการวางตำแหน่งขององค์ประกอบ
2. แน่นอน
3. แก้ไขแล้ว
4. ญาติ)คงที่
แน่นอน
ที่ตายตัว
ญาติ
มาสรุปกัน
ตอนนี้เรามาดูวิธีการตั้งค่าพิกัดกัน
2.ซ้าย
3.ขวา
4. ด้านล่าง
ตำแหน่ง:ญาติ;
ด้านบน:100px;
ซ้าย:100px;
ความกว้าง:500px;
ความสูง:500px;
สีพื้นหลัง:#CCCCCC;
}
สีพื้นหลัง:#003399;
ตำแหน่ง:แน่นอน;
ด้านล่าง: -30px;
ขวา: -50px;
ความกว้าง:100px;
ความสูง:100px;
}
สีพื้นหลัง:#990066;
ความกว้าง:200px;
ความสูง:300px
}การวางตำแหน่งและการเคลื่อนไหวขององค์ประกอบอย่างอิสระ
1. ประเภทของตำแหน่ง
ตำแหน่ง
ความหมาย:
คงที่
ค่าเริ่มต้นหมายถึงไม่มีการวางตำแหน่ง องค์ประกอบต่างๆ จะถูกแสดงตามลำดับตามลำดับที่กำหนดไว้ในเอกสาร HTML ใช้เพื่อล้างค่าตำแหน่งอื่นๆ
ญาติ
องค์ประกอบที่มีตำแหน่งค่อนข้างถูกย้ายจากตำแหน่งปกติในทิศทางที่แตกต่างกันโดยสัมพันธ์กับขอบเขตของคอนเทนเนอร์หลัก แต่พื้นที่ที่องค์ประกอบนั้นไม่หายไป อย่างไรก็ตาม องค์ประกอบดังกล่าวอาจซ้อนทับเนื้อหาอื่นบนเพจ
แน่นอน
องค์ประกอบที่มีตำแหน่งที่แน่นอนจะถูกลบออกจากการไหลของเอกสารโดยสมบูรณ์ และอยู่ในตำแหน่งที่สัมพันธ์กับขอบเขตของบล็อกคอนเทนเนอร์ (องค์ประกอบอื่นหรือหน้าต่างเบราว์เซอร์) บล็อกคอนเทนเนอร์สำหรับองค์ประกอบที่มีตำแหน่งที่แน่นอนคือองค์ประกอบบรรพบุรุษที่ใกล้เคียงที่สุดซึ่งค่าคุณสมบัติตำแหน่งไม่คงที่
ที่ตายตัว
แก้ไของค์ประกอบในตำแหน่งที่ระบุบนเพจ บล็อกคอนเทนเนอร์ขององค์ประกอบคงที่คือวิวพอร์ต นั่นคือองค์ประกอบจะคงที่โดยสัมพันธ์กับหน้าต่างเบราว์เซอร์เสมอ และไม่เปลี่ยนตำแหน่งในขณะที่เลื่อนหน้า องค์ประกอบจะถูกลบออกจากโฟลว์เอกสารหลักโดยสิ้นเชิง และสร้างขึ้นในโฟลว์เอกสารใหม่
อักษรย่อ
ตั้งค่าคุณสมบัติให้เป็นค่าเริ่มต้น
สืบทอด
สืบทอดค่าคุณสมบัติจากองค์ประกอบหลัก
ข้าว. 1. ความแตกต่างระหว่างการวางตำแหน่งแบบคงที่ แบบสัมพันธ์ และแบบสัมบูรณ์ 2. คุณสมบัติออฟเซ็ต
3. การวางตำแหน่งภายในองค์ประกอบ
ข้าว. 2. ตำแหน่งสัมพัทธ์สัมบูรณ์4. ปัญหาการวางตำแหน่ง
2. หากภายในบล็อกที่มีตำแหน่ง: สัมบูรณ์ มีองค์ประกอบที่ตั้งค่าการลอยตัว ความสูงขององค์ประกอบนี้จะเท่ากับความสูงขององค์ประกอบที่สูงที่สุดเหล่านี้
3. สำหรับองค์ประกอบที่มีตำแหน่ง: สัมบูรณ์หรือตำแหน่ง: คงที่ คุณไม่สามารถตั้งค่าคุณสมบัติ float พร้อมกันได้ แต่สำหรับองค์ประกอบที่มีตำแหน่ง: สัมพันธ์ คุณสามารถทำได้
4. หากบรรพบุรุษขององค์ประกอบที่อยู่ในตำแหน่งเป็นองค์ประกอบบล็อก คอนเทนเนอร์บล็อกจะถูกสร้างขึ้นตามพื้นที่เนื้อหาที่คั่นด้วยเส้นขอบ หากบรรพบุรุษเป็นองค์ประกอบแบบอินไลน์ บล็อกคอนเทนเนอร์จะถูกสร้างขึ้นตามขอบเขตด้านนอกของเนื้อหา หากไม่มีบรรพบุรุษ บล็อกคอนเทนเนอร์จะเป็นองค์ประกอบเนื้อหา5. การเคลื่อนไหวขององค์ประกอบอย่างอิสระ
6. ยกเลิกการไหลรอบองค์ประกอบ
6.1. ทรัพย์สินที่ชัดเจน
6.2. การทำความสะอาดสตรีมด้วยสไตล์โดยใช้คลาส clearfix และ :after คลาสหลอก
เราสร้างคลาส .clearfix และเมื่อใช้ร่วมกับคลาสหลอก :after ให้นำไปใช้กับคอนเทนเนอร์บล็อก
ข้าว. 5. การใช้วิธี "ทำความสะอาด" กับบล็อกคอนเทนเนอร์ที่มีองค์ประกอบลอยตัว6.3. วิธีง่ายๆ ในการทำความสะอาดสตรีม
การวางตำแหน่งผ่านการลอย
ลอยในทางปฏิบัติ
สาธิตการวางแบบไม่มีโฟลต
การสาธิตเค้าโครงพร้อมโฟลต
float สามารถเปลี่ยนค่าการแสดงผลขององค์ประกอบได้
การสาธิตเค้าโครงแบบสามคอลัมน์พร้อมทศนิยม
การล้างและลอยเนื้อหา
การสาธิตเค้าโครงโดยไม่ต้องล้างโฟลต
เคลียร์ลอย
การสาธิตโครงร่างพร้อมการเคลียร์โฟลต
เนื้อหาลอย
การสาธิตเลย์เอาต์ที่มีเนื้อหาแบบโฟลต
ในทางปฏิบัติ
ตอนนี้เราสามารถใช้ float ได้แล้ว มากำหนดมันสำหรับตัวหลักกันดีกว่า
เมื่อต้องการทำเช่นนี้ ให้เพิ่มคลาสโลโก้ให้กับองค์ประกอบ
- ต่อไป ภายใน CSS ของเรา เราจะเพิ่มส่วนสไตล์ใหม่สำหรับส่วนหัวหลัก ในส่วนนี้เราจะเลือกองค์ประกอบ
ด้วยคลาสโลโก้และตั้งค่าโฟลตไปทางซ้าย
การประชุมสไตล์
ขณะที่เราอยู่ที่นี่ มาเพิ่มรายละเอียดอีกเล็กน้อยให้กับโลโก้ของเรา เริ่มต้นด้วยการวางองค์ประกอบ
ใน CSS เราจะเพิ่มเส้นขอบที่ด้านบนของโลโก้และช่องว่างภายในแนวตั้งเพื่อให้โลโก้ "หายใจ" ได้อย่างอิสระ
สไตล์
เนื่องจากเราสร้างธาตุขึ้นมา
float เราต้องการตั้งค่าเนื้อหาให้ float ผู้ปกครองทันทีสำหรับ
การวางตำแหน่งผ่านอินไลน์บล็อก
อินไลน์บล็อกในทางปฏิบัติ
การสาธิตองค์ประกอบอินไลน์บล็อกพร้อมพื้นที่
การลบช่องว่างระหว่างองค์ประกอบอินไลน์บล็อก
การสาธิตองค์ประกอบอินไลน์บล็อกโดยไม่มีช่องว่าง
สร้างเค้าโครงที่นำมาใช้ซ้ำได้
ในทางปฏิบัติ
การสาธิตและซอร์สโค้ด
การวางตำแหน่งองค์ประกอบที่ไม่ซ้ำ
ตำแหน่งสัมพัทธ์
การสาธิตการวางตำแหน่งสัมพัทธ์
ตำแหน่งที่แน่นอน
การสาธิตการวางตำแหน่งสัมบูรณ์
ประวัติย่อ
แน่นอนว่าการใช้คุณสมบัติทั้งสามนี้ไม่ได้สร้างเอฟเฟกต์ของพื้นที่สามมิติ แต่นี่เป็นอะไรที่มากกว่าพื้นผิวเรียบ ในกรณีนี้เราพูดถึงพื้นที่ 2.5 มิติ นอกจากคุณสมบัติของพิกัดแล้ว เรายังต้องการคุณสมบัติอีกด้วยตำแหน่ง ซึ่งเมื่อรวมกับคุณสมบัติแล้วซ้าย และสูงสุด
<НЕАD>
ข้อความที่วางตำแหน่ง nepBbiuН1>
Н1>
<НЕАD><ТIТLЕ>การวางตำแหน่งТIТLЕ>НЕАD>
ข้อความที่วางตำแหน่ง riepBbiMН1>
ข้อความตำแหน่งที่สองН1>
ข้อความปริมาตร"
ลองดูตัวอย่าง สมมติว่าเรามีหน้า HTML พร้อมด้วยโค้ดต่อไปนี้:
เรามาตั้งค่าคุณสมบัตินี้สำหรับบล็อกที่สองในตัวอย่างสุดท้ายของเรา: