问题引出

最近在用html+css+js做一个web后台管理系统左边侧边栏时出现了父元素定义为绝对定位时脱标,导致子元素无法撑开父元素高度的问题

但是希望实现如下效果,左边导航栏将剩余全部位置占满,即使上面只有4个下面也可以占满

代码如下:
index.html

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Index</title><link rel="stylesheet" type="text/css" href="./css/index.css">
</head><body><div id="root"><div id="header"></div><div id="main"><div class="main-left"><ul><li class="nav">增</li><li class="nav">删</li><li class="nav">改</li><li class="nav">查</li></ul></div><div class="main-right"></div></div></div>
</body></html>

index.css(我是用less生成的css,其实一样,方便初学者)

* {margin: 0;padding: 0;
}body {background-color: #424a61;
}#header {height: 49px;background-color: #202329;
}#main {position: relative;
}.main-left {float: left;position: absolute;width: 180px;background-color: #d9dee4;
}.main-left .nav {display: block;width: 180px;height: 60px;background-color: pink;
}

解决问题步骤

为了将下面填充完,于是我第一时间想到将父盒子(class=“main-left”)设置高度,但我的高度该设置多少好呢?我希望它能够兼容不同的浏览器、显示屏分辨率,所以肯定不能写死高度。

然后就开启了我漫漫探索之路(其实是自己踩坑了),请大家记住类名,接下来以类名来讲解!

方法1:设置main-left的高度height(固定值300px)

代码如下

.main-left {float: left;position: absolute;width: 180px;height: 300px;background-color: #fff;background-color: #d9dee4;
}

效果图(灰色为多出来的)

但是这里的缺陷是:高度不是动态变化的,而是写死的,如果遇到不同屏幕分辨率的电脑就会有问题。

方法2:设置main-left的top和bottom均为0

为了不写死main-left的高度,通过以前的经验,外加查找资料,发现有设置绝对定位元素的top和bottom为0这种方法来拉长元素,于是我马上开始设置,发现还是有问题存在。
代码如下

.main-left {float: left;position: absolute;width: 180px;top: 0;bottom: 0;background-color: #fff;background-color: #d9dee4;
}

效果图如下:

发现原来的问题还存在,无法拉长元素。**经过我自己的排查,最后发现是我布局的问题!前面埋下的坑(经典子绝父相),导致了main-left的绝对定位是以main为准,而main的高度是由子元素撑开的,此时main的高度也为0(main-left脱标,main-right未设置宽高),于是我在这里绕来绕去,最后发现是这里的问题!!!**找出问题后,马上进行修改,将main内的position:relative删去,再给margin-left的top一个值(因为此时绝对定位相对于浏览器来进行定位)即可完成效果。
完整代码如下:
index.html

<!DOCTYPE html>
<html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Index</title><link rel="stylesheet" type="text/css" href="./css/index.css">
</head><body><div id="root"><div id="header"></div><div id="main"><div class="main-left"><ul><li class="nav">增</li><li class="nav">删</li><li class="nav">改</li><li class="nav">查</li></ul></div><div class="main-right"></div></div></div>
</body></html>

index.css

* {margin: 0;padding: 0;
}body {background-color: #424a61;
}#header {height: 49px;background-color: #202329;
}.main-left {float: left;position: absolute;width: 180px;top: 49px;bottom: 0px;background-color: #d9dee4;
}.main-left .nav {display: block;width: 180px;height: 60px;background-color: pink;
}

最终效果图:

至此,问题解决!

