老师,请问这里子绝父相为什么只给这个盒子设置了绝对定位,没有给父设置相对定位?而且效果也很正常呢?
登陆购买课程后可参与讨论,去登陆吧
同学你好,因为“子绝父相” 这里的父并不单单是指父元素,也表示祖辈元素,代码中给menus-box的祖辈元素banner-nav盒子设置了相对定位,所以menus-box会参考banner-nav元素进行绝对定位,实现布局效果。如下图所示:
祝学习愉快~
可是老师上课的课件里,并没有给menus-box的祖辈元素banner-nav设置任何相对定位,相反,他给banner-nav设置的是绝对定位并且令他居中。拥有相对定位的是banner标签。而banner标签我们并没有给它定义宽度,这个时候我的menus-box如果设置绝对定位不应该是以整个banner来定位的吗?为什么还会紧贴着左侧nav呢?
我完全跟着老师上课的步骤来的,同样是只有banner设置了相对定位,banner-nav设置了绝对定位。但是在我给menus-box设置了绝对定位并且设置left:296px以后效果仍旧是正确的,我不太理解这是为什么。
.banner {
position
:
relative
;
}
.banner img {
width
100%
min-width
1152px
/* 图片有时候会和盒子之间有一些缝隙,让左边的nav多出来一些,这时候可以使用vertical-align来让图片居中 */
vertical-align
middle
.banner .center-wrap {
absolute
top
0
left
50%
margin-left
-576px
/* 这里的100%高度绝对不能省略,因为如果省略了,它的height就是0 */
/* 那么它的子盒子设置16.6%就没有意义了 */
height
.banner .center-wrap .banner-nav {
.banner .center-wrap .banner-nav>ul {
.banner .center-wrap .banner-nav>ul>li {
16.66%
296px
opacity:
0.5
background
#1C1F21
;;
box-sizing: border-box;
border-bottom
1px
solid
hsla(
,
22%
91%
0.37
);
.banner .center-wrap .banner-nav .menus-box .menu {
display
none
356px
background-color
: rgba(
, .
63
padding
16px
/* 因为高度是100%没办法减去padding,所以使用border box */
同学你好,对于你的问题解答如下:
1、非常抱歉,老师是以最终源码展示的效果为基础解答的,以后会更加注意一点。
2、“子绝父相”只是一个推荐的代码实现思路,并不是固定的,必须要这样设置。
可以了解下绝对定位参考定位的原理,如下:
设置了绝对定位的元素,会参考离它最近的设置了定位属性(static除外)的祖辈元素进行定位。
代码中,banner-nav是离menus-box最近,并设置了定位属性的祖辈元素,所以menu-box会参考banner-nav进行定位,所以设置left:296px;后效果是对的。
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
登录后可查看更多问答,登录/注册
入行前端,是明智的选择!市场需求大,就业前景好,入行门槛低,小白易上手 全新升级:技术更新,Vue3.0/TypeScript/React17.x; 技术更全面,从0基础到全栈开发再到大型项目构建
157 1
75 1
31 2
201 5
155 1
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号
在线咨询
领取优惠
免费试听
领取大纲
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