CSS常见布局 实现布局的常用方法 单列布局

 更新时间:2019年8月22日 17:33  点击:1245

说起布局其实就和盖房子的道理一样,你首先要盖好房子的模型(规划好页面的布局),房子的雏形盖好后就是往房子里面布置家具了(在布局里面添加东西),这样,房子盖好后不论你往里面添加什么家具也不能影响房子(杠精请坐下),布局也一样,布局完成后,只需要在布局的容器里面添加更加细化的东西就行了。切忌边写内容边布局,这可能因为内容导致布局的改写,费时费力、得不偿失

实现布局的常用方法

1. float

Float 的设计初衷仅仅是为了实现文字环绕效果,所以了解了 Float的设计初衷,我们就能明白 Float的特有的行为表现了

包裹

  • 坚挺

  • 收缩

  • 隔绝

这种特性称之为 BFC(Block Formatting Context——块级格式化上下文), 具有这种包裹性的元素有

  1. display:inline-block / table-cell

  2. position: absolute/fixed/sticky

  3. overflow:hidden/scroll

破坏

如果浮动元素是某一个元素的父元素,那么子元素就会溢出父元素,而父元素将会塌陷

2. 定位

优点:

  • 使用定位属性,结合边偏移属性,可以将元素放置在任何需要的位置,这样做的好处在于,无需考虑元素本身的显示方式和页面代码中所处的位置,直接将元素分离出来进行定位。

缺点:

  • 在使用绝对定位属性的时候,由于元素的位置已经确定,并独立于文档之外,所以当元素中的内容发生变化时,其他元素无法根据绝对定位元素的变化而作相应的调整,最终将会导致页面中内容重叠或者产生空白。

  • 在使用相对定位属性的时候,由于页面中会保留元素原来占有的位置,所以会在原有位置上产生空白区域,同时,由于相对定位的优先级高于普通元素所以也可能造成元素内容的重叠

如果可以的情况下,轻易不要使用定位进行布局,复杂的层级关系会导致你的定位越来越乱,难以维护。

3. Table

优点:

  • 容易上手(据说是。。。)

  • 可以形成复杂的变化,简单快速

  • 表现上更加“严谨”,在不同浏览器中都能得到很好的兼容

  • 适合数据展示

缺点:

  • Table要比其它html标记占更多的字节。(延迟下载时间,占用服务器更多的流量资源。)

  • Tablle会阻挡浏览器渲染引擎的渲染顺序。(会延迟页面的生成速度,让用户等待更久的时间。)

  • Table里显示图片时需要你把单个、有逻辑性的图片切成多个图。(增加设计的复杂度,增加页面加载时间,增加HTTP会话数。)

  • Table会影响其内部的某些布局属性的生效(比如里的元素的height:100%)(这会限制你页面设计的自由性。)

4. Grid

  1. Grid 适用于布局大画面。它们使页面的布局变得非常容易,甚至可以处理一些不规则和非对称的设计。

  2. Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局

5. Flex

  1. Flex 非常适合对齐元素内的内容。你可以使用 Flex 来定位设计上一些较小的细节。

  2. Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。

  3. 不需要进行浏览器兼容测试

  4. 超简洁语法、响应式布局

  5. 兼容性较差

CSS常见布局

单列布局

常见的单例布局有两种

  • 一种就是头部(header)和内容(main)、尾部(footer)等宽居中的布局

  • 另一个就是头部(header)和尾部(footer)等宽,内容(main)略窄居中的布局

特点:定宽、水平居中

两列布局

特点:侧栏固定宽度(如广告等)、主栏自适应

实现方法有很多,这里只举一种方法(以左侧栏固定为例)

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;
  }
}

第二种(flex)

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;
  }
}

这两种的方法区别不大,主要看你喜欢用那个(~ ̄▽ ̄)~

多栏布局(Multi-Columns Layout)

多栏布局是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;
}

瀑布流

使用css的multi-column为例来实现

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;
    }
  }
}


[!--infotagslink--]

