width值不为固定数值时,如何设置块级元素垂直水平居中

width值不为固定数值时,如何设置块级元素垂直水平居中

# 具体遇到的问题
width值不为固定数值时,如何设置块级元素垂直水平居中

目标居中块级元素为contentLayer, 父元素为banner. 尝试了position:absolute+margin:auto以及vertical-align、text-align等多个方式均无效,不知道是哪里设置有问题

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

css代码

*{

margin:0;

padding:0;

list-style:none;

}


.top{

position:fixed;

width:100%;

height:80px;

overflow:hidden;

background:#07cbc9;

}

.top .logo{

float:left;

}

.top .logo a img{

vertical-align: middle;

margin-top:12px;

margin-left:85px;

}

.top .logo a{

text-decoration: none;

}

.top .nav{

float:right;

margin-right:65px;

}

.top .nav ul li{

margin-left:30px;

float:left;

line-height:80px;

}


.top .nav ul li a{

text-decoration: none;

color:white;

}

.top .nav ul li a:hover{

background:#78dddb;

}

.banner{

width:100%;

height:500px;

}

.banner .content{

width:100%;

height:500px;

}

.banner .contentLayer{

width:800px;

height:500px;

}

.banner .contentLayer .con{


border-width: 2px;

border-color:rgb(132, 134, 136);

border-style:solid;

width:505px;

margin-top:23px;

background:none;


}

.banner .contentLayer .con.name,

.banner .contentLayer .con.phone,

.banner .contentLayer .con.email{

height:39px;

}

.banner .contentLayer .con.comment{

height:115px;

}



html代码

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="UTF-8">

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

<title>Document</title>

<link rel="stylesheet" type="text/css" href="hm2.css">

</head>

<body>

<div class="top">

<div class="logo">

<a href="#"><img src="images/logo.png"/></a>

</div>

<div class="nav">

<ul>

<li><a href="#">aa</a></li>

<li><a href="#">aa</a></li>

<li><a href="#">aa</a></li>

<li><a href="#">aa</a></li>

<li><a href="#">aa</a></li>

<li><a href="#">aa</a></li>

</ul>

</div>


</div>

<div class="banner">

<div class="content">

<img src="images/banner3.jpg"/>

</div>

<div class="contentLayer">

<input type="text" name="name" placeholder="aa" class="con name"/><br/>

<input type="text" name="phone" placeholder="aa" class="con phone"/><br/>

<input type="text" name="email" placeholder="aa" class="con email"/><br/>

<input type="text" name="comment" placeholder="aa" class="con comment"/><br/>

<input type="button" name="submit" placeholder="aa" class="submit" /><br/>


</div>


</div>

<div class="about">

<div class="top1"></div>

<div class="middle">

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

<div class="middle"></div>

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

</div>

<div class="bottom">

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

</div>

</div>

<div class="gallery">

<div class="title"></div>

<div class="txt"></div>

<div class="image1">

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

</div>

<div class="image2">

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

<dl>

<dt></dt>

<dd></dd>

</dl>

</div>


</div>

<div class="foot">


</div>

</body>

</html>


正在回答

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

2回答

同学你好,问题解答如下:

1.contentLayer居中与图片的高度无关。图片不设置高度,默认显示原图大小。图片的父容器高度没有图片的高度大,图片就会溢出。这里只是解决图片高度溢出问题,如下去掉图片的高度:

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

图片是content的子元素,会撑开content的高度,所以content设置不设置高度都行。但如果不给图片设置高度,就会溢出banner区域了。contentLayer还是相对banner区域居中的,只不过图片超出父容器让你从视觉上看到的是,表单没有在图片的中间显示而已,这里区分开。

2.使用top:80px也可以,代码非常灵活,实现方式不是唯一的哦。

祝学习愉快~

好帮手慕夭夭 2020-11-23 10:33:10

同学你好,参考如下设置:

1. 要设置参照点:定位元素参照已定位的祖先元素定位,如果没有定位的祖先元素,默认参照整个页面(浏览器有差异,有的可能是参照窗口)。这里的表单contentLayer需要参照banner区域定位,所以给banner设置一个定位。banner本身不需要定位移动位置,所以建议设置相对定位,这样不会让它脱离文档流。如下:

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

2. 在不明确元素宽高的情况下,可以通过如下设置水平垂直居中:

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

3.这里虽然设置了居中,但是有一个问题:contentLayer和它的父元素banner高度一样,就好比一个盘子放一个大西瓜,不管如何摆放西瓜,也看不到居中效果,因为它占满了整个盘子。只有换成一个小于盘子的水果,才能看到居中效果。(宽度也是太大了,contentLayer里面的内容无法水平铺满)例如如下稍微改动一下,就能看到居中效果了。

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

效果如下:

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


4. banner区域定位之后,层级比头部层级大,会把头部挡住。如下给头部设置层级:

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


而头部定位之后,会脱离文档流。banner区域会往上移动,需要给banner区域设置一个间距:

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


祝学习愉快~


  • 提问者 蛋挞狂魔 #1
    谢谢老师解答,我还有两个疑问:1. 为什么高度要设置在content元素中的img上,contentLayer才会居中?直接给content设置高度,不设置img为何不行?2. 最后给banner区域设置间距使用top:80px是否也可以?
    2020-11-24 15:07:24
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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