前端布局:小技巧

匿名 (未验证) 提交于 2019-12-03 00:26:01
  • 了解前端布局的常见几种布局方式对实际开发中有很大的帮助
  • 布局过程常用的css属性:float、position、magin、flex(弹性布局)、transform:translateX等。
  • 具体组合方式可查看下文了解
  • 方法一:margin:0 auto; (最常用的居中布局方式)
  • 方法二:text-align和inline-block的结合(设置父元素的text-align为center)。

这种方式最好应用于图片、按钮、文字之类的居中模式,否则就需要借助inline-block来进行居中布局。

  • 方法三:position绝对定位来实现居中布局。

适用于块级元素不给出宽高的情况下(需要借助transtrom的tanslateX方法)。

#parent{     position: relative; } #child{     position: absolute;     top: 0;     left: 50%;     transform:translateX(-50%);     -ms-transform:translateX(-50%); /* IE 9 */     -webkit-transform:translateX(-50%); /* Safari and Chrome */ }
  • 方法四:left + margin-left

适用于块级元素知道宽度

#parent{     position: relative; } #child{     position: absolute;     top: 0;     left: 50%;     margin-left:-100px;     width:200px; }
  • 方法五:利用flex弹性布局的一个属性。

子元素宽度已知的情况下

#parent{     display: flex;     justify-content: center; }
  • 方法一:先说一种神奇的方式吧
  1. 子元素 div 绝对定位
  2. 父元素需要被定位
  3. 子元素 top、bottom、left、right 四个位置值均为 0
  4. 子元素 margin: auto;
#parent{     width: 100%;     height:100%;     position: fixed; } #child{     width: 400px;     height: 200px;     position: absolute;     top: 0;     bottom: 0;     left: 0;     right: 0;     margin: auto;     background-color: #ccc; }
  • 方式二:利用position的绝对定位及负边框来实现。
#parent{     position: fixed;     width: 100%;     height: 100%; } #child{     position: absolute;     left: 50%;     top: 50%;     width: 400px;     height: 200px;     margin-top: -100px;     margin-left: -200px;     background-color: #ccc; }
  • 方式三:利用position的绝对定位及transform来实现
#parent{     position: fixed;     width: 100%;     height: 100%; } #child{     width: 400px;     height: 200px;     background-color: #ccc;     position: absolute;     top: 50%;     left: 50%;     transform:translate(-50%,-50%);     -ms-transform:translate(-50%,-50%); /* IE 9 */     -webkit-transform:translate(-50%,-50%); /* Safari and Chrome */ }
  • 方式一:float+margin的方式

这种方式一定要记得给父元素清除浮动啊,不然就尴尬了呢,这里插播一种全局性(这个词似乎不太对)的清除浮动的伪元素方法.

.clearfix:after {     content: '.';     height: 0;     overflow: hidden;     clear: both;     display: block;     visibility: hidden; } .clearfix {     zoom: 1;  <!--hack--> } #parent {     position: relative;     width: 400px;     height: 400px; } #left{     float: left;     width: 100px;     height: 100%;     background-color:red; } #right{     margin-left: 100px;     width: auto;     height: 100%;     background-color:blue; }
  • 方式二:float+overflow的方式

这就是传说中利用BFC的规则来实现两列布局啊啊啊!

此处做个修改,原来写的有点问题(发现这种方式父元素的高度是取决于最大子元素的高度,在左边栏高度大于右边栏的情况下不会出现问题,但是反过来就塌陷了,所以还是需要给父元素清除浮动)

#left{     float: left;     width: 100px;     margin-right: 20px; <!--好歹留个空啊嘿嘿--> } #right{     overflow: hidden; }
  • 方式三:float+margin+position的方式
#parent{     position: relative; } #left{     float: left;     width: 100px;     background-color: #ccc; } #right{     position: absolute;     top: 0;     left: 120px;     background-color:pink;  }
  • 方式四:flex方式

这个呢,坑肯定是比较多的,建议用在小范围的布局,当然某些时候用起来确实比较爽歪歪啦

