昨天早上看到了一篇很棒的文章,这篇文章将布局的一些知识点整理的很不错。我也想整理一下,这样在以后的项目中可以活学活用,避免只用一种方式。

参考文章:https://segmentfault.com/a/1190000013565024;https://segmentfault.com/a/1190000008789039#articleHeader4

    前端布局是页面构建过程中很基础,很重要的一环。这里介绍一些我了解的,不足的地方大家可以补充。

    一、常用的居中方法

     1、水平居中

         ①如果子元素是行内元素,可以直接设置父元素使用:text-align:center的方式,使子元素水平居中;

         <div class="container">
      <span>css布局整理</span>
         </div>
          .container{
       text-align: center;
          }

   ②将子元素变为行内块元素,然后设置 父元素text-align:center的方式; 

          优点:兼容性好,可兼容IE6/IE7

          缺点:子元素的文字也是自动水平居中的,如果不需要文字水平居中,需要设置text-align:left/right      

              .container{
       text-align: center;
      }
      .container span{
      display:inline-block;
      }

        ③使用table+margin的方式

          原理:先将子元素设置属性display:table,使其按照块级表格的方式显示,再设置其居中显示

          优点:只针对子元素设置样式

          缺点:兼容性不太好

            .container span{
display: table;
margin:0 auto;
}

        ④使用绝对定位的方式

         原理:设置父元素为相对定位,子元素为绝对定位,然后使子元素左/右移父元素宽度的50%,然后使用transform的属性,设置其移动自身宽度的-50%

         优点:不会对其他子元素产生影响;

         缺点:transform是CSS3的内容,在兼容问题上应注意。  

            <div class="container">
<div>css布局整理</div>
</div>
             .container div{
position: absolute;
left:50%;
transform:translateX(50%);
}

      ⑤使用弹性布局

原理:设置父元素为弹性布局,使其子元素水平居中排列

      优点:只需要对父元素进行设置样式就可以了

      缺点:兼容性问题

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

     2、垂直居中     

<div class="container">
<div>css布局整理</div>
</div>

         ①如果父元素是定高的,那么可以设置子元素的line-height:父元素的高度。但是这个方法有个弊端,就是如果父元素有padding,要将padding的那部分距离去掉

.container{
width:100%;
height:500px;
}
.container div{
line-height: 500px;
}

     ②使用table-cell和vertical-align的方式

                 原理:将父元素设置为一个单元格,在单元格上设置其垂直居中    

.container{
display: table-cell;
vertical-align: middle;
height:500px;//设置父元素的高度,使效果变得更明显
}

     ③使用绝对定位

 .container{
height:500px;//设置高度,使效果更明显
position: relative;
}
.container div{
position:absolute;
top:50%;
transform:translateY(50%);
}

    ④弹性布局flex+align-items

.container{
display:flex;
align-items: center;
}

    3、水平垂直居中

      ①使用弹性布局

.container{
display:flex;
align-items: center;
justify-content:center;
}

      ②使用绝对定位

      .container{
position: relative;
}
.container div{
position: absolute;
top:50%;
left:50%;
transform: translate(-50%,-50%);
}

二、多列布局 

  两列布局的主要特征是侧边栏宽度固定,主内容栏宽度自适应。

   三列布局的主要特征是左右两侧边栏宽度固定,主栏宽度自适应  

  1、两列布局

    ①使用float+margin的方式

      原理:可使用float方法使侧边栏左右浮动,然后设置主栏的左右margin>=左右侧边栏的宽度即可。     

 <aside class="aside">侧边栏宽度固定300px</aside>
<div class="main">主栏宽度自适应</div> /*样式*/
.aside{
width:30%;
background-color: #dddddd;
float:left;
}
.main{
margin-left: 32%;
background-color: darkgray; }

    ②使用flex弹性布局的方式

