CSS难点 为什么height设置100%会失效,分栏目等高布局(高度自适用布局)的实现方案

前言

相信在平时写CSS的时候大家都或多或少遇见过设置了height为百分比的时候发现不起作用。今天我们就来一探究竟

原因:父元素未设置具体高度,子元素设置height:100%是无效的。

现象以及方案

[1] 设置高度为100%时,无法实现全屏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <style>
        .case-box{
            height: 100%;
            background:red;
        }
    </style>
</head>
<body>
<div class="case-box"></div>
</body>
</html>

这样写,你会发现一点效果都没有。

【解决方案】
增加如下代码:

html,body{
    height: 100%;
}

[2] 一个父元素中包含2个子元素,其中一个子元素非常高,撑开了父元素,另外1个子元素设置高度为100%失效。

<style>
    .case-box{
        overflow: hidden;
    }
    .height-max{
        width: 200px;
        height:400px;
        background: #167be0;
        float:left;
    }
    .height-percent{
        margin-right:20px;
        background: hotpink;
        width: 200px;
        height: 100%;
        padding:20px;
        float:left;
    }
</style>
<div class="case-box clearfix" data-case="f2">
    <div class="height-percent"></div>
    <div class="height-max"></div>
</div>

height-max 设置了高度是400px撑开了父级使得父级case-box高度也是400px,height-percent设置了高度为100%,本来我们期望会跟父级的高速一样都是400px,可是它还是没有高度(背景色是padding撑起来的)。

平时的布局经常可以碰到这样的情况,需要根据一个块的高度进行高度自适应布局,但是好像单纯的设置高度为100%是无法实现的。

【方案一】
父元素case-box设置一个定高(视乎这样压根就满足不了我们的需求)

【方案二】
使用position

<style>
    .case-box{
        overflow: hidden;
        position: relative;
    }
    .height-max{
        width: 200px;
        height:400px;
        background: #167be0;
        float:left;
        margin-left: 220px;
    }
    .height-percent{
        margin-right:20px;
        background: hotpink;
        width: 200px;
        height: 100%;
        padding:20px;
        float:left;
        position: absolute;
    }
</style>

[缺点]这样使用会破坏原本的布局顺序

【方案三】
使用flex

<style>
    .case-box{
        position: relative;
        display: flex;
    }
    .height-max{
        width: 200px;
        height:400px;
        background: #167be0;
    }
    .height-percent{
        margin-right:20px;
        background: hotpink;
        width: 200px;
        padding:20px;
    }
</style>

不可否认flex布局还是非常方便的

[缺点]兼容性稍差

【方案四】
display: table

<style>
    .case-box{
        position: relative;
        display: table;
    }
    .height-max{
        width: 200px;
        height:400px;
        background: #167be0;
    }
    .height-percent{
        background: hotpink;
        width: 200px;
        display: table-cell;
    }
</style>

[缺点]margin失效

【最佳方案】
padding-bottom:3000px;margin-bottom:-3000px;

<style>
    .case-box{
        overflow: hidden;
        zoom:1;
    }
    .height-max{
        width: 200px;
        height:400px;
        background: #167be0;
        margin-left: 220px;
    }
    // 需要自使用的块设置好padding和margin
    .height-percent{
        background: hotpink;
        width: 200px;
        float:left;
        padding-bottom: 3000px;
        margin-bottom: -3000px;
    }
</style>

3000像素是个可变值,如果您的分栏高度不可能高度超过2000像素,您就可以设为2000像素,如果会超过3000像素,那么您要修改值为4000像素或是更高。
父标签的overflow:hidden属性是必须的,否则会显示溢出的内容

小结

通过本文学习了
为什么height设置百分比无效(因为父元素没有设置固定高度的原因)
以及如何实现高度自适用的布局方法

原文地址:https://www.cnblogs.com/shiyou00/p/10755639.html

时间: 2024-08-29 19:00:38

CSS难点 为什么height设置100%会失效,分栏目等高布局(高度自适用布局)的实现方案的相关文章

解决html设置height:100%无效的问题

通常我们需要让自己的网页内容能够更好的适配各种屏幕大小,会采用height:100%,但是我们发现问题出来了,height:100%无效,其实解决办法很简单 解决:你只需要在css处添加上html, body{ margin:0; height:100%; }即可. 原因:你让div的height="100%",执行网页时,css先执行到,而整个网页中的内容还没有完全载入,是获取不到div外面的<body>等的高度的,所以height="100%"也就不

前端基础-CSS的属性相关设置

一 字体属性 二 文本属性 三 背景属性 四 盒子模型 五 盒子模型各部分详解 一. 字体属性 1.font-weight:文字粗细(表格中*为重点) 取值 描述   normal 默认值,标准粗细 bord 粗体    * border 更粗 lighter 更细 100~900 设置具体粗细,400等同于normal,而700等同于bold    * inherit 继承父元素字体的粗细值 2.font-style:文字风格 normal 正常,默认就是正常的 italic 倾斜  3.fo

CSS如何将边框设置为虚线

CSS如何将边框设置为虚线: 在默认状态文本框都是实线边框,下面就来介绍一下如何实现虚线边框. 实例代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.51texiao.cn/" /> <title>蚂蚁部落</title&

css如何实现只设置type为text的input元素的样式

css如何实现只设置type为text的input元素的样式:在实际应用中,可能会遇到这样的情况,那就是有很多input元素,但是type类型各不相同.可能只需要为某种type类型指定相关的样式.当然实现此效果的方式很多,比如单独为指定类型的input设置class.下面介绍一下如何利用属性选择器实现此功能.代码如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <me

height:calc(100% - 40px)

在移动端开发的过程中,常常会遇到头部高度是40px,而内容页是除去头部,占满视窗的整个高度,有时候是用js来处理,现在用css的calc是非常方便的: .container{ height: calc(100% - 40px); //注:减号前后要有空格,否则很可能不生效!! }

jquery css事件编程 尺寸设置

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>jquery css事件编程 尺寸设置&l

css样式表中设置table的第一列的宽度是固定值

table{table-layout:fixed;}table tr td:first-child,table tr td:first-child{width:120px;} 首行第一个td定宽同列的宽度都会和他一样. *注意 第一行 第一个用的是 td 还是 th css样式表中设置table的第一列的宽度是固定值,布布扣,bubuko.com

CSS的语法和设置方式

CSS语法 格式 属性:值:属性: 值1:属性1......: 属性和值使用冒号":" 单位 颜色:#rgb   #8fa   #aaffaa   red   green 大小:em   2em  px   pt   %  pc  cm   mm  in URL(url) 注释/* --*/在其中不要在包含注释 CSS的四种设置方式 内联样式表:在HTML元素标签中使用style属性内联(每个HTML标签都可以加样式) 嵌入样式表:通过HTML的<style>标签蒋CSS嵌

css背景图片拉伸 以及100% 满屏显示

如何用css背景图片拉伸 以及100% 满屏显示呢?这个问题听起来似乎很简单.但是很遗憾的告诉大家.不是我们想的那么简单. 比如一个容器(body,div,span)中设定一个背景.这个背景的长宽值在css2.1之前是不能被修改的.  所以实际的结果是只能重复显示,所以出现了repeat,repeat-x,repeat-y,no-repeat这些属性.就是用来控制背景图片的显示的.所以一般用作背景图片的有2类: 1.是一整张大图,尺寸和区域大小刚好吻合  2.一个很小的条状图,通过repeat后