css布局方案汇总(28个实例图文并茂)
myzbx 2024-12-09 15:35 18 浏览
简介
布局在我们前端日常开发来说是非常重要的,一个好的布局能简化代码的同时还能提高网页的性能。常见的布局方法有浮动(float)布局、绝对定位(position)布局、表格布局(table)、弹性(flex)布局、网格(grid)布局。关于布局方法本文不做详细讲解,笔者推荐看阮一峰老师 flex布局教程 和阮一峰老师 grid布局教程。
本文主要讲解水平垂直居中、单栏布局、双栏布局、三栏布局一些项目中常用的布局方案。
本文代码全部使用codepen在线代码工具进行演示。
居中
居中在我们日常工作中还是会经常碰到。
水平居中
对于水平居中一般可以使用如下四种方式
- 对于行内元素我们可以在父元素上设置text-align:center;来实现。
- 对于定长块级元素我们可以使用margin: 0 auto;来实现。
- 我们可以在父元素上使用flex布局来实现。
- 我们可以在父元素上使用grid布局来实现。
<div class="div1">
<span>行内元素水平居中</span>
</div>
<div class="div2">
<span>行内元素水平居中</span>
<div>块级元素水平居中</div>
</div>
<div class="div3">
<span>行内元素水平居中</span>
<div>块级元素水平居中</div>
</div>
<div class="div4">块级元素水平居中</div>
.div1 {
text-align: center;
}
.div2 {
display: flex;
justify-content: center;
}
.div3 {
display: grid;
justify-content: center;
}
.div4 {
width: 130px;
margin: 0 auto;
}
效果如下
点击查看代码运行实例
垂直居中
对于垂直居中一般可以使用如下三种方式
- 我们可以在父元素上设置line-height等于height来实现。
- 我们可以在父元素上使用flex布局来实现。
- 我们可以在父元素上使用grid布局来实现。
- 我们可以在父元素上使用table布局来实现。
<div class="div1">
<span>行内元素垂直居中</span>
<!-- <div>块级元素垂直居中</div> -->
</div>
<div class="div2">
<span>行内元素垂直居中</span>
<div>块级元素垂直居中</div>
</div>
<div class="div3">
<span>行内元素垂直居中</span>
<div>块级元素垂直居中</div>
</div>
<div class="div4">
<span>行内元素垂直居中</span>
<div>块级元素垂直居中</div>
</div>
.div1 {
height: 100px;
background: lightgreen;
line-height: 100px;
}
.div2 {
height: 100px;
background: lightblue;
display: flex;
align-items: center;
}
.div3 {
height: 100px;
background: lightgreen;
display: grid;
align-content: center;
}
.div4 {
height: 100px;
background: lightblue;
display: table-cell;
vertical-align: middle;
}
效果如下
点击查看代码运行实例
水平垂直同时居中
比如我们想实现如下水平垂直同时居中的效果
实现水平垂直同时居中我们可以使用绝对定位、table布局、flex布局 或 grid布局来实现。
首先我们创建一个需要居中的盒子。
<div class="box"></div>
纯绝对定位
.box {
position: absolute;
width: 200px;
height: 100px;
background: red;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
}
点击查看代码运行实例
绝对定位加负外边距
这种方式需要知道居中元素的具体宽高,不然负的margin没法设置。
.box {
position: absolute;
width: 200px;
height: 100px;
background: red;
left: 50%;
top: 50%;
margin-left: -100px;
margin-top: -50px;
}
点击查看代码运行实例
绝对定位加平移
这种平移的方式就不需要考虑居中盒子的具体宽高了。
.box {
position: absolute;
width: 200px;
height: 100px;
background: red;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
点击查看代码运行实例
使用flex实现
html,body {
height: 100%;
}
body {
background: gray;
display: flex;
align-items: center;
justify-content: center;
}
.box {
width: 200px;
height: 100px;
background: red;
}
点击查看代码运行实例
使用grid实现
html,body {
height: 100%;
}
body {
background: gray;
display: grid;
/* align-content: center;
justify-content: center; */
/* align-content和justify-content的简写 */
place-content: center;
}
.box {
width: 200px;
height: 100px;
background: red;
}
点击查看代码运行实例
使用table加外边距实现
使用table布局需要注意如下
- display: table时padding会失效
- display: table-row时margin、padding同时失效
- display: table-cell时margin会失效
<div class="box">
<div class="child"></div>
</div>
.box {
background: red;
height: 300px;
width: 600px;
display: table-cell;
vertical-align: middle;
}
.child {
width: 200px;
height: 200px;
background: lightgreen;
margin: 0 auto;
}
点击查看代码运行实例
单栏布局
单栏布局我们常用在网页框架上,一般我们把网页分为 header、content、footer三部分。
在不同的项目我们可能对这三部分的样式需求有所差别,比如需要顶部固定、需要底部固定等等。
顶底部都不固定
比如想实现如下效果,footer在内容不足的时候吸附在窗口底部,当内容多的时候又可以被抵到窗口下面。
使用padding加负margin实现
<div class="wrap">
<div class="header">header</div>
<div class="content">content</div>
</div>
<div class="footer">footer</div>
html, body {
height: 100%;
margin: 0;
}
.wrap {
min-height: 100%;
padding-bottom: 50px;
overflow: auto;
box-sizing: border-box;
}
.header {
height: 50px;
background: lightblue;
}
.content {
background: lightpink;
/* 这里的高度只是为了模拟内容多少 */
height: 100px;
/* height: 1000px; */
}
.footer {
height: 50px;
background: lightgreen;
margin-top: -50px;
}
点击查看代码运行实例
使用flex实现
<div class="wrap">
<div class="header">header</div>
<div class="content">content</div>
<div class="footer">footer</div>
</div>
html, body {
height: 100%;
margin: 0;
}
.wrap {
display: flex;
flex-direction: column;
min-height: 100%;
}
.header {
height: 50px;
background: lightblue;
}
.content {
background: lightpink;
/* 这里的高度只是为了模拟内容多少 */
height: 100px;
/* height: 1000px; */
flex-grow: 1;
}
.footer {
height: 50px;
background: lightgreen;
}
点击查看代码运行实例
顶部固定
使用padding加负margin加fixed实现顶部固定布局
<div class="header">header</div>
<div class="wrap">
<div class="content">content</div>
</div>
<div class="footer">footer</div>
html, body {
height: 100%;
margin: 0;
}
.header {
height: 50px;
background: lightblue;
position: fixed;
width: 100%;
}
.wrap {
min-height: 100%;
padding-bottom: 50px;
overflow: auto;
box-sizing: border-box;
}
.content {
margin-top: 50px;
background: lightpink;
/* 这里的高度只是为了模拟内容多少 */
height: 100px;
/* height: 1000px; */
}
.footer {
height: 50px;
background: lightgreen;
margin-top: -50px;
}
点击查看代码运行实例
使用flex加fixed定位实现
<div class="wrap">
<div class="header">header</div>
<div class="content">content</div>
<div class="footer">footer</div>
</div>
html, body {
height: 100%;
margin: 0;
}
.wrap {
display: flex;
min-height: 100%;
flex-direction:column;
}
.header {
height: 50px;
background: lightblue;
position: fixed;
width: 100%;
}
.content {
background: lightpink;
/* 这里的高度只是为了模拟内容多少 */
/* height: 100px; */
height: 1000px;
margin-top: 50px;
flex-grow: 1;
}
.footer {
height: 50px;
background: lightgreen;
}
点击查看代码运行实例
底部固定
使用padding加负margin实现底部固定布局
<div class="wrap">
<div class="header">header</div>
<div class="content">content</div>
</div>
<div class="footer">footer</div>
html, body {
height: 100%;
margin: 0;
}
.wrap {
height: 100%;
padding-bottom: 50px;
overflow: auto;
box-sizing: border-box;
}
.header {
height: 50px;
background: lightblue;
}
.content {
background: lightpink;
height: 100px;
height: 1000px;
}
.footer {
height: 50px;
background: lightgreen;
margin-top: -50px;
}
点击查看代码运行实例
使用flex加fixed定位实现
<div class="wrap">
<div class="header">header</div>
<div class="content">content</div>
<div class="footer">footer</div>
</div>
html, body {
height: 100%;
margin: 0;
}
.wrap {
display: flex;
min-height: 100%;
flex-direction:column;
}
.header {
height: 50px;
background: lightblue;
}
.content {
background: lightpink;
/* 这里的高度只是为了模拟内容多少 */
/* height: 100px; */
height: 1000px;
flex-grow: 1;
margin-bottom: 50px;
}
.footer {
height: 50px;
background: lightgreen;
position: fixed;
width: 100%;
bottom: 0;
}
点击查看代码运行实例
顶底部都固定
使用fixed实现顶底部固定布局
<div class="header">header</div>
<div class="content">content</div>
<div class="footer">footer</div>
复制代码
html, body {
height: 100%;
margin: 0;
}
.header {
height: 50px;
background: lightblue;
position: fixed;
width: 100%;
}
.content {
background: lightpink;
padding-top: 50px;
padding-bottom: 50px;
/* height: 100px; */
height: 1000px;
}
.footer {
height: 50px;
background: lightgreen;
position: fixed;
bottom: 0;
width: 100%;
}
点击查看代码运行实例
使用flex加fixed定位实现
<div class="wrap">
<div class="header">header</div>
<div class="content">content</div>
<div class="footer">footer</div>
</div>
html, body {
height: 100%;
margin: 0;
}
.wrap {
display: flex;
min-height: 100%;
flex-direction:column;
}
.header {
height: 50px;
background: lightblue;
position: fixed;
width: 100%;
}
.content {
background: lightpink;
/* 这里的高度只是为了模拟内容多少 */
/* height: 100px; */
height: 1000px;
flex-grow: 1;
margin-bottom: 50px;
margin-top: 50px;
}
.footer {
height: 50px;
background: lightgreen;
position: fixed;
width: 100%;
bottom: 0;
}
点击查看代码运行实例
两栏布局
两栏布局就是一边固定,另外一边自适应,效果如下
实现两栏布局的方法也有很多,笔者接下来介绍用的比较多的几种方式。
左 float,然后右 margin-left(右边自适应)
<div class="aside"></div>
<div class="main"></div>
div {
height: 500px;
}
.aside {
width: 300px;
float: left;
background: yellow;
}
.main {
background: aqua;
margin-left: 300px;
}
点击查看代码运行实例
右 float,然后右 margin-right(左边自适应)
<div class="aside"></div>
<div class="main"></div>
div {
height: 500px;
}
.aside {
width: 300px;
float: right;
background: yellow;
}
.main {
background: aqua;
margin-right: 300px;
}
点击查看代码运行实例
absolute定位加margin-left(右边自适应)
<div class="wrap">
<div class="aside"></div>
<div class="main"></div>
</div>
div {
height: 500px;
}
.wrap {
position: relative;
}
.aside {
width: 300px;
background: yellow;
position: absolute;
}
.main {
background: aqua;
margin-left: 300px;
}
点击查看代码运行实例
absolute定位加margin-right(左边自适应)
<div class="wrap">
<div class="aside"></div>
<div class="main"></div>
</div>
div {
height: 500px;
}
.wrap {
position: relative;
}
.aside {
width: 300px;
background: yellow;
position: absolute;
right: 0;
}
.main {
background: aqua;
margin-right: 300px;
}
点击查看代码运行实例
使用flex实现
<div class="wrap">
<div class="aside"></div>
<div class="main"></div>
</div>
div {
height: 500px;
}
.wrap {
display: flex;
}
.aside {
flex: 0 0 300px;
background: yellow;
}
.main {
background: aqua;
flex: 1 1;
}
点击查看代码运行实例
使用grid实现
<div class="wrap">
<div class="aside"></div>
<div class="main"></div>
</div>
height: 500px;
}
.wrap {
display: grid;
grid-template-columns: 300px auto;
}
.aside {
background: yellow;
}
.main {
background: aqua;
}
点击查看代码运行实例
三栏布局
三栏布局就是两边固定,中间自适应布局,效果如下
实现三栏布局的方法也有很多,笔者接下来介绍用的比较多的几种方式。
position + margin-left + margin-right实现三栏布局
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
html,
body {
margin: 0;
}
div {
height: 500px;
}
.left {
position: absolute;
left: 0;
top: 0;
width: 200px;
background: green;
}
.right {
position: absolute;
right: 0;
top: 0;
width: 200px;
background: red;
}
.middle {
margin-left: 200px;
margin-right: 200px;
background: lightpink;
}
点击查看代码运行实例
float + margin-left + margin-right实现三栏布局
<div class="left"></div>
<div class="right"></div>
<div class="middle"></div>
html,
body {
margin: 0;
}
div {
height: 500px;
}
.left {
width: 200px;
background: green;
float: left;
}
.right {
width: 200px;
background: yellow;
float: right;
}
.middle {
margin-left: 200px;
margin-right: 200px;
background: lightpink;
}
点击查看代码运行实例
flex实现三栏布局
<div class="wrap">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
html,
body {
margin: 0;
}
div {
height: 500px;
}
.wrap {
display: flex;
}
.left {
flex: 0 0 200px;
background: green;
}
.right {
flex: 0 0 200px;
background: yellow;
}
.middle {
background: lightpink;
flex: 1 1;
}
点击查看代码运行实例
grid实现三栏布局
<div class="wrap">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
html,
body {
margin: 0;
}
div {
height: 500px;
}
.wrap {
display: grid;
grid-template-columns: 200px auto 200px;
}
.left {
background: green;
}
.right {
background: yellow;
}
.middle {
background: lightpink;
}
点击查看代码运行实例
圣杯布局
圣杯布局在项目中基本上不会再使用了,在面试中我们会经常碰到,所以需要了解。
主要用到了浮动和和相对定位。
<div class="container">
<div class="content">中间内容</div>
<div class="left">左侧区域</div>
<div class="right">右侧区域</div>
</div>
div {
height: 500px;
}
.container {
padding: 0 200px 0 200px;
border: 1px solid black;
}
.content {
float: left;
width: 100%;
background: #f00;
}
.left {
width: 200px;
background: #0f0;
float: left;
margin-left: -100%;
position: relative;
left: -200px;
}
.right {
width: 200px;
background: #00f;
float: left;
margin-left: -200px;
position: relative;
right: -200px;
}
点击查看代码运行实例
双飞翼布局
双飞翼布局在项目中基本上不会再使用了,在面试中我们会经常碰到,所以需要了解。
主要用到了浮动。
<div class="main">
<div class="content">content</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
div {
height: 500px;
}
.main {
float: left;
width: 100%;
background: #f00;
}
.main .content {
/* margin、padding这两种方式都可以 */
/* margin-left: 200px;
margin-right: 300px; */
padding-left: 200px;
padding-right: 300px;
}
.left {
width: 200px;
background: #0f0;
float: left;
margin-left: -100%;
}
.right {
width: 200px;
background: #00f;
float: left;
margin-left: -200px;
}
点击查看代码运行实例
总结
因为flex和grid布局方法已经很强大了,日常工作中99%的布局都可以使用这两种方式来实现。所以笔者建议能使用flex或者grid布局方法实现的就尽量使用这两种布局方式实现。因为不仅简单而且负面作用也很少。
浮动布局和绝对定位布局会导致元素脱离文档流,会带来一些负面作用,有时会导致一些意想不到的结果。
关于flex布局的兼容性和grid布局的兼容性,目前已经支持的很好了,大家可以放心使用。
flex布局的兼容性
grid布局的兼容性
后记
感谢小伙伴们的耐心观看,本文为笔者个人学习笔记,如有谬误,还请告知,万分感谢!如果本文对你有所帮助,还请点个关注点个赞~,您的支持是笔者不断更新的动力!
- 上一篇:HTML页面的布局方案
- 下一篇:网页制作Div+CSS的布局与规划
相关推荐
- js实现一款简单踩白块小游戏(曾经很火)
-
效果图如下所示:htmljscss总结以上所述是小编给大家介绍的js实现一款简单踩白块小游戏,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小编的支持!...
- 腾讯游戏健康系统怎么解除 腾讯游戏健康系统解除解绑官网
-
[海峡网]腾讯游戏健康系统怎么解除?腾讯游戏健康系统解除解绑官网是多少?不少玩家都想解除腾讯游戏健康系统!那么是否有方法呢?下面,就来看看官方是怎么说的吧!腾讯游戏健康系统怎么解除?目前腾讯游戏健康系...
- Grok 现在可以生成文档、代码和浏览器游戏
-
xAI宣布新增一款名为“GrokStudio”的新工具,该工具允许用户创建和编辑文档及代码,甚至可以生成基本的浏览器游戏。该公司在其官方X账号的一篇文章中表示,该功能可供Grok.com上的免...
- 世界首款程序猿专属游戏公布 地狱级难度让人抓狂!
-
似乎大家对于程序员的印象都很固定,如果硬要用一个词来形容这份工作,“苦逼”肯定可以入选,关于这些IT从业人员的段子也是一抓一大把,在这里就不再伤害那些网络工程师脆弱的小心灵了,近日一款专门为这些程序...
- 游戏开发之旅-JavaScript原型类构建
-
本节是第四讲的第十五小节,上一节我们为大家介绍了JavaScript面向对象编程(OOP)的基础概念,本节为大家介绍原型链的原理以及如何构造原型类。基于原型的语言(Prototype-BasedLa...
- 打游戏了!解锁编程学习新姿势,极空间部署『CodeCombat』
-
打游戏了!解锁编程学习新姿势,极空间部署『CodeCombat』哈喽小伙伴们好,我是Stark-C~这几年的AI大火,让大家再次看到了互联网科技的神奇与魅力。考虑到今后各大行业的发展方向,编程已成为许...
- DeepSeek如何写在线游戏?附带提示词,直接拿去用!
-
想做一个属于自己的小游戏网站?不会写代码也没关系,现在你只需要一个工具:DeepSeek大模型!它不仅能帮你写网页,还能一口气搞定贪吃蛇、2048、飞机大战等小游戏!关键是:完全免费,还能中文交流!新...
- 微信小游戏的开发方式及特点
-
微信小游戏是基于微信小程序的一个新增类目,它结合了H5游戏和微信社交的优势,为开发者提供了一个快速、便捷的开发游戏平台。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。开发方式微信小游...
- DeepSeek最新玩法,5分钟搭建html实用工具
-
大家好,我是程序员小灰。说起AI编程,早已不是一个新鲜的概念。早在2023年初,小灰就曾经尝试利用GPT-4帮我生成Python小游戏的代码。到了2024年,随着Cursor等AI编程工具的兴起,AI...
- 网页游戏的开发流程
-
网页游戏的开发流程可以根据项目的规模和复杂性而有所不同,但通常包括以下一般步骤,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。1.需求分析:确定游戏的概念、目标受...
- 最热的第三人称射击单机游戏分享
-
在这个快节奏的时代,第三人称射击游戏已经成为了许多玩家的最爱。而单机游戏更是其中的佼佼者,它们拥有着更加丰富的情节和精美的画面。今天我们要分享的是一款最热的第三人称射击单机游戏。这款游戏名为《使命召唤...
- 十款免费的第三人称射击单机游戏分享
-
本文将为大家推荐十款免费的第三人称射击单机游戏,这些游戏不仅免费,而且质量上乘,值得玩家们一试。从经典之作到新近大作,从PC端到移动平台,涵盖了各种类型和风格的游戏。无论你是喜欢动作射击还是喜欢策略战...
- 推荐一些有趣的在线编程游戏,让你学习编程事半功倍
-
▌Robocode让坦克们互相博弈的游戏,你可以看到它们飞奔,碾碎一切挡道的东西。机器人配有雷达与火炮,选手在躲避对手进攻的同时攻击对手,以此来较量得分的多少。这个游戏很有意思,曾经令我沉迷…你可以用...
- 用DEEPSEEK 写的小游戏,直接运行太牛了!~
-
由于DEEPSEEK服务器繁忙,通过OLLAMA来部署各种大模型都可以,电脑配置不够高,能用DEEPSEEKR114B,也只能在CMD下运行,AI可视化软件Chatbox跑不动,具体写内容如下&g...
- 2021年游戏项目的十大编程语言:C++、Java、Net均上榜
-
前两天在某平台刷到了大家讨论腾讯游戏相关开发是不是真的薪资很高,然后就看到了Analticslnsight发布关于2021年游戏项目的十大编程语言。C++C++的效率做游戏是一个很重要的原因,近年来...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)
- SVG 文本 (32)
- 时钟启动 (33)
- HTML 游戏 (34)