前端的多列布局解决方案

简介: 前端页面的布局经历了固定布局,表格布局,浮动、定位布局, 弹性布局,网格布局的历史演进,各种布局方式在web发展的不同阶段扮演你了不同的角色。多列布局的解决方案我个人总结至少有5种之多,有的兼容性不错但代码结构复杂,有的结构简单但兼容性不佳,但根据具体的使用环境和要求,总有一种解决方案是适合你的。

前端页面的布局经历了固定布局,表格布局,浮动、定位布局, 弹性布局,网格布局的历史演进,各种布局方式在web发展的不同阶段扮演你了不同的角色。

多列布局的解决方案我个人总结至少有5种之多,有的兼容性不错但代码结构复杂,有的结构简单但兼容性不佳,但根据具体的使用环境和要求,总有一种解决方案是适合你的。

再介绍这5种解决方案之前,我想有必要废话几句介绍一下布局的演进史。

固定布局

这是一种很早的布局方案,就是固定容器的宽度和容器内各个模块的宽度.这种布局方式在现在的开发中仍然占据一席之地,尤其是在pc端,特别是企业站的开发中.
这个就不举例了,任意打开一个企业站你都会发现它的影子.所以,不再赘述.

表格布局

这是一种较早期的web布局方案,但现在已经废弃,不再使用。它其实就是使用我们常用的表格代码如下:

<table>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
    <tr>
        <td></td>
        <td></td>
        <td></td>
        <td></td>
    </tr>
</table>

所以,这中布局方案不在赘述

浮动、定位布局

浮动:是基于css现代web设计的重要功能之一,是实现多列布局的基础
属性值: none(不浮动), left(向左), right(向右)
说到浮动,当我们使用浮动,就要清除浮动,如何清除浮动不是本文所要讲述的内容,百度输入关键词‘清除浮动’,说解决方案的文章有很多。

定位:这个css属性是建立元素布局所用的定位机制
属性值:static, absolute, fixed, relative, inherit

使用并且分析过bootstra等p框架的同学都会有深刻的印象

总结: 以上三种方案的局限最突出点就是自适应性差,为了达到某种布局效果免不了要使用hack,这个使用不恰当会导致某种无法言语的bug。

弹性布局

弹性布局css3引入的强大的布局方案,因为是css3引入的所以存在兼容性问题,这个兼容问题主要存在pc端,由于移动端移动设备更新换代快,所以在开发中可以不用考虑这方面的问题,至少在我所做的这种移动项目中没有问题。各位看官根据自己项目的情况来定方案。

使用并分析过mui框架和aui等移动框架的同学会有更直观的感受

网格布局

网格布局 已经被w3c纳入到了css3的一个布局模块中, 被称为css grid module,这个布局解决方案是未来的web页面布局的一个趋势,但是他的各浏览器兼容不佳,我目前实验的支持的只有chrome,firefox等有限的几款浏览器,像IE浏览器和微软现在新推出的斯巴达浏览器根本就不支持,国产的浏览器360,qq也不支持,这种布局解决方案,现在还停留在实验阶段。不过看好它前景的不在少数哦!

这个我现在没有找到好的例子,不过我写了一个demo,各位看官可以用chrome浏览器看一下。

多列布局解决方案

这几种解决方案是有列间距的,没有列间距的相对简单一点。
ok,我们下边开始我们的方案解决之旅~

最终这几种解决方案要实现的效果皆如下图所示:

img_a988fb38d85d63081f238a7cf989409e.png
col-1.png

1.固定布局 和 float布局(float:left,兼容性最优)

   html代码
   
  <h3> float布局 外包一个box l-list-container overflow:hidden, l-list加宽一个l-list-item margin-right</h3>
  <div class="l-list-container">
      <div class="l-list">
          <div class="l-list-item"></div>
          <div class="l-list-item"></div>
          <div class="l-list-item"></div>
          <div class="l-list-item"></div>
      </div>
  </div>

