float = “ลอย”
เป็น property หนึ่งของ css ซึ่งมีหน้าที่ทำให้ element นั้นมีลักษณะลอยออกมาในตำแหน่งที่เรากำหนด และอนุญาตให้ text หรือ element อื่นๆ ล้อมรอบ element ที่ float ได้ โดยจะมีอยู่ 4 ลักษณะ
left ให้ลอยและชิดไปทางด้านซ้าย
right ให้ลอยและชิดไปทางด้านขวา
inherit ให้ลอยตามค่าที่สืบทอดมาจาก parent
none ไม่ลอย (default)
กล่อง ชิดซ้าย เรียงแถวลงตามแนวตั้ง
<!DOCTYPE html>
<html>
<head>
<title>FLOAT AND CLEAR</title>
<link rel="stylesheet"type="text/css"href="main.css">
</head>
<body>
<div class="block-1"></div>
<div class="block-2"></div>
<div class="block-3"></div>
</body>
</html>
<style type="text/css">
.block-1 {
width: 120px;
height: 120px;
margin: 20px;
background: #0E9F98;
}
.block-2 {
width: 120px;
height: 120px;
margin: 20px;
background: #04BF9D;
}
.block-3 {
width: 120px;
height: 120px;
margin: 20px;
background: #F4E85C;
}
</style>กล่อง ต่อกัน เรียงแถวลงตามแนวนอน
.block-1 {
width: 120px;
height: 120px;
margin: 20px;
background: #0E9F98;
float: left;
}
.block-2 {
width: 120px;
height: 120px;
margin: 20px;
background: #04BF9D;
float: left;
}
.block-3 {
width: 120px;
height: 120px;
margin: 20px;
background: #F4E85C;
float: left;
}กล่อง ติดขอบซ้าย ขวาแยกกัน
(ลดให้เหลือ 2 เเล้ว)
.block-1 {
width: 120px;
height: 120px;
margin: 20px;
background: #0E9F98;
float: left;
}
.block-2 {
width: 120px;
height: 120px;
margin: 20px;
background: #04BF9D;
float: right;
}ต่อไปเราจะให้ block-1 มีขนาดใหญ่ขึ้น และให้ block-2 เป็น child ของ block-1 โดยจะกำหนดให้ block-1 เป็น float:left และ block-2 เป็น float:inherit
ผลลัพธ์ที่ออกมา คือ block-2 จะ float:left ตาม block-1
<!DOCTYPE html>
<html>
<head>
<title>FLOAT AND CLEAR</title>
<linkrel="stylesheet"type="text/css"href="main.css">
</head>
<body>
<divclass="block-1">
<divclass="block-2"></div>
</div>
</body>
</html>
<style type="text/css">
.block-1 {
width: 260px;
height: 260px;
margin: 20px;
background: #0E9F98;
float: left;
}
.block-2 {
width: 120px;
height: 120px;
margin: 20px;
background: #04BF9D;
float: inherit;
}
</style>แล้วถ้าเราใส่ element ที่ไม่ float ต่อท้ายจากที่เรา float เรียบร้อย จะเกิดอะไรขึ้น?
ให้ block-1 และ block-2 กำหนดเป็น float:left ส่วน block-3 และ block-4 ไม่ต้องกำหนดอะไร
.block-1 {
width: 120px;
height: 120px;
margin: 20px;
background: #0E9F98;
float: left;
}
.block-2 {
width: 120px;
height: 120px;
margin: 20px;
background: #04BF9D;
float: left;
}
.block-3 {
width: 120px;
height: 120px;
margin: 20px;
background: #F4E85C;
}
.block-4 {
width: 120px;
height: 120px;
margin: 20px;
background: #404040;
}ผลลัพธ์ที่ออกมาก็คือ block-3 นั้นหายไป ดังภาพ จริงๆแล้ว block-3 นั้นไม่ได้หายไปไหน แต่อยู่ด้านล่าง block-1 ซึ่งลอยอยู่ ณ ตรงนั้นพอดี
เราจะแก้ปัญหาในลักษณะนี้โดยการใช้ clear
clear เป็น property หนึ่งของ css เช่นเดียวกับ float ซึ่งเมื่อคุณสมบัตินี้ถูกเรียกใช้กับ element ใดๆ หมายความว่า จะไม่มี element ใดๆ ต่อหรือลอยทางด้านขวา หรือทางซ้ายของ element นั้นๆ โดยจะมีอยู่ทั้งหมด 5 ลักษณะ
left ไม่อนุญาตให้มีอะไรลอยอยู่ทางด้านซ้าย
right ไม่อนุญาตให้มีอะไรลอยอยู่ทางด้านขวา
both ไม่นุญาตให้มีอะไรลอยอยู่ทั้งด้านซ้ายและด้านขวา
inherit ให้ clear ตามค่าที่สืบทอดมาจาก parent
none ไม่มี clear (default)
จากตัวอย่างก่อนหน้านี้ กำหนดให้ block-3 นั้น clear:both ซึ่งจะทำให้ไม่มีอะไรลอยอยู่ทั้งทางด้านซ้ายและขวา ผลลัพธ์จะได้ดังรูป

ในส่วนของ clear:left และ clear:right นั่นจะมีลักษณะคล้ายๆกัน แต่ต่างกันตรงที่จะยอมให้อีกฝั่งหนึ่งนั้นมี element ลอยอยู่ได้นั่นเอง
ตัวอย่างการจัด layout ด้วย float และ clear
https://smiletonz.wordpress.com/2013/04/13/css-float-clear/