#parent{     display: flex; } #left{     width: 100px;     margin-right: 20px; } #right{     flex: 1; }
#parent {     position: relative; } #left {     margin-right:220px;  } #right {     position: absolute;      right:0;      top:0;     width: 200px; }
  • 方式一: 纯float方式

注意:
1. 左侧元素与右侧元素优先渲染,分别向左和向右浮动
中间元素在文档流的最后渲染,自动插入到左右两列元素的中间,随后设置 margin
2. 左右边距分别为左右两列的宽度,将中间元素调整到正确的位置。
3. 但凡用float的时候都要想一下父元素上清除浮动这个问题!

.left{     float: left;     width: 200px;     height: 200px; } .right{     float: right;     width: 100px;     height: 100px; } .middle{     margin:0 120px 0 220px; }
  • 方式二:position的绝对定位

其实感觉跟float的原理差不多,都是将左右两侧的块先固定好,再对中间部分进行处理,只不过自己可以在不同情况下选择float或者position。(补充:这种方式的父元素高度取决于中间部分的高度,当两侧高度大于中间高度时,则出现高度塌陷,除非指定父元素的高度,当两侧高度小于中间部分时,可以使用。所以要考虑使用场景慎重选择不同的方式~)

.parent{     position: relative; } .left{     position: absolute;     width: 200px;     height: 200px;     top: 0;     left: 0; } .right{     position: absolute;     top: 0;     right: 0;     width: 100px;     height: 100px; } .middle{     margin:0 120px 0 220px; }
  • 方式三:flex的弹性布局

不得不说的是其实很多布局都可以用flex来实现(简单粗暴嘿嘿),但是flex的兼容性不是很好,并且还有别问题,所以保险起见还是选择常用的,这里简单介绍下。

.parent{     display: flex; } .left{     width: 200px;     height: 200px; } .right{     width: 100px;     height: 100px; } .middle{     flex: 1;     margin:0 20px;  }
  • 方式四:最后该淘宝的双翼布局闪亮登场了

要注意的是这种布局方式需要将主栏优先渲染,然后再加上两边的翅膀,即双翼,局。

第一步,先将主栏左浮动,并设宽度为100%,即铺满父元素

第二步,将左栏左浮动,并设左外边距为-100%

第三步,将右栏左浮动,并设左外边距为负的自身宽度

第四步,设置主栏,嘿嘿,这时候不管你使用什么方法都达不到效果,解决办法就是给主栏的内容加一个包裹层,并设左右外边距为左右两侧的宽度。

第五步,好了,完美!(但是别忘了,要清除浮动哦~)

<style type="text/css">     #parent {         position: relative;         width: 400px;         height: 400px;     }     #middle{         float: left;         width: 100%;         height: 100%;      }     #middle .con{         width: auto;         height: 100%;         margin-left: 100px;         margin-right: 100px;         background-color: #000000;     }     #left{         float: left;         width: 100px;         height: 100%;         background-color:red;         margin-right: -100%;     }     #right{         float: left;         margin-left: -100px;         width: 100px;         height: 100%;         background-color:blue;     } </style> <div id="parent">     <div id="left"></div>     <div id="middle">         <div class="con"></div>     </div>     <div id="right"></div> </div>
  • 方式五:position+padding:(伪整体适应高度)

第一步:创建三个层层嵌套的div块,来作为三块布局的背景
第二步:在第三层写入三列布局

<style>     body {         margin: 0;         padding: 0;     }      #left {         width: 150px;         position: absolute;         left: 0;         top: 0;     }      #right {         width: 200px;         position: absolute;         right: 0;         top: 0;     }      #middle {         word-wrap: break-word;     }      #backLeft {         background: red;         padding-left: 150px;     }      #backMiddle {         background: blue;         padding-right: 200px;     }      #backRight {         background: green;     } </style> <div id="backLeft">     <div id="backMiddle">         <div id="backRight">             <div id="middle">               le;middle;middle;middle;middle;middle;middle;middle;middle;middle;middle;middl             </div>             <div id="right">right</div>             <div id="left">left</div>         </div>     </div> </div>

(借鉴度90%)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!