Web 网页中,所有元素都是盒模型构成的,一个大盒子套一个或者多个小盒子,再用更大的盒子把大盒子给圈起来,这就构成了基本的 HTML 结构,再利用 CSS 把盒子装修得好看一些,最后把它放在正确位置,就是我们所看到的网页。

布局的作用就是要把元素摆放在合适的位置,让网页看起来不显得空闹闹的,也不要显得拥挤。

要摆放元素到合适的位置不是设置某一个元素能达到效果的,而是经常需要父元素和子元素配合,才能达到目标。

元素堆叠

看这么一段的代码,没有任何控制布局情况下,元素会按照出现顺序进行堆叠显示

<div class="box">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
<div class="item">5</div>
</div>
<style>
.box {
font-size: 20px;
margin: 20px;
width: 250px;
height: 180px;
border: 2px solid #ff4757;
}
.box .item {
border: 2px solid rgba(0,255,0,1);
width: 30px;
height: 30px;
}
</style>

效果:

需求一

现要求元素控制在一行显示。

flex 弹性盒子

给外层盒子添加 display: flex; 即可将元素改为弹性盒子。

.box {
display: flex;
}

效果:

grid 网格

让外层盒子变为网格,可让元素在一行中显示。

.box {
display: grid;
grid-template-columns: repeat(auto-fit, 30px);
}

效果:

inline-block 内联块

除了 flex,还可以控制子元素显示为内联块 inline-block,让元素在一行中显示。

.box .item {
display: inline-block;
}

效果:

注意:inline-block 让元素变为了内联块,会像文字、图片一样排版,所以元素之间会存在空隙,其空隙其实是元素之间的换行符造成的,可设置 font-size 为 0,让元素之间没有空隙。

float 元素浮动

还可以给元素添加浮动,让元素在一行中显示。

.box .item {
float: left;
}

效果:

需求二

现要求元素在盒子中居中显示。

flex 弹性盒子

.box {
display: flex;
justify-content: center;
}

grid 网格

.box {
display: grid;
grid-template-columns: repeat(auto-fit, 30px);
justify-content: center;
}

inline-block 内联块

.box {
text-align: center;
}
.box .item {
display: inline-block;
}

效果

为什么没有 float ?float 没办法做到元素居中显示,嗯...也不是做不到,只是需要通过计算获得元素 marginpadding,用边距做出出居中效果。

需求三

元素两端对齐显示。

flex 弹性盒子

.box {
display: flex;
justify-content: space-between;
}

grid 网格

.box {
display: grid;
grid-template-columns: repeat(auto-fit, 30px);
justify-content: space-between;
}

效果

可以明显看到,随着需求越来越复杂,能用的方法就越少了。

其实 floatinline-block 也不是做不到这种效果,还是像上面说的一样,必须要通过计算获得边距,才能做出我们想要的样子。

需求四

元素等宽间距显示。

flex 弹性盒子

.box {
display: flex;
justify-content: space-around;
}

grid 网格

.box {
display: grid;
grid-template-columns: repeat(auto-fit, 30px);
justify-content: space-around;
}

效果

需求五

如果元素大小不统一,默认显示效果是这样:

怎么让元素垂直居中显示?

flex 弹性盒子

.box {
display: flex;
justify-content: space-around;
align-items: center;
}

grid 网格

.box {
display: grid;
grid-template-columns: repeat(auto-fit, 30px);
justify-content: space-around;
align-items: center;
}

效果

需求六

第二个元素定位在盒子右上角。

这时候 flexgrid 都不能实现,只能通过 position 来实现了。

position 元素定位

position 属性对应的值有:

  • static 默认值,元素在正常文档流中显示。
  • relative 相对定位,元素在正常文档流中显示,但可以通过 toprightbottomleft 属性来定位。
  • absolute 绝对定位,元素脱离正常文档流,且不再占用文档流空间,可以通过 toprightbottomleft 属性来设置位置,其位置相对于最近的非 static 祖先元素,如果找不到,则相对于浏览器窗口。
  • sticky 粘性定位,如果元素正常显示,则跟 static 一样,如果元素跑到视口之外,则跟 absolute 一样,但其位置相对 可滚动 的祖先元素。
  • fixed 固定定位,元素脱离正常文档流,切不再占用文档流空间,可以通过 toprightbottomleft 属性来设置位置,其位置相对于浏览器窗口。

实现需求:

.box {
position: relative;
}
.box .item:nth-child(2) {
position: absolute;
right: 0;
top: 0;
}

效果

总结

本文仅介绍了常见的布局场景,开发中的需求千奇百怪,本文介绍的方法可能无法满足需求,这时候就需要发挥想象,在这些基础的布局方法上进行组合了。

