CSS布局 两列布局之单列定宽,单列自适应布局思路
前言
说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式。比如斗鱼的直播间,后台管理系统都是常用的
我们将从 float, inline-block, table, absolute, flex, grid 这几个布局方式来实现这种效果
float
【float + margin】
将定宽的一列使用float,而自适应的一列使用计算后的margin
<style>
.f1 .parent{overflow: hidden;zoom: 1;} // 触发bfc和haslayout来闭合浮动
.f1 .left{position: relative;float: left;width: 100px;}
// width: 100% 以免浮动后内容撑开宽度。 margin-left: -100px; 由于宽度设置100%这会挤到下一行去了,利用margin 负值特性来规避
.f1 .rightWrap{float: left;width: 100%;margin-left: -100px;}
.f1 .right{margin-left: 120px;}
</style>
<div class="case-box f1" data-case="f1">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="rightWrap" style="background-color: pink;">
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
</div>
效果展示:
【float + margin + calc】
[注意]IE8-、android4.3-、IOS5.1-不支持,android4.4+只支持加减运算
<style>
.f2 .parent{overflow: hidden;zoom: 1;}
.f2 .left{float: left;width: 100px;margin-right: 20px;}
.f2 .right{float: left;width: calc(100% - 120px);} // 利用calc可以不同长度单位进行动态计算的特性
</style>
<div class="case-box f2" data-case="f2">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
效果展示:
【float + overflow】
还可以使用overflow属性来触发bfc,来阻止浮动造成的文字环绕效果。由于使用overflow不会改变元素的宽度属性,所以不需要重新设置宽度。由于设置overflow:hidden并不会触发IE6-浏览器的haslayout属性,所以需要设置zoom:1来兼容IE6-浏览器
<style>
.f3 .parent{overflow: hidden;zoom: 1;}
.f3 .left{float: left;width: 100px;margin-right: 20px;}
.f3 .right{overflow:hidden;zom:1;} // 触发bfc和haslayout
</style>
<div class="case-box f3" data-case="f3">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
效果展示:
inline-block
inline-block内联块布局的主要缺点是需要设置垂直对齐方式vertical-align,则需要处理换行符解析成空格的间隙问题。IE7-浏览器不支持给块级元素设置inline-block属性,兼容代码是display:inline;zoom:1;
【inline-block + margin + calc】
一般来说,要解决inline-block元素之间的间隙问题,要在父级设置font-size为0,然后在子元素中将font-size设置为默认大小
[注意]IE8-、android4.3-、IOS5.1-不支持,android4.4+只支持加减运算
<style>
.f4 .parent{font-size:0;}
.f4 .left{
display: inline-block;
vertical-align: top;
width: 100px;
margin-right: 20px;
font-size: 16px;
}
.f4 .right{
display: inline-block;
vertical-align: top;
width: calc(100% - 120px);
font-size: 16px;
}
</style>
<div class="case-box f4" data-case="f4">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
效果展示:
【inline-block + margin + margin负值】
<style>
.f5 .parent{
font-size: 0;
}
.f5 .left{
position: relative;
display: inline-block;
vertical-align: top;
width: 100px;
font-size:16px;
}
.f5 .rightWrap{
display: inline-block;
vertical-align: top;
width: 100%;
margin-left: -100px;
font-size: 16px;
}
.f5 .right{margin-left: 120px;}
</style>
<div class="case-box f5" data-case="f5">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="rightWrap" style="background-color: pink;">
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
</div>
效果展示:
table
使用table布局的缺点是元素被设置为table后,内容撑开宽度,所以需要设置width:100%。若要兼容IE7-浏览器,需要改为<table>结构。由于table-cell元素无法设置margin,若需要在元素间设置间距,需要增加结构
<style>
.f6 .parent{display:table;width: 100%;table-layout: fixed;}
.f6 .left,.f6 .rightWrap{display:table-cell;}
.f6 .left{width: 100px;}
.f6 .right{margin-left: 20px;}
</style>
<div class="case-box f6" data-case="f6">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="rightWrap" style="background-color: pink;">
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
</div>
效果展示:
absolute
absolute布局的缺点是由于父元素需要设置为relative,且子元素设置为absolute,所以父元素的高度并不是由子元素撑开的,需要单独设置。
<style>
.f7 .parent{
position: relative;
width: 100%;
height:40px;
}
.f7 .left{
position: absolute;
left:0;
width:100px;
}
.f7 .right{
position: absolute;
left:120px;
right:0;
}
</style>
<div class="case-box f7" data-case="f7">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
效果展示:
flex
flex弹性盒模型是非常强大的布局方式。但由于其性能消耗较大,适合于局部小范围的布局
[注意]IE9-浏览器不支持
<style>
.f8 .parent{
display: flex;
}
.f8 .left{
width:100px;
margin-right: 20px;
}
.f8 .right{
flex:1 1 auto;
}
</style>
<div class="case-box f8" data-case="f8">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
效果展示:
grid
使用栅格布局grid实现
[注意]IE10-浏览器不支持
<style>
.f9 .parent{
display: grid;
/* 子项目分别按照 100px固定宽度 以及1fr的栅格宽度分配 */
grid-template-columns: 100px 1fr;
/* 子项目间隙 */
grid-gap:20px
}
</style>
<div class="case-box f9" data-case="f9">
<div class="parent" style="background-color: lightgrey;">
<div class="left" style="background-color: lightblue;">
<p>left</p>
</div>
<div class="right" style="background-color: lightgreen;">
<p>right</p>
<p>right</p>
</div>
</div>
</div>
效果展示:
CSS布局 两列布局之单列定宽,单列自适应布局思路的更多相关文章
- css 两列布局中单列定宽单列自适应布局的6种思路
前面的话 说起自适应布局方式,单列定宽单列自适应布局是最基本的布局形式.本文将从float.inline-block.table.absolute.flex和grid这六种思路来详细说明如何巧妙地实现 ...
- css实现左边定宽右边自适应的5种方法总汇
在网页布局中,通常需要实现左边定宽右边自适应布局,默认html的结构如下: <div class="box"> <div class="left&quo ...
- css布局:定宽,自适应
css三栏布局:1.中自:float,absolute,margin三种方法.2.中固:margin,table两种方法. 两边定宽,中间自适应: float: #left{ float:left; ...
- 布局两列div等高方法
一.左右布局,左侧div绝对定位,外div相对定位 <!DOCTYPE html> <html lang="en"> <head> <me ...
- DIV+CSS左右两列自适应高度的方法
我们在用DIV+CSS布局网页的时候,必然会遇到左右两列自适应高度的问题,就是左边列的背景会随着右边列内容的增加也相应的增加高度,下面就教大家DIV+CSS左右两列自适应高度的方法. 下面给出最终的效 ...
- NEC学习 ---- 布局 -两列定宽
这个布局相对来说比较容易, 就是最外层的容器中包含两个子容器, 一个容器向右浮动, 另一个向左浮动, 两个容器的宽度+2个容器之间的距离等于外层容易的中宽度. html代码: <div clas ...
- css布局--两列布局,左侧固定,右侧自适应(其中左侧要可以拖动,右侧水平滚动条)
(css布局所要实现的效果) 在前端面试中经常会被问到CSS布局,两列布局,左侧固定,右侧自适应.前几天去面试,遇到了这道题的升级版,要求左侧可拖动,右侧要有水平滚动条.拿到题目确实有些大脑短路,不知 ...
- NEC学习 ---- 布局 -两列, 右侧定宽,左侧自适应
该篇必须引用初始化样式和功能性样式,样式在前篇 http://www.cnblogs.com/Zell-Dinch/p/4436054.html 中已经提及. 上篇中介绍了左侧定宽,右侧自适应的布局, ...
- NEC学习 ---- 布局 -两列, 左侧定宽,右侧自适应
CSS代码:以下两处代码是NEC中CSS初始化样式和功能性样式.今后的NEC研究中,默认这两处是引用的. /* 这是CSS reset 代码 --- 初始化样式 */ /* reset */ html ...
随机推荐
- Python开发【socket篇】解决粘包
客户端 import os import json import struct import socket sk = socket.socket() sk.connect(('127.0.0.1',8 ...
- loadrunner关联及web_reg_save_param方法浅析
一.什么是关联 关联(correlation):脚本回放过程中,客户端发出请求,通过关联函数所定义的左右边界值(也就是关联规则),在服务器所响应的内容中查找,得到相应的值,已变量的形式替换录制时的静态 ...
- 【转】Vue.js中 watch 的高级用法
假设有如下代码: <div> <p>FullName: {{fullName}}</p> <p>FirstName: <input type=&q ...
- git -分支管理(创建、推送、删除)
分支创建并推送: 1.查看当前所有分支,当前分支前面会标出一个*号 git branch -a 2.新建分支 git branch android_O 3.切换到新分支 git checkout an ...
- vue_ui使用
cnpm install -g @vue/cli 下载 vue -V 查看版本 vue ui 运行vue ui 这样在浏览器上就能看到vue图形界面 根据需求设置
- SQL瓶颈分析,以及适应最佳执行计划的探讨
原文地址: https://blog.csdn.net/daiqiulong2/article/details/86546446?tdsourcetag=s_pcqq_aiomsg 年纪大了,慢慢 ...
- i春秋 百度杯”CTF比赛 十月场 login
出现敏感的信息,然后进行登录 登录成功发现奇怪的show 然后把show放到发包里面试一下 出现了源码,审计代码开始 出flag的条件要user 等于春秋 然后进行login来源于反序列化后的logi ...
- HTML5新增特性
1. 语义化标签 2. 增强型表单 (1)新的表单输入类型 (2)新表单元素 (3)新表单属性 3. 视频和音频 4. Canvas绘图(图形.路径.文本.渐变.图像) 5. SVG绘图 (与Canv ...
- python和anacoda安装第三方库的位置
查看已安装库及版本号,命令行pip list 安装第三方库位置:
- php函数 array_column
<?php $arr = [ [ 'id'=>1, 'name'=>'wang', 'age'=>10 ], [ 'id'=>2, 'name'=>'yong', ...