请问老师如果想用定位去实现圣杯布局,高度问题应该怎么解决啊

请问老师如果想用定位去实现圣杯布局,高度问题应该怎么解决啊

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1.0">

<meta http-equiv="X-UA-Compatible" content="ie=edge">

<title>Document</title>

<style>

*{

margin: 0;

padding: 0;

}

body{

width: 100%;

min-width: 800px;

}

.main {

padding: 0 200px;

min-height: 300px;

position: relative;

}

.top {

height: 120px;

background: #333;

}

.top img{

float: left;

height: 120px;

}

.top ul {

list-style: none;

float: right;

margin-right: 40px;

}

ul li{

display: inline-block;

color: #fff;

height: 120px;

line-height: 120px;

padding: 0 15px;

}

.top li:hover {

cursor: pointer;

color:orange;

}

.left {

width: 200px;

background: #000;

position: absolute;

color:white;

left:0;

min-height: 300px;

}

.right {

width: 200px;

background: #000;

position: absolute;

color: white;

right: 0;

min-height: 300px;

}

.middle {

width: 100%;

left: 200px;

position: absolute;

min-height: 300px;

}

.foot{

height: 120px;

background-color: #333;

width: 100%;

}

.foot ul {

width: 500px;

margin: 0 auto;

}

</style>

</head>

<body>

<div class="top">

<img src="http://img1.sycdn.imooc.com/climg//590037f600016ce303000100.png"/>

<div class="nav">

<ul>

<li>一</li>

<li>一二</li>

<li>一二三</li>

<li>一二三四</li>

<li>一二</li>

</ul>

</div>

</div>

<div class="main">

<div class="middle"><img src="http://img1.sycdn.imooc.com/climg//590037e00001fab706000400.jpg"/></div>

<div class="left">left</div>

<div class="right">right</div>

</div>

<div class="foot">

<ul>

<li>一</li>

<li>一二</li>

<li>一二三</li>

<li>一二三四</li>

<li>一二</li>

</ul>

</div>

</body>

</html>

我把main设为relative,给了最小高度300,left,middle,right都是绝对定位。但是中间的图片会超出。 请问高度问题怎么解决比较好呢

http://img1.sycdn.imooc.com//climg/5d4bcd660001ee0630521082.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

4回答

同学你好,

如果不设置高度为100%的话,只能设置main盒子高度大于等于图片高度了。因为middle,left和right三部分设置了绝对定位,脱离了文档流,main盒子高度撑不起来,所以就需要设置高度才可以。

‘追彩虹的小狐狸’老师说的高度本来就会有它里面的内容撑开,所以我们不用设置的意思是,middle,left和right不需要设置高度:

http://img1.sycdn.imooc.com//climg/5d4d0d1d0001cce808760461.jpg

盒子会由里面内容撑开。但是main盒子不可以不设置高哦。

自己可以再测试下,祝学习愉快!

好帮手慕慕子 2019-08-08 18:57:29

同学你好, 首先我们要明白一点, 圣杯布局之所以被称为圣杯布局,因为它是由前辈们总结下来的一套固定的布局实现方法, 所以我们必须按着浮动加相对定位的方式去实现。像同学这种使用绝对定为实现的布局,就不能被称作圣杯布局了哦。

然后, 我们再来根据同学的这种写法分析问题,高度设置百分比是参照父元素高度计算的, 但是因为body和html默认高度为0,他的高度是由子元素内容撑开的,所以直接设置height:100%;不可以。 

可以参考如下方式, 给html,body同时设置百分百高度

http://img1.sycdn.imooc.com//climg/5d4bff320001fdce03080144.jpg

这个时候在调整main和他下面子元素的height值

http://img1.sycdn.imooc.com//climg/5d4bff630001865e03810192.jpghttp://img1.sycdn.imooc.com//climg/5d4bff740001baad04920768.jpg

其实使用这种方式实现也会有一些缺陷,当中间内容超出一屏高度之后, 会出现问题, 所以我们一般不会这样设置, 因为高度本来就会有它里面的内容撑开,所以我们不用设置,高度也会自适应哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~~


  • 提问者 慕粉0441084474 #1
    谢谢老师,设置成100%确实可以完全显示出图片,但是会全屏显示吧,因为设置了高度为100%。图像高度不会占据整个页面,所以下面会有空白。但是如果不设置100%的话,图片会超出main的高度,难道只能将main的高度设置成图片高度一样的值吗? 还有您说高度会有内容撑开,不需要设置,是说main,left,right不设置高度吗?我测试好像不设置也不可以啊。
    2019-08-09 08:37:24
提问者 慕粉0441084474 2019-08-08 15:28:36

好像Main这部分只能固定高度

提问者 慕粉0441084474 2019-08-08 15:23:24

我试着加上height:100%也还是不行

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师