<div class="container">
<aside class="aside">侧边栏宽度固定300px</aside>
<div class="main">主栏宽度自适应</div>
</div> /*样式*/
.container{
display: flex;
width:100%;
}
.aside{
width:30%;
background-color: #dddddd; }
.main{
margin-left: 1%;
background-color: darkgray;
flex: 1;
}

    ③position+margin的使用   

 <aside class="aside">侧边栏宽度固定300px</aside>
<div class="main">主栏宽度自适应</div> /*样式*/
.aside{
width:30%;
background-color: #dddddd;
position:absolute;
}
.main{
margin-left: 32%;
background-color: darkgray; }    

   2、三列布局

    ①圣杯布局

<body>
<header class="header">header内容区域</header>
<div class="container">
<div class="main">
主栏宽度自适应lorem Lorem ipsum dolor sit amet,
consectetur adipisicing elit. Consequatur dolorem,
doloremque eligendi, esse ex excepturi exercitationem
nihil nostrum, pariatur quis quos tempora! Ab facilis impedit
inventore laboriosam laborum quae sed!
</div>
<aside class="left">侧边栏宽度固定300px</aside>
<aside class="right">侧边栏宽度固定300px</aside>
</div>
<footer class="footer">footer内容区域</footer>
</body>
  .header,.footer{
width:100%;
padding: 10px 0;
background-color: #dddddd;
text-align: center;
}
.container{
width:100%;
text-align: center ;
overflow: hidden;
height:200px;
}
.left{
background-color: red;
width: 200px;
height: 200px;
float: left;
margin-left: -100%;
}
.right{
background-color: chartreuse;
width: 200px;
height: 200px;
float: left;
margin-right: -200px;
position: relative;
right: 200px;
}
.main{
background-color: #aaa;
height:200px;
float:left;
padding: 0 200px;
}

        ②双飞翼布局

<body>
<div class="left">左侧边栏宽度固定200px</div>
<aside class="right">右侧侧边栏宽度固定200px</aside>
<div class="container">
<header class="header">头部</header>
<div class="main">中间主栏宽度自适应</div>
<footer class="footer">底部</footer>
</div>
</body>
 .left{
width:200px;
min-height:500px;
background-color: chartreuse;
float:left;
}
.container{
min-height:500px;
margin: 0 200px;
}
.header,.footer{
width:100%;
height:20px;
background-color: #dddddd;
}
.main{
background-color: blueviolet;
min-height: 460px;
}
.right{
width: 200px;
min-height: 500px;
background-color: red;
float: right;
}

这两种布局也可以用弹性布局来实现。代码略

  

    

css布局知识点汇总的更多相关文章

  1. HTML+Css+JavaScript知识点汇总

    HTML 部分 HTML基础知识 1. HTML简介 HTML(Hypertext Markup Language),超文本标记语言,HTML利用各种标记来标识文档的结构以及标识超链接的信息.它是从S ...

  2. 日常实用css布局技巧汇总

    1.单行完整显示,多行省略显示. .box { width: 100px;  //必要 display: -webkit-box;    //必要 font-size: 14px; line-heig ...

  3. [面试仓库]CSS面试题汇总--布局篇

    一,盒模型   说到 CSS 布局这块的内容,首当其冲的就是我们的盒模型宽度计算问题,在开始我们的问题之前,我们首先要搞懂这些概念: 盒模型里面的内容(content): 也就是实实在在要展现的内容, ...

  4. 界面设计技法之css布局

    css布局之于页面就如同ECMAScript之于JS一般,细想一番,html就如同语文,css就如同数学,js呢,就是物理,有些扯远,这里就先不展开了. 回到主题,从最开始的css到如今的sass(l ...

  5. 让CSS布局更加直观:box-sizing

    让CSS布局更加直观:box-sizing 如果你写过CSS或者你接触过CSS,相信你一定对盒子模型一点都不陌生.CSS其中一个让人比较困惑的地方就在于它的盒子模型中关于高度和宽度的计算,别说那些初学 ...

  6. 【转】css布局居中和CSS内容居中区别和对应DIV CSS代码

    原文地址:http://www.divcss5.com/jiqiao/j771.shtml css布局居中和CSS内容居中区别和对应DIV CSS代码教程与图文代码案例篇 对于新手来说DIV CSS布 ...

  7. 23----2013.07.01---Div和Span区别,Css常用属性,选择器,使用css的方式,脱离文档流,div+css布局,盒子模型,框架,js基本介绍

    01 复习内容 复习之前的知识点 02演示VS创建元素 03div和span区别 通过display属性进行DIV与Span之间的转换.div->span 设置display:inline   ...

  8. nginx几个知识点汇总

    WHY? 为什么用Nginx而不用LVS? 7点理由足以说明一切:1 .高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 - 3 万并发连接数.?2 .内存消耗少: 在 3 万 ...

  9. 移动平台3G手机网站前端开发布局技巧汇总

    移动平台3G手机网站前端开发布局技巧汇总 作者:前端开发-武方博   发布:2011-05-10 09:11   分类:移动开发   阅读:120,618 views   7条评论     您或许正在 ...

随机推荐

  1. TCP服务器端和客户端程序设计【转】

    本文转载自:http://blog.csdn.net/yueguanghaidao/article/details/7035248# 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.实验目的 ...

  2. kvm初体验之八:调整vm的vcpu, memory, disk大小

    假设host上创建的vm的名字为vm1. 1. 查看vm1的domain information [root@tanghuimin thm]# virsh dominfo vm1 Id: 10 Nam ...

  3. 发现eclipse红叉,查看markers发现Target runtime Apache Tomcat v8.0 is not defined

    导入以前的项目(Markers中注意查看,就在console选项卡旁边),报以下错误,但不影响操作: Faceted Project Problem        Target runtime Apa ...

  4. linux进程学习-进程描述符的存储

    当进程被新建时,内核会给进程分配一个8K的空间作为进程的内核堆栈.同时我们知道task_struct结构体也会被创建,但有意思的是,内核不会给task_struct单独分别空间,而是直接将其扔到8k的 ...

  5. Cloudera Manager 5 和 CDH5 本地(离线)安装指南

    http://archive.cloudera.com/cm5/redhat/6/x86_64/cm/5.0.0/RPMS/x86_64/ http://archive-primary.clouder ...

  6. ACM学习历程—HDU 1272 小希的迷宫(并查集)

    Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该是双向连通的,就 ...

  7. ACM学习历程—HDU1392 Surround the Trees(计算几何)

    Description There are a lot of trees in an area. A peasant wants to buy a rope to surround all these ...

  8. WPF DatePicker 的textbox的焦点

    要得到DatePicker的textchange属性, 必须通过TextBoxBase.TextChanged 事件来处理. 想要判断是否当前DatePicker的textbox获取到焦点, 可以通过 ...

  9. 好文章!转载嵌入式LINUX

    整理了嵌入式linux学习路线供参考,希望对您有所参考价值! 一.linux入门 目前嵌入式主要开发环境有 Linux.Wince等:Linux因其开源.开发操作便利而被广泛采用.而Linux操作系统 ...

  10. Java对象序列化详解

    深入理解Java对象序列化 1. 什么是Java对象序列化 Java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比 ...