厚积薄发 前端学习笔记 CSS基础篇-左侧固定,右侧自适应(或右侧固定,左侧自适应)布局方法

这是我们经常可能会遇到到一种布局方法,或者是右侧固定,左侧自适应,下面列出我归纳总结的几种方法,是实际开发中比较常用和实用的几种方法

GitHub项目链接

写在前面

归纳总结了几种比较ok的方法,左右布局是基本功之一,虽然现在我们基本在开发中都会使用类似antd,element,iview这些前端ui框架,这些框架已经把传统的布局样式给封装的很完美了,但是作为前端的css基础,我认为这些也是必须掌握的,而且很有可能在实际开发过程中就遇到了呢

  • 方法一:左侧div浮动 右侧元素设置margin-left自适应
  • 方法二:左侧div浮动,右侧元素创建BFC
  • 方法三:左侧div采用绝对布局,右侧元素设置margin-left自适应
  • 方法四:外层父级元素使用table布局,子元素使用table-cell
  • 方法五:双float + calc计算宽度
  • 方法六:flex布局

首先列出通用的css样式
通用css样式

.mainContent {
  /* 基本最外层父级元素,不需要做任何特殊处理,这里写着,只是在实际开发中,外层肯定会有一个嵌套的父级元素 */
}

.main-1::after {
  /*通用css 用于清除浮动,使用浮动布局必然会涉及到清除浮动,这里我只用了最常用的方法,其余方法请读者自行搜索*/
  content: "";
  clear: both;
  display: block;
  height: 0;
}

.leftDivCommon {
  /*左侧布局通用样式*/
  background: gray;
  width: 200px;
  height: 400px;
}

.rightDivCommon {
  /*右侧布局通用样式*/
  background: #feee;
  height: 300px;
}

方法一:左侧div浮动 右侧元素设置margin-left自适应

html

        <div>
          <h1>方法一:左侧div浮动 右侧元素设置margin-left自适应</h1>
          <div className="mainContent main-1">
            <div className="left-1 leftDivCommon">This is left</div>
            <div className="right-1 rightDivCommon">This is right</div>
          </div>
        </div>

css

.left-1 {
  float: left;
}

.right-1 {
  /* 第一种方法,右侧元素必须写margin-left,距离等于左侧元素的宽度,
     因为左侧元素已经浮动了,浮动元素是脱离文档流的,如果不加这个margin,右侧宽度和左侧如果 
     一样,就没什么区别,如果右侧宽度和
     左侧不一样的话,那么加上背景颜色后,会出现右侧包裹左侧的情况出现,
     就是因为左侧元素脱离文档流后,右侧未浮动的元素会覆盖文档流当前的全部块级
  */
  margin-left: 200px;
}

方法二:左侧div浮动,右侧元素创建BFC(关于BFC的详细介绍,请读者自行搜索,很多文章已经介绍的很清楚了)

html

        <div>
          <h1>方法二:左侧div浮动,右侧元素创建BFC</h1>
          <div className="mainContent main-1">
            <div className="left-2 leftDivCommon">This is left</div>
            <div className="right-2 rightDivCommon">This is right</div>
          </div>
        </div>

css

.left-2 {
  float: left;
}

.right-2 {
  /* 
    创建BFC的方法,BFC是一个上下文环境,创建方法如下
    float的值不为none
    position的值不为static或者relative
    display的值为 table-cell, table-caption, inline-block, flex, 或者 inline-flex中的其中一个
    overflow的值不为visible
  */
  overflow: auto;
}

方法三:左侧div采用绝对布局,右侧元素设置margin-left自适应

html

        <div>
          <h1>方法三:左侧div采用绝对布局,右侧元素设置margin-left自适应</h1>
          <div className="mainContent-3 main-1">
            <div className="left-3 leftDivCommon">This is left</div>
            <div className="right-3 rightDivCommon">This is right</div>
          </div>
        </div>

css

.mainContent-3 {
  position: relative;
  min-height: 400px;
}

.left-3 {
  /* 
    这个方法有两个弊端,不建议采用这种方法
    - 必须规定外层父级元素的position是relative或者absolute
    - 采用绝对布局的方法的问题在于无法使用清除浮动让最外层的父级元素把全部内容给包住,如果是浮动元素,可以在外层包裹标签上写清除浮动,
    这种方法要解决这个问题,只能在外层写height来强制规定高度包含左侧的高度,这种方法很不好,因为里面有可能还会包含一些其他的元素,需要精确计算好高度
  */
  position: absolute;
}

.right-3 {
  margin-left: 200px;
}

方法四:外层父级元素使用table布局,子元素使用table-cell

html

        <div>
          <h1>方法四:外层父级元素使用table布局,子元素使用table-cell</h1>
          <div className="mainContent-4">
            <div className="left-4 leftDivCommon">This is left</div>
            <div className="right-4 rightDivCommon">This is right</div>
          </div>
        </div>

css

.mainContent-4 {
  /*
  对table-cell元素设置百分比(如100%)的宽高值时无效的,但是可以将父元素设置display:table,
  再将父元素设置百分比宽高,子元素table-cell会自动撑满父元素。这就可以做相对于整个页面的水平垂直居中
  注意:
  (1)display: table时padding无效
  (2)display: table-row时margin、padding无效
  (3)display: table-cell时margin无效
  */
  display: table;
  width: 100%;
}

.left-4 {
  display: table-cell;
}

.right-4 {
  display: table-cell;
}

方法五:双float + calc计算宽度

html

        <div>
          <h1>方法五:双float + calc计算宽度</h1>
          <div className="mainContent main-1">
            <div className="left-5 leftDivCommon">This is left</div>
            <div className="right-5 rightDivCommon">This is right</div>
          </div>
        </div>

css

.left-5 {
  float: left;
}

.right-5 {
  float: left;
  width: calc(100% - 200px);
}

方法六:flex布局

html

        <div>
          <h1>方法六:flex布局</h1>
          <div className="mainContent-6 main-1">
            <div className="left-6 leftDivCommon">This is left</div>
            <div className="right-6 rightDivCommon">This is right</div>
          </div>
        </div>

css

.mainContent-6 {
  display: flex;
}

.left-6 {
  flex: 0 0 200px;
}

.right-6 {
  flex: 1;
}

写在后面

网上关于左右基本布局的css样式归纳也不在少数了,这里作为我个人学习记录的一个总结,给大家分享,如果觉得对你有帮助,可以给我点个赞

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容