CSS同时设置绝对定位top和bottom属性相关推荐

  1. css如何设置背景图片?background属性添加背景图片

    在前端开发过程中,为了页面的美观,往往都会给html页面添加背景图片.那么如何利用css设置html中用图片做背景?本章就给大家介绍css怎样设置背景图片.有一定的参考价值,有需要的朋友可以参考一下, ...

  2. html设置单词间隔,css中设置英文单词之间间距的属性是什么

    css中设置英文单词之间间距的属性是word-spacing.word-spacing属性可以增加或减少字与字之间的空白,如[p{word-spacing:30px;}]. 本文操作环境:window ...

  3. css top与bottom属性

    bottom ,CSS属性参与指定位置元素的垂直位置.它对非定位元素没有影响. botttom的效果取决于元素的位置 当position:absolute或fixed,bottom是指定元素的底部边缘 ...

  4. php怎么设置段落之间的距离,css如何设置段落间距?margin 属性设置段落间距(代码实例)...

    段落间距是网页设计里一个提升文章阅读体验的重要因素.但网页排版不想Word那样简单,而作为网页设计师,为了读者的良好阅读体验,我们必须为文章的每个小标题和段落都预留一定的空间,用css有效率地设置段落 ...

  5. css定位-css新增选择器(内减,属性,伪类,2d变换,过渡)

    目录 一.定位(重点) 1.静态定位 2.相对定位 3.绝对定位 4.固定定位 5.定位元素的层叠效果 二.css3和css2的区别 1.内减模式 2.新增属性选择器 3.新增伪类选择器 4. 2d变 ...

  6. css怎么设置z坐标,CSS 定位(postion、z-index)

    CSS 定位 CSS有三种基本的定位机制:普通流,浮动,绝对定位(absolute, fixed): 普通流是默认定位方式,在普通流中元素框的位置由元素在html中的位置决定,这也是我们最常见的方式, ...

  7. .net的label的背景如何设置成为透明_css如何设置背景图片?background属性添加背景图片...

    在前端开发过程中,为了页面的美观,往往都会给html页面添加背景图片.那么如何利用css设置html中用图片做背景?本章就给大家介绍css怎样设置背景图片.有一定的参考价值,有需要的朋友可以参考一下, ...

  8. html语言设置网页背景,HTML+CSS入门 设置网页中的背景图片的5个属性

    本篇教程介绍了HTML+CSS入门 设置网页中的背景图片的5个属性,希望阅读本篇文章以后大家有所收获,帮助大家HTML+CSS入门. < 在css代码中设置背景图片的方法,包括背景图片.背景重复 ...

  9. html如何设置绝对定位,css教程之绝对定位使用详解

    一.基本概念: 如果说相对定位没有脱离文档流,相对于对象本身进行偏移有点拖泥带水的话,那么绝对定位绝对是快刀斩乱麻,因为绝对定位可以使一个对象脱离正常的文档流,好像是漂浮在正常文档流的上空,并相对于包 ...

最新文章

  1. random函数用法_Python函数式编程:从入门到走火入魔
  2. 通过Ajax来简单的实现局部刷新(主要为C#中使用的UpdatePanel控件和ScriptManager控件)...
  3. restful服务端客户端_测试RESTful服务的客户端
  4. 诺基亚是“不跟随”还是跟不上?
  5. 阿里开发者们的第15个感悟:做一款优秀大数据引擎,要找准重点解决的业务场景
  6. 21天jmeter打卡 day1
  7. 北京协和医院付海鸿:医学精准要影像先行,影像精准就要技术先行
  8. vue react 写法区别
  9. 思维导图工具XMind
  10. 前端实现GIF图片压缩上传
  11. oracle jdbc执行,java jdbc 执行oracle存储过程
  12. 2021河南高考成绩查询倒计时,距离2021年高考天数 2021高考倒计时
  13. 【前端】性能优化 - WebP
  14. pickel加速caffe读图
  15. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二十七集
  16. attachment.php是什么,attachment是什么意思
  17. Mongdb重启后dirty很高,cache打满
  18. 放出一套完整的进销存软件源码
  19. 巧用MOS管的体二极管
  20. 中文汉字按拼音排序并按字母分类(uniapp indexedList索引列表格式匹配)

热门文章

  1. table-rowspan
  2. 云计算|OpenStack|社区版OpenStack安装部署文档(十三--- 自制镜像---Linux和Windows镜像)
  3. godspeed机器人_如何评价油管老高与小茉(原kuaizero老高频道)?
  4. bootstrap-table和bootstrap-switch
  5. 百度云Ubuntu ,VNC可以登录, ssh登陆不了的问题解决
  6. 【微信二狗成语接龙】
  7. 计算机在地理科学中的作用,论地理信息系统及其在地理学中的地位
  8. ov7670 linux,arduino nano调试OV7670拍照 参照帖子一定成功
  9. JavaEE三层架构
  10. 软件测试缺陷等级划分_游戏测试中缺陷等级分类