说起布局其实就和盖房子的道理一样,你首先要盖好房子的模型(规划好页面的布局),房子的雏形盖好后就是往房子里面布置家具了(在布局里面添加东西),这样,房子盖好后不论你往里面添加什么家具也不能影响房子(杠精请坐下),布局也一样,布局完成后,只需要在布局的容器里面添加更加细化的东西就行了。切忌边写内容边布局,这可能因为内容导致布局的改写,费时费力、得不偿失
Float 的设计初衷仅仅是为了实现文字环绕效果,所以了解了 Float的设计初衷,我们就能明白 Float的特有的行为表现了
这种特性称之为 BFC(Block Formatting Context——块级格式化上下文), 具有这种包裹性的元素有
如果浮动元素是某一个元素的父元素,那么子元素就会溢出父元素,而父元素将会塌陷
如果可以的情况下,轻易不要使用定位进行布局,复杂的层级关系会导致你的定位越来越乱,难以维护。
Grid
适用于布局大画面。它们使页面的布局变得非常容易,甚至可以处理一些不规则和非对称的设计。Grid
布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局Flex
非常适合对齐元素内的内容。你可以使用 Flex
来定位设计上一些较小的细节。Flex
布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。常见的单例布局有两种
实现方法有很多,这里只举一种方法(以左侧栏固定为例)
DOM
<div class="main">
<!--左侧-->
<div class="left"></div>
<!--右侧-->
<div class="right"></div>
</div>
CSS
// 页面
.main{
display: flex;
height: 100vh;
// 左侧
.left{
background: red;
width: 300px;
}
// 右侧
.right{
background: yellow;
flex: 1 1 auto;
}
}
实现方法有很多,这里只举一种方法(以第一个为例)
DOM
<div class="box">
<!--主要内容-->
<div class="middle"></div>
<!--左侧边栏-->
<div class="left"></div>
<!--右侧边栏-->
<div class="right"></div>
</div>
CSS
// 页面
.box{
display: flex;
height: 100vh;
min-width: 700px;
// 左侧边栏
.left{
order: 0;
background: red;
width: 300px;
}
// 主要内容
.middle{
order: 1;
background: pink;
flex: 1 1 auto;
}
// 右侧边栏
.right{
order: 2;
background: yellow;
width: 300px;
}
}
<div class="middle"></div>
放在了最上方,因为DOM是按顺序渲染的,所以优先加载主要内容,但这会导致位置的先后顺序错乱,这里可以用 flex
布局的 order
属性来改变位置的先后顺序<main>
的高度足够长时, <main>
后面的 <footer>
会紧跟在 <main>
元素的后面<main>
元素的高度不足的时候(比如小于屏幕的高度), <footer>
能够‘粘连’在屏幕底部DOM
<div class="box">
<!--内容外框-->
<div class="middle">
<!--主要内容-->
<div class="main"></div>
</div>
<!--底部-->
<div class="footer"></div>
</div>
CSS
// 页面
.box{
height: 100%;
// 内容外框
.middle{
min-height: 100%;
// 主要内容
.main{
padding-bottom: 50px;
background: pink;
height: 300px; // 高度应该是内容的高度(这里只是展示用)
}
}
// 底部
.footer{
background: yellow;
height: 50px;
margin-top: -50px;
}
}
DOM
<div class="box">
<!--内容外框-->
<div class="middle">
<!--主要内容-->
<div class="main"></div>
</div>
<!--底部-->
<div class="footer"></div>
</div>
CSS
// 页面
.box{
display: flex;
flex-direction: column;
// 内容外框
.middle{
flex-basis: 100vh; // min-height: 100vh;也可以
// 主要内容
.main{
padding-bottom: 50px;
background: pink;
height: 30vh; // 高度应该是内容的高度(这里只是展示用)
}
}
// 底部
.footer{
background: yellow;
height: 50px;
margin-top: -50px;
}
}
这两种的方法区别不大,主要看你喜欢用那个(~ ̄▽ ̄)~
多栏布局是CSS3新增布局中的一种,尽管它很低调。
我们可以用它实现分栏的效果
DOM
<div class="box">
<div class="middle">
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?(何似 一作:何时;又恐 一作:惟 / 唯恐)转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。
</div>
</div>
CSS
// 页面
.middle{
column-count: 3;
column-rule: dotted;
column-gap: 50px;
width: 700px;
margin: 30px auto
}
也可以用它来实现古书的排版
DOM
<div class="box">
<div class="middle">
丙辰中秋,欢饮达旦,大醉,作此篇,兼怀子由。明月几时有?把酒问青天。不知天上宫阙,今夕是何年。我欲乘风归去,又恐琼楼玉宇,高处不胜寒。起舞弄清影,何似在人间?(何似 一作:何时;又恐 一作:惟 / 唯恐)转朱阁,低绮户,照无眠。不应有恨,何事长向别时圆?人有悲欢离合,月有阴晴圆缺,此事古难全。但愿人长久,千里共婵娟。
</div>
</div>
CSS
// 页面
.middle{
width: 300px;
height: 200px;
margin: 100px auto;
columns: 10;
column-rule: 1px dashed rgb(213,213,213);
direction: rtl;
word-wrap: break-word;
text-align: center;
}
DOM
<div id="Falls">
<!--每一个模块-->
<div class="item">
<!--图片-->
<img class="item_img" src="地址"/>
<!--图片信息-->
<div class="image_info">努力保持一个好心情</div>
</div>
...
</div>
CSS
// 页面
#Falls{
margin: 0 auto;
column-count: 5;
column-width: 240px;
column-gap: 20px;
// 每一个模块的样式
.item{
break-inside: avoid; // 防止多列布局,分页媒体和多区域上下文中的意外中断
margin-bottom: 10px;
background: #fff;
border: 1px solid #ccc;
// 图片的样式
.item_img{
width: 100%;
vertical-align: middle;
}
// 图片信息
.image_info{
padding: 5px 10px;
text-align: center;
}
}
}
原文:https://www.cnblogs.com/loveyt/p/11384533.html