css代码

   .l-list-container {
       width: 1000px; height: auto; margin: 0 auto; overflow: hidden;  border: 1px solid #ff0000;
   }
   
   .l-list {
       width: 1020px; height: auto;  /* margin: 0 auto; */  border: 1px solid #cecece; overflow: hidden;
   }
   
   .l-list-item{
       width: 235px; height: 220px;  margin-right: 20px; float: left; background-color: #cecece;
    }

demo地址:demo中的第一个案例
2.固定布局 和 float布局(float:left;css3的辅助的优化方案)(不支持css3的免谈)

就是去掉容器l-list-container, 在样式中加入如下代码:

 .l-list-item:last-child {
    margin-right: 0;
 }

demo地址:demo中的第二个案例
3.转换为内联元素模块(display:inline-block,兼容性最优)

html代码:

<h3>转换为内联模块 diaplay: inline-block </h3>
<div class="l-list3">
    <div class="l-list-item3"></div>
    <div class="l-list-item3"></div>
    <div class="l-list-item3"></div>
    <div class="l-list-item3"></div>
</div>

css代码:

.l-list3 {
    width: 1000px;  height: auto;  margin: 0 auto;  font-size: 0; border: 1px solid #cecece;overflow: hidden;
}

.l-list-item3 {
    display: inline-block; width: 235px;  height: 220px; margin-right: 20px;  background-color: #cecece;
}

demo地址:demo中的第三个案例
4.table布局(display:table,兼容性优)

补充说明:这个是我想的没有在开发中大面积使用,这个方案我感觉是最佳的,各个浏览器测试下来没有发现问题,各位使用中发现问题,记得@我

就是在父容器中使用用display:table,在子容器中使用display:table-cell

img_043f1087acf248350d8b0017bd53283e.png
col-1.png

demo地址:demo中的第四个案例
5.弹性布局(display:flex,兼容性分为两部分,pc端不佳,手机端优秀)

它是在父容器中使用 display: flex; justify-content: space-between;

demo地址:demo中的第五个案例
6.网格布局(display:grid,兼容性不佳)

.l-list5 {
    width: 1000px; height: auto; display: grid; grid-column-gap: 20px; grid-template-columns: 235px 235px 235px 235px; grid-template-rows: 220px; margin: 0 auto; border: 1px solid #cecece;
}

demo地址:demo中的第六个案例