相关文章

  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • C#窗体布局方式详解

    这篇文章主要介绍了C#窗体布局方式详解的相关资料,需要的朋友可以参考下...2020-06-25
  • jquery ready函数、css函数及text()使用示例

    .text更改内容 .css更改样式...2013-10-03
  • React引入antd-mobile+postcss搭建移动端

    本文给大家分享React引入antd-mobile+postcss搭建移动端的详细流程,文末给大家分享我的一些经验记录使用antd-mobile时发现我之前配置的postcss失效了,防止大家踩坑,特此把解决方案分享到脚本之家平台,需要的朋友参考下吧...2021-06-21
  • 解决vue scoped scss 无效的问题

    这篇文章主要介绍了解决vue scoped scss 无效的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-09-04
  • js+css实现回到顶部按钮(back to top)

    这篇文章主要为大家详细介绍了js+css实现回到顶部按钮back to top回到顶部按钮,感兴趣的小伙伴们可以参考一下...2016-03-03
  • js中flexible.js实现淘宝弹性布局方案

    这篇文章主要介绍了js中flexible.js实现淘宝弹性布局方案,需要的朋友可以参考下...2015-12-25
  • BootStrap CSS全局样式和表格样式源码解析

    这篇文章主要为大家详细解析了BootStrap图片样式、辅助类样式和CSS组件源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
  • 在JS中如何使用css变量详解

    这篇文章主要给大家介绍了关于如何在JS中如何使用css变量以及export之javascript关键字的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-02
  • 从零开始在vue-cli4配置自适应vw布局的实现

    这篇文章主要介绍了从零开始在vue-cli4配置自适应vw布局,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-09
  • JavaScript驾驭网页-CSS与DOM

    DOM是种符合万维网标准的HTML操纵方式,它能比innerHTML特性达成更多操控功能。这篇文章主要介绍了JavaScript驾驭网页-CSS与DOM的相关资料,需要的朋友可以参考下...2016-03-28
  • XML、HTML、CSS与JS的区别整理

    在BS中,xml,html,css和js我们都学过,起初分不清这四者的区别和联系,随着知识的增长,有了一些体会,下面通过本文给大家简单介绍 XML、HTML、CSS与JS的区别,需要的朋友参考下...2016-02-21
  • 详解微信小程序 通过控制CSS实现view隐藏与显示

    这篇文章主要介绍了微信小程序 通过控制CSS实现view隐藏与显示的相关资料,需要的朋友可以参考下...2017-05-27
  • js+css简单实现网页换肤效果

    这篇文章主要介绍了js+css简单实现网页换肤效果的方法,涉及JavaScript响应鼠标事件动态遍历及修改页面元素样式的相关技巧,需要的朋友可以参考下...2016-01-02
  • 在echarts中图例legend和坐标系grid实现左右布局实例

    这篇文章主要介绍了在echarts中图例legend和坐标系grid实现左右布局实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-05-17
  • Webpack打包css后z-index被重新计算的解决方法

    这篇文章主要跟大家分享了Webpack打包css后z-index被重新计算的解决方法,文中介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来学习学习吧。...2017-06-24
  • Flex网页布局基础入门及实例教程

    Flex是Flexible Box的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。本教程我们来学习一下Flex布局的基本语法知识及运用实例。 网页布局(layout)是CSS的一...2016-09-14
  • Angular实现form自动布局

    这篇文章主要介绍了Angular实现form自动布局的相关资料,以代码片段的形式分析了Angular实现form自动布局的实现方法,感兴趣的小伙伴们可以参考一下...2016-02-01
  • JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)

    这篇文章主要介绍了JS+CSS实现的漂亮渐变背景特效代码,包含6个渐变效果,涉及JavaScript针对页面元素属性动态操作的相关技巧,需要的朋友可以参考下...2016-03-28
  • 一步步教大家编写酷炫的导航栏js+css实现

    一步步教大家编写酷炫的导航栏,js+css实现黑色经典导航栏,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2016-03-18