前面的话

  等高布局是指子元素在父元素中高度相等的布局方式。等高布局的实现包括伪等高和真等高,伪等高只是看上去等高而已,真等高是实实在在的等高。本文将介绍边框模拟、负margin这两种伪等高以及table实现、absolute实现、flex实现、grid实现和js判断这五种真等高布局

伪等高

边框模拟

  因为元素边框和元素高度始终是相同高度,用元素的边框颜色来伪装左右两个兄弟元素的背景色。然后将左右两个透明背景的元素使用absolute覆盖在中间元素的左右边框上,实现视觉上的等高效果

  [注意]左右两侧元素的内容高度不能大于中间元素内容高度,否则无法撑开容器高度

<style>
body,p{margin: 0;}
.parent{position: relative;
}
.center{box-sizing:border-box;padding: 0 20px;background-clip: content-box;border-left: 210px solid lightblue;border-right: 310px solid lightgreen;
}
.left{position: absolute;top: 0;left: 0;width: 200px;
}
.right{position: absolute;top: 0;right: 0;width: 300px;
}
</style>

<div class="parent" style="background-color: lightgrey;"><div class="left"><p>left</p></div>  <div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>          <div class="right"><p>right</p></div>
</div>

负margin

  因为背景是在padding区域显示的,设置一个大数值的padding-bottom,再设置相同数值的负的margin-bottom,使背景色铺满元素区域,又符合元素的盒模型的计算公式,实现视觉上的等高效果

  [注意]如果页面中使用<a>锚点跳转时,将会隐藏部分文字信息

  [注意]如果页面中的背景图片定位到底部,将会看不到背景图片

<style>
body,p{margin: 0;}
.parent{overflow: hidden;
}
.left,.centerWrap,.right{float: left;width: 50%;padding-bottom: 9999px;margin-bottom: -9999px;
}
.center{margin: 0 20px;
}
.left,.right{width: 25%;
}
</style>

<div class="parent" style="background-color: lightgrey;"><div class="left" style="background-color: lightblue;"><p>left</p></div>  <div class="centerWrap"><div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>         </div><div class="right" style="background-color: lightgreen;"><p>right</p></div>
</div>

真等高

table

  table元素中的table-cell元素默认就是等高的

<style>
body,p{margin: 0;}
.parent{display: table;width: 100%;table-layout: fixed;
}
.left,.centerWrap,.right{display: table-cell;
}
.center{margin: 0 20px;
}
</style>

<div class="parent" style="background-color: lightgrey;"><div class="left" style="background-color: lightblue;"><p>left</p></div>  <div class="centerWrap"><div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>         </div> <div class="right" style="background-color: lightgreen;"><p>right</p></div>
</div>

absolute

  设置子元素的top:0;bottom:0;使得所有子元素的高度都和父元素的高度相同,实现等高效果

<style>
body,p{margin: 0;}
.parent{position: relative;height: 40px;
}
.left,.center,.right{position: absolute;top: 0;bottom: 0;
}
.left{left: 0;width: 100px;
}
.center{left: 120px;right: 120px;
}
.right{width: 100px;right: 0;
}
</style>

<div class="parent" style="background-color: lightgrey;"><div class="left" style="background-color: lightblue;"><p>left</p></div>  <div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>          <div class="right" style="background-color: lightgreen;"><p>right</p></div>
</div>

flex

  flex中的伸缩项目默认都拉伸为父元素的高度,也实现了等高效果

<style>
body,p{margin: 0;}
.parent{display: flex;
}
.left,.center,.right{flex: 1;
}
.center{margin: 0 20px;
}
</style>

<div class="parent" style="background-color: lightgrey;"><div class="left" style="background-color: lightblue;"><p>left</p></div>  <div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>          <div class="right" style="background-color: lightgreen;"><p>right</p></div>
</div>

grid

<style>
body,p{margin: 0;}
.parent{display: grid;grid-auto-flow: column;grid-gap:20px;
}
</style>

<div class="parent" style="background-color: lightgrey;"><div class="left" style="background-color: lightblue;"><p>left</p></div>  <div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>          <div class="right" style="background-color: lightgreen;"><p>right</p></div>
</div>

js

  当子元素高度不同时,进行js判断,增加较低子元素的padding-bottom,使得各个子元素实现等高效果

<style>
body,p{margin: 0;}
.parent{overflow: hidden;}
.left,.center,.right{float: left;width: 25%;
}
.center{width: 50%;padding: 0 20px;background-clip: content-box;box-sizing: border-box;
}
</style>

<div class="parent" id="parent" style="background-color: lightgrey;"><div class="left" style="background-color: lightblue;"><p>left</p></div>  <div class="center" style="background-color: pink;"><p>center</p><p>center</p></div>          <div class="right" style="background-color: lightgreen;"><p>right</p></div>
</div>

<script>
function getCSS(obj,style){if(window.getComputedStyle){return getComputedStyle(obj)[style];}return obj.currentStyle[style];
}
var oParent = document.getElementById('parent');
var oLeft = oParent.getElementsByTagName('div')[0];
var oCenter = oParent.getElementsByTagName('div')[1];
var oRight = oParent.getElementsByTagName('div')[2];
function eqHeight(obj1,obj2){var oDis = obj1.clientHeight - obj2.clientHeight;if(oDis > 0){obj2.style.paddingBottom = parseFloat(getCSS(obj2,'padding-bottom')) + oDis + 'px';}else{obj1.style.paddingBottom = parseFloat(getCSS(obj1,'padding-bottom')) +  Math.abs(oDis) + 'px';}
}
eqHeight(oLeft,oCenter);
eqHeight(oLeft,oRight);
</script>