相关文章
|
5月前
|
编解码 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的响应式设计与自适应布局
【4月更文挑战第30天】Flutter框架助力移动应用实现响应式设计与自适应布局,通过层次化布局系统和`Widget`树管理,结合`BoxConstraints`定义尺寸范围,实现自适应。利用`MediaQuery`获取设备信息,调整布局以适应不同屏幕。`FractionallySizedBox`按比例设定尺寸,`LayoutBuilder`动态计算布局。借助这些工具,开发者能创建跨屏幕尺寸、方向兼容的应用,提升用户体验。
131 0
【Flutter前端技术开发专栏】Flutter中的响应式设计与自适应布局
|
2月前
|
编解码 前端开发 JavaScript
.NET_web前端框架_layui_栅格布局
【8月更文挑战第27天】
38 4
|
14天前
|
前端开发 容器
前端基础(十五)_多栏布局(两列自适应布局、圣杯布局---三列布局、双飞翼布局--三列布局、等高布局)
本文介绍了前端开发中的多种自适应布局技术,包括两列自适应布局、圣杯布局(三列布局)、双飞翼布局(三列布局)和等高布局。文章通过代码示例展示了如何使用HTML和CSS实现这些布局,以及如何通过flex布局简化实现过程。
40 2
|
28天前
|
弹性计算 前端开发 容器
【前端web入门第六天】02 flex布局
Flex布局是一种现代CSS布局模式,通过给父元素设置`display: flex`,其子元素可自动挤压或拉伸。它包含弹性容器和弹性盒子,主轴默认为水平方向,侧轴为垂直方向。主轴对齐方式由`justify-content`属性控制,侧轴对齐方式包括`align-items`(针对所有子元素)和`align-self`(针对单个子元素)。修改主轴方向使用`flex-direction`属性,`flex`属性用于控制子元素在主轴上的伸缩比例。此外,`flex-wrap`属性允许子元素换行,而`align-content`属性则定义多行对齐方式。
|
5月前
|
开发框架 前端开发 数据安全/隐私保护
【Flutter 前端技术开发专栏】Flutter 中的布局与样式设计
【4月更文挑战第30天】本文探讨了Flutter的布局和样式设计,关键点包括:1) 布局基础如Column、Row和Stack用于创建复杂结构;2) Container、Center和Expanded等常用组件的作用;3) Theme和Decoration实现全局样式和组件装饰;4) 实战应用如登录界面和列表页面的构建;5) 响应式布局利用MediaQuery和弹性组件适应不同屏幕;6) 性能优化,避免过度复杂设计。了解并掌握这些,有助于开发者创建高效美观的Flutter应用。
144 0
【Flutter 前端技术开发专栏】Flutter 中的布局与样式设计
|
13天前
|
JavaScript 前端开发
网页前端课程设计-【模仿】香港中文大学官网,轮播图及div+css布局,js的dom操作
这篇文章介绍了如何模仿香港中文大学官网进行网页前端课程设计,包括使用div+css布局、js的DOM操作以及实现轮播图等技术细节。
|
5月前
|
缓存 监控 前端开发
前端性能优化以及解决方案
前端性能优化关乎用户体验和网站竞争力,包括减少HTTP请求、使用CDN、压缩资源、延迟加载、利用浏览器缓存等策略。制定优化计划,使用监控工具,遵循最佳实践并持续学习,能提升网站速度和稳定性。
77 0
|
2月前
|
存储 JavaScript 前端开发
vue前端自适应布局,一步到位所有自适应
【8月更文挑战第9天】在Vue前端实现全面自适应布局颇具挑战,但可通过多种方法达成接近目标的效果。首先,结合BootstrapVue或Element UI等响应式框架简化布局实现过程;其次,利用Sass或Less等预处理器增强CSS编写灵活性;再者,发挥Vue的响应式特性,动态调整组件尺寸与位置;同时采用Flexbox及媒体查询技术确保不同屏幕尺寸下的一致体验;针对移动设备,采取移动优先策略并使用专门框架优化表现;最后,多平台测试与细致调优保证布局效果。综合运用上述策略,可在复杂多变的设备环境中打造近乎完美的自适应布局。
|
2月前
|
图形学 开发者
【Unity光照艺术手册】掌握这些技巧,让你的游戏场景瞬间提升档次:从基础光源到全局光照,打造24小时不间断的视觉盛宴——如何运用代码与烘焙创造逼真光影效果全解析
【8月更文挑战第31天】在Unity中,合理的光照与阴影设置对于打造逼真环境至关重要。本文介绍Unity支持的多种光源类型,如定向光、点光源、聚光灯等,并通过具体示例展示如何使用着色器和脚本控制光照强度,模拟不同时间段的光照变化。此外,还介绍了动态和静态阴影、全局光照及光照探针等高级功能,帮助开发者创造丰富多样的光影效果,提升游戏沉浸感。
41 0
|
2月前
|
开发者 图形学 Java
Unity物理引擎深度揭秘:从刚体碰撞到软体模拟,全面解析实现复杂物理交互的技巧与秘诀,助你打造超真实游戏体验
【8月更文挑战第31天】物理模拟在游戏开发中至关重要,可让虚拟世界更真实。Unity作为强大的跨平台游戏引擎,内置物理系统,支持从刚体碰撞到布料模拟的多种功能。通过添加Rigidbody组件,可实现物体受力和碰撞;使用AddForce()施加力;通过关节(如Fixed Joint)连接刚体以模拟复杂结构。Unity还支持软体物理,如布料和绳索模拟,进一步增强场景丰富度。掌握这些技术,可大幅提升游戏的真实感和玩家体验。
51 0