两列布局:6种方法

面试过程中总会文档两列布局,左边等宽,右边自适应几种方法?以下提供6种为君解忧

<div id="wrap">
  <div id="left"></div>
  <div id="right"></div>
</div>

需求就是左侧定宽,右侧自适应。(height先不用管)
方法一:双inline-block
#wrap{
  width: 100%;
  font-size: 0;
}
#left{
  width: 200px;
  height: 100px;
  display: inline-block;
}
#right{
  height: 100px;
  width: calc(100% - 200px);
  display: inline-block;
}

缺点:

为消除html中空格的影响需要把父级的font-size设为0
如果两边高度不一样,需要加vertical-align: top

注意:calc表达式内运算符两边要有空格

方法二:双float
#left{
  float: left;
  width: 200px;
  height: 100px;
}
#right{
  float: left;
  height: 100px;
  width: calc(100% - 200px);
}

本方案和双inline-block方案原理相同,都是通过动态计算宽度来实现自适应。但是,由于浮动的block元素在有空间的情况下会依次紧贴,排列在一行,所以无需设置display: inline-block;,自然也就少了顶端对齐,空格字符占空间等问题。

A floated box is shifted to the left or right until its outer edge touches the containing block edge or the outer edge of another float.

缺点:

父元素需要清除浮动

方法三: float+margin-left
#left{
  float: left;
  width: 200px;
  height: 100px;
}
#right{
  height:100px;
  margin-left: 200px;
}

上面两种方案都是利用了CSS的calc()函数来计算宽度值。下面两种方案则是利用了block级别的元素盒子的宽度具有填满父容器,并随着父容器的宽度自适应的流动特性。block级别的元素会认为浮动的元素不存在,但是inline级别的元素能识别到浮动的元素。

缺点:需要清除浮动,需要计算margin-left
方法四:absolute+margin-left
#left{
  position: absolute;
  width: 200px;
  height: 100px;
}
#right{
  height: 100px;
  margin-left: 200px;
}

缺点:使用了绝对定位,若是用在某个div中,需要更改父容器的position。
方法五:float+BFC
#wrap{
  overflow:hidden;
}
#left{
  width: 200px;
  height: 100px;
  float: left;
}
#right{
  height: 100px;
  margin-left: 0;
  overflow: auto;
}

这种方法同样是利用了左侧浮动,但是右侧盒子通过overflow:auto;形成了BFC,因此右侧的盒子不会被浮动的元素重叠。
缺点:父元素需要清除浮动。
方法六:flex布局
#wrap{
  display: flex;
}
#left{
  width: 200px;
  height: 100px;
}
#right{
  height: 100px;
  flex: 1;
}

原文地址:https://www.cnblogs.com/LingXiangLi/p/10252873.html

时间: 2024-10-09 12:13:24

两列布局:6种方法的相关文章

两列布局的设置方法总结

今天看到了这样一道题 用两种不同的方法来实现一个两列布局,其中左侧部分宽度固定.右侧部分宽度随浏览器宽度的变化而自适应变化 自己感觉有好几种方法,再此总结下: 一.使用position:absolute方法,因为把元素设置为absolute,那元素就脱离了文档流,后面的元素就会占据他原来的位置: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xht

两列布局

很多网站都使用了两列布局,就是左边固定,右边自适应的布局.两列布局有多种方法,现在来列举一下 第一种:margin + float /   margin + absolute 将左边设置 float 或者 absolute ,使其脱离文档流,右边使用margin-left设置左右间隔,大小一般为 >= 左边的宽度,因为是块级元素,所以右边可以充满剩余的屏幕,这样就实现了左边固定,右边自适应的效果. 代码如下: <!DOCTYPE html> <html> <head&g

两列布局实现方法

两列布局的实现方式有很多,现根据不同需求列出常用的几种 一.两列固定布局 1.普通的浮动布局 两列固定布局,已知左列和右列内容的宽度,可以用float来实现 html: <div class="wrap clearfix"> <div class="left"> <p>左侧固定宽度</p> <p>左侧固定宽度</p> <p>左侧固定宽度</p> <p>左侧固定

两列布局中单列定宽单列自适应布局的5种思路

× 目录 [1]float [2]inline-block [3]table[4]absolute[5]flex 前面的话 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.本文将从float.inline-block.table.absolute和flex这五种思路来详细说明如何巧妙地实现布局 思路一: float 说起两列布局,最常见的就是使用float来实现.float浮动布局的缺点是浮动后会造成文本环绕等效果,以及需要及时清除浮动.如果各浮动元素的高度不同时,可能会出犬牙交错

css 两列布局中单列定宽单列自适应布局的6种思路

前面的话 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.本文将从float.inline-block.table.absolute.flex和grid这六种思路来详细说明如何巧妙地实现布局 float [思路一]float 说起两列布局,最常见的就是使用float来实现.float浮动布局的缺点是浮动后会造成文本环绕等效果,以及需要及时清除浮动.如果各浮动元素的高度不同时,可能会出犬牙交错的效果 [1]float + margin 将定宽的一列使用float,而自适应的一列使用计

两列布局实现自适应的方法

注意的是:哪个div(即固定宽度的那个div)设置了浮动,哪个div标签放在html前面 两列布局,左侧div自适应,右侧div固定宽度: <div class="my-line"> <div class="line-right">北京京东尚科信技术司</div><!--右侧div宽度固定,所以设置了右浮动,放在前面--> <div class="line-left">所在公司:<

如何通过 CSS 实现一个左边固定宽度、右边自适应的两列布局

最近在百度 IFE 训练营中看见的一道题目: 用两种不同的方法来实现一个两列布局,其中左侧部分宽度固定.右侧部分宽度随浏览器宽度的变化而自适应变化  个人总结出如下三种实现思路: 通过绝对定位实现 See the Pen absolute-two-column by xal821792703 (@honoka) on CodePen. 注意点如下: 需要套一个“positioned”的父元素 div-a 绝对定位,并将位置调整为浏览器左上角 div-b margin-left 属性值为 div-

横向两列布局

网页常见布局方式一: float属性--使纵向排列的块级元素,横向排列 margin属性--设置两列之间的间距 一般包裹层中两个并排的div控制距离都在10~20之间 当父包含块缩成一条时,用clear:both方法清除浮动无效,它一般使用紧邻后面的元素的清除浮动 而当整个父层mainbody来清除浮动(父包含块缩成一条),我们用第二种方法:     overflow:hidden(隐藏属性,当设置隐藏属性是就不要设置高度值了) 1.  如果希望并排的两个div间又间距可对左浮动进行设置   #

CSS两列布局

在布局中,我们常常需要出现两列的情况,其中左边一列固定宽度,右边一列随着浏览器宽度变化而变化.如何实现呢? 传统的方法是利用float将左部分浮动起来,再通过margin将右部分右移,得到所需效果,代码如下: <!--两列布局,其中左侧固定,右侧自适应--> <div class="left background-color-red height-60 width-300"></div> <div class=" background