Web前端入门第 34 问:CSS 常见布局的更多相关文章

  1. web前端入坑第五篇:秒懂Vuejs、Angular、React原理和前端发展历史

    秒懂Vuejs.Angular.React原理和前端发展历史 2017-04-07 小北哥哥 前端你别闹 今天来说说 "前端发展历史和框架" 「前端程序发展的历史」 「 不学自知, ...

  2. 好程序员web前端分享18个用CSS制作出来的东西

    好程序员web前端分享18个用CSS制作出来的东西,与流行的看法相反,CSS不仅仅是用来提供一个WEB页面的基本风格,以使它看起来更有吸引力.还有很多其他的事情,CSS也可以做的很好.由于它创建动画和 ...

  3. 好程序员web前端分享值得参考的css理论:OOCSS、SMACSS与BEM

    好程序员web前端分享值得参考的css理论:OOCSS.SMACSS与BEM 最近在The Sass Way里看到了Modular CSS typography一文,发现文章在开头部分就提到了OOCS ...

  4. 进击的Python【第十三章】:Web前端基础之HTML与CSS样式

    进击的Python[第十四章]:Web前端基础之HTML与CSS样式 一.web框架的本质 众所周知,对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客 ...

  5. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  6. 前端进阶系列(二):css常见布局解决方案

    水平居中布局 margin+定宽 <div class="parent"> <div class="child">Demo</di ...

  7. css CSS常见布局解决方案

    CSS常见布局解决方案说起css布局,那么一定得聊聊盒模型,清除浮动,position,display什么的,但本篇本不是讲这些基础知识的,而是给出各种布局的解决方案.水平居中布局首先我们来看看水平居 ...

  8. css常见布局方式

    CSS常见布局方式 以下总结一下CSS中常见的布局方式.本人才疏学浅,如有错误,请留言指出. 如需转载,请注明出处:CSS常见布局方式 目录: 使用BFC隐藏属性 float + margin abs ...

  9. CSS常见布局问题整理

    实现div的水平居中和垂直居中 多元素水平居中 实现栅格化布局 1. 实现div的水平居中和垂直居中 实现效果: 这大概是最经典的一个题目了,所以放在第一个. 方法有好多, 一一列来 主要思路其实就是 ...

  10. web前端入坑第二篇:web前端到底怎么学?干货资料! 【转】

    http://blog.csdn.net/xllily_11/article/details/52145172 版权声明:本文为博主[小北]原创文章,如要转载请评论回复.个人前端公众号:前端你别闹,J ...

随机推荐

  1. 0425-字节输入流FileInputStream

    package A10_IOStream; import java.io.FileInputStream; import java.io.IOException; /* java.io.InputSt ...

  2. JS深度理解

    事件循环 程序运行需要有自己专属的内存空间,可以把这块内存简单理解为进程 每个应用至少有一个进程,进程间相互独立,要通信,也需要双方同意 线程 有进程后,就可以运行程序的代码 运行代码的 [人] 称为 ...

  3. 俄罗斯方块-shell脚本写的,学习学习

    #!/bin/bash APP_NAME="${0##*[\\/]}" APP_VERSION="1.0" #颜色定义 iSumColor=7 #颜色总数 cR ...

  4. 用豆包+Kimi,一分钟生成想要的PPT!

    大家好!在快节奏的现代社会,时间就是金钱.对于经常需要制作PPT的朋友们来说,如何快速.高效地完成演示文稿的制作一直是个头疼的问题.今天,我要给大家介绍如何利用AI工具:豆包+kimi,让你在一分钟内 ...

  5. IAP升级(STM32)

    IAP升级(STM32) IAP作用简述:将要升级的程序bin文件通过串口发送给STM32,STM32接收后存储到FLASH或者SRAM,用户通过事件(按键等)触发(也可延时自动触发)后将升级 文件夹 ...

  6. Deepseek学习随笔(3)--- 高效提问技巧

    明确需求 在与 DeepSeek 互动时,明确需求是获取高质量回复的关键.以下是一些示例: 错误示例:帮我写点东西 这样模糊的指令无法让 DeepSeek 理解你的具体需求,生成的回复可能无法满足你的 ...

  7. Qt QFileSystemModel 的使用

    Model 指的是数据 View 指的是界面,View不用设置,只需要和Model进行绑定,绑定完成之后就是Model的格式了 例子:本例子中QListView QTableView QTreeVie ...

  8. Typecho Mirages 主题自定义公告样式

    使用步骤 将以下代码加入到 <head> 标签中.对于本主题,依次进入 控制台 - 外观 - 设置外观 - 主题自定义扩展,将代码加入到 自定义 HTML 元素拓展 - 标签: head ...

  9. Github Copilot的使用方法和快捷键

    GitHub Copilot是一款由GitHub和OpenAI共同开发的代码智能补全工具,它使用机器学习模型来为你提供代码建议和自动完成,可以加快开发过程并提高代码质量.下面是使用GitHub Cop ...

  10. 「六」Goaccess实现可视化

    下载 apt install goaccess 使用goaccess进行监控 LANG="en_US.UTF-8" bash -c 'goaccess logs/access.lo ...