CSS 布局 - 浮动实例
本页提供常见的浮动案例。
网格 / 等宽的框
Box 1
Box 2
Box 1
Box 2
Box 3
通过使用 float
属性,可以轻松地并排浮动内容框:
<!DOCTYPE html>
<html>
<head>
<style>
* {
box-sizing: border-box;
}
.box {
float: left;
width: 33.33%;
padding: 50px;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
</style>
</head>
<body>
<h1>网格框</h1>
<p>并排浮动的框:</p>
<div class="clearfix">
<div class="box" style="background-color:#bbb">
<p>框中的一些文本。</p>
</div>
<div class="box" style="background-color:#ccc">
<p>框中的一些文本。</p>
</div>
<div class="box" style="background-color:#ddd">
<p>框中的一些文本。</p>
</div>
</div>
<p>请注意,我们还用了 clearfix hack 来处理布局流,并添加了 box-sizing 属性,以确保框不会由于额外的内边距(填充)而损坏。尝试删除此代码以查看效果。</p>
</body>
</html>
什么是 box-sizing?
您可以轻松地并排创建三个浮动框。但是,当您添加一些内容来扩大每个框的宽度(例如,内边距或边框)时,这个框会被破坏。 box-sizing
属性允许我们在框的总宽度(和高度)中包括内边距和边框,确保内边距留在框内而不会被破坏。
您可以访问本站的 CSS Box Sizing 这一章中学习有关 box-sizing 属性的更多知识。
图像并排
这种框格(The grid of boxes)也可以用来并排显示图像:
<!DOCTYPE html>
<html>
<head>
<style>
* {
box-sizing: border-box;
}
.img-container {
float: left;
width: 33.33%;
padding: 5px;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
</style>
</head>
<body>
<h1>并排的图像</h1>
<p>并排浮动图像:</p>
<div class="clearfix">
<div class="img-container">
<img src="/znadmin/md/1241/0.jpg" style="width:100%">
</div>
<div class="img-container">
<img src="/znadmin/md/1241/1.jpg" style="width:100%">
</div>
<div class="img-container">
<img src="/znadmin/md/1241/2.jpg" style="width:100%">
</div>
</div>
<p>请注意,我们还用了 clearfix hack 来处理布局流,并添加了 box-sizing 属性以确保图像容器不会由于额外的内边距(填充)而损坏。请尝试删除此代码以查看效果。</p>
</body>
</html>
等宽的框
在上例中,您学习了如何以相等的宽度并排浮动框。但是,创建具有相同高度的浮动框并不容易。不过,快速解决方案是设置一个固定的高度,如下例所示:
Box 1
Some content, some content, some content
Box 2
Some content, some content, some content
Some content, some content, some content
Some content, some content, some content
代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
* {
box-sizing: border-box;
}
.box {
float: left;
width: 50%;
padding: 50px;
height: 300px;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
</style>
</head>
<body>
<h1>等高框</h1>
<p>有相同高度的浮动框:</p>
<div class="clearfix">
<div class="box" style="background-color:#bbb">
<h2>Box 1</h2>
<p>Some content, some content, some content</p>
</div>
<div class="box" style="background-color:#ccc">
<h2>Box 2</h2>
<p>Some content, some content, some content</p>
<p>Some content, some content, some content</p>
<p>Some content, some content, some content</p>
</div>
</div>
<p>这个例子不是很灵活。如果可以保证框中始终有相同数量的内容,则可以使用 CSS 高度,但并非总是如此。如果您在手机上尝试上例(或调整浏览器窗口的大小),则会看到第二个框的内容将显示在框的外部。</p>
<p>如果这不是您想要的,请返回教程并学习另一个解决方案。</p>
</body>
</html>
但是,这么做就失去了弹性。如果可以保证框中始终有相同数量的内容,那是可以的。但是很多时候,内容是不一样的。如果您在手机上尝试上例,则会看到第二个框的内容将显示在框的外部。这是 CSS3 Flexbox 派上用场的地方 - 因为它可以自动拉伸框使其与最长的框一样长:
实例
使用 Flexbox 创建弹性框:
代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
.flex-container {
display: flex;
flex-wrap: nowrap;
background-color: DodgerBlue;
}
.flex-container .box {
background-color: #f1f1f1;
width: 50%;
margin: 10px;
text-align: center;
line-height: 75px;
font-size: 30px;
}
</style>
</head>
<body>
<h1>弹性框</h1>
<div class="flex-container">
<div class="box">框 1 - 这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。这是一些文本,以确保内容真的很高。</div>
<div class="box">框 2 - 我的高度与框 1 保持一致。</div>
</div>
<p>请尝试调整浏览器窗口的大小,以查看弹性布局。</p>
<p><b>注释:</b>Internet Explorer 10 或更早的版本不支持 Flexbox。</p>
</body>
</html>
Flexbox 的唯一问题是它在 Internet Explorer 10 或更早版本中不起作用。您可以访问本站的 CSS Flexbox 章节中学习有关 Flexbox 布局模块的更多知识。
导航菜单
将 float
与超链接列表一起使用,来创建水平菜单:
代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
ul {
list-style-type: none;
margin: 0;
padding: 0;
overflow: hidden;
background-color: #333;
}
li {
float: left;
}
li a {
display: inline-block;
color: white;
text-align: center;
padding: 14px 16px;
text-decoration: none;
}
li a:hover {
background-color: #111;
}
.active {
background-color: red;
}
</style>
</head>
<body>
<ul>
<li><a href="#home" class="active">Home</a></li>
<li><a href="#news">News</a></li>
<li><a href="#contact">Contact</a></li>
<li><a href="#about">About</a></li>
</ul>
</body>
</html>
Web 布局实例
使用 float
属性完成整个 Web 布局也很常见:
代码如下:
<!DOCTYPE html>
<html>
<head>
<style>
* {
box-sizing: border-box;
}
.header, .footer {
background-color: grey;
color: white;
padding: 15px;
}
.column {
float: left;
padding: 15px;
}
.clearfix::after {
content: "";
clear: both;
display: table;
}
.menu {
width: 25%;
}
.content {
width: 75%;
}
.menu ul {
list-style-type: none;
margin: 0;
padding: 0;
}
.menu li {
padding: 8px;
margin-bottom: 8px;
background-color: #33b5e5;
color: #ffffff;
}
.menu li:hover {
background-color: #0099cc;
}
</style>
</head>
<body>
<div class="header">
<h1>大武汉</h1>
</div>
<div class="clearfix">
<div class="column menu">
<ul>
<li>航班</li>
<li>城市</li>
<li>景点</li>
<li>美食</li>
</ul>
</div>
<div class="column content">
<h1>城市</h1>
<p>武汉,简称“汉”,别称江城,是湖北省省会,中部六省唯一的副省级市,特大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽。
</p>
<p>在后面的章节中,您将了解更多有关 web 布局和响应式 web 页面的信息。</p>
</div>
</div>
<div class="footer">
<p>页脚文本</p>
</div>
</body>
</html>
所有 CSS 浮动属性
属性 | 描述 |
---|---|
box-sizing | 定义元素的宽度和高度的计算方式:它们是否应包含内边距和边框。 |
clear | 指定哪些元素可以在被清除的元素旁边以及在哪一侧浮动。 |
float | 指定元素应如何浮动。 |
overflow | 指定如果内容溢出元素框会发生什么情况。 |
overflow-x | 指定当溢出元素的内容区域时,如何处理内容的左/右边缘。 |
overflow-y | 指定当溢出元素的内容区域时,如何处理内容的上/下边缘。 |