CSS等高布局的7种方式相关推荐

  1. css table设置边框_(代码示例)css实现等高布局的三种方式

    本篇文章给大家带来的内容是关于css实现等高布局的三种方式(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 本文讲的等高布局是在不手动设置元素高度的情况下,使用纯css实现 ...

  2. CSS三栏布局的7种方式代码详解 | 圣杯布局 | 双飞翼布局 | 弹性盒子

    CSS三栏布局代码详解 写在前面:博主最近在转头复习最前面学的CSS,整理一下CSS三栏布局的笔记,正好也捋顺自己的逻辑思路.解析我尽量按照思路详细的写了,代码均可正确运行,留给需要的小伙伴进行参考, ...

  3. html 布局满屏,CSS全屏布局的5种方式

    前面的话 全屏布局在实际工作中是很常用的,比如管理系统.监控平台等.本文将介绍关于全屏布局的5种思路 思路一: float [1]float + calc 通过calc()函数计算出.middle元素 ...

  4. CSS三列布局(五种方式)

    /*前提:左右宽度为300px,高度为100px,中间宽度自适应*/* {margin: 0;padding: 0; } <!DOCTYPE html> <html lang=&qu ...

  5. CSS全屏布局的6种方式

    1.float [1]float + calc 通过calc()函数计算出.middle元素的高度,并设置子元素高度为100% <style> body,p{margin: 0;} bod ...

  6. CSS实现多栏布局的几种方式

    css实现多栏布局的几种方式 假如把下面的三个div显示在同一行 <div id="parent"><div id="box1">1&l ...

  7. 平分布局 html,实现CSS平分布局的4种方式

    实现CSS等分布局的4种方式 前面的话 等分布局是指子元素平均分配父元素宽度的布局方式,本文将介绍实现等分布局的4种方式 思路一: float 缺点:结构和样式存在耦合性,IE7-浏览器下对宽度百分比 ...

  8. css的经典三栏布局如何实现,css 实现三栏布局的四种方式

    三栏布局就是左中右,左右两边固定,中间自适应. 1. 绝对定位 左边 中间 右边 body { padding: ; margin: ; } /* 绝对定位 */ .left, .right { po ...

  9. 实现CSS等分布局的5种方式

    前面的话 等分布局是指子元素平均分配父元素宽度的布局方式,本文将介绍实现等分布局的5种方式 float [思路一]float 缺点:结构和样式存在耦合性,IE7-浏览器下对宽度百分比取值存在四舍五入的 ...

  10. html画布20等分,实现CSS等分布局的4种方式 - 小火柴的蓝色理想

    前面的话 等分布局是指子元素平均分配父元素宽度的布局方式,本文将介绍实现等分布局的4种方式 思路一: float 缺点:结构和样式存在耦合性,IE7-浏览器下对宽度百分比取值存在四舍五入的误差 [1] ...

最新文章

  1. 用好 Spring AOP,天降大锅从容应对!
  2. python 高阶函数一 概念
  3. Tomcat系列(6)——Tomcat处理一个HTTP请求的过程
  4. Python __add__
  5. perf in linux,[Package Request] 仓库请添加 linux-perf-5.4
  6. 利用 vimdiff 递归对比文件夹差异
  7. 制作WIN7、WINPE2003、Ubuntu、dos工具箱多启动U盘
  8. x79主板bios设置中文_新买的电脑不知道主板型号?这三种方法可查看,非常简单...
  9. python treeview控件使用详解_winform Treeview控件使用
  10. 3500常用汉字与标点符号(已排除不支持GB2312的)
  11. 一键去除AutoCAD图形乱码的问题
  12. 尚学堂马士兵struts2操作手册
  13. 火狐浏览器打印网页不全_打印网页显示不全,求助
  14. 机器人的自述作文_关于机器人的说明作文
  15. windows 下搭建git服务器,及问题处理。
  16. 创建图片外链——“极简图床”
  17. 《C语言程序设计》第4版 何钦铭、颜晖主编 课后习题答案 第4章 课后习题
  18. Pr 入门教程如何向影片中的剪辑添加过渡效果?
  19. logback使用配置详解
  20. 显卡驱动怎么安装-驱动人生

热门文章

  1. UE4文件读写(.txt文本文档)
  2. c++语言常量,C++常量(constant)
  3. word软件在计算机哪里,电脑自带的word在哪里
  4. C语言【微项目17】—DustBase微尘数据库[自制键值对数据库][超轻量]【2022-03-23】
  5. android tv 盒子,安卓TV电视盒子推荐软件一览表(盒子端+手机端+电脑端+群晖端)...
  6. 2021道路运输企业主要负责人安全考核试题
  7. RHCE(一、二)nmcli命令学习、Linux例行性工作命令atd和crond学习
  8. JAVA版本8u171与8u172的区别
  9. 实现类似于目录的虚线填充样式
  10. echarts x轴time 24小时