为什么middle没有设置定位,就能够直接使用margin:0 auto?

为什么middle没有设置定位,就能够直接使用margin:0 auto?

记得之前说margin要结合定位来使用的

正在回答 回答被采纳积分+1

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

3回答
好帮手慕夭夭 2019-01-17 11:00:02

你好同学 , margin没有办法设置垂直居中就是它的一个特点 , 它的原理就是没有办法计算出父元素的高度 , 这可能是语言设计的一个缺陷吧 . 

结合定位和margin:auto能够实现垂直居中的原理类似于拔河效应 , 即设置了bottom:0 , 有设置了top:0  ,元素不知道到底要移上去还是移下去 , 上下为难的时候 , 出来一个margin:auto , 干脆居中好了 . 

另外同学总结的基本上很全了 ,  理解也是正确的 . 不过需要注意一点 , 元素设置百分比也可以水平居中 , 例如90% ,80% ,只要不是100%让元素紧贴浏览器两侧 ,它就能够居中显示 . 

这里老师要给同学一个建议 , 因为代码是很灵活的 . 所以一般建议同学要多敲代码 , 自己要去实践 , 从实践得出来结论 . 像以下总结的同学都可以去实际练习一下 . 加油 !

祝学习愉快 ,望采纳 .

  • 提问者 阿扬在自律路上 #1
    灰灰老师,我更新了一下,也有用代码试过,您看看对不对? 1.水平居中 ①当元素设置margin:0 auto,宽度为固定值或百分比(除了100%)的时候,元素则水平居中,不需绝对定位 ②当元素设置margin:0 auto,宽度为固定值或百分比(除了100%)的时候,设置绝对定位,元素则不会水平居中(因为绝对定位以后就脱离了父级盒子,只能以父级为参考进行定位,你可以理解为绝对定位以后就浮在了父级上面,所以margin中auto就没有了参考值) ③当元素设置margin:0 auto,宽度为100%或者没有设置的时候,元素则不会水平居中(因为元素会相对浏览器来显示,一个盒子本身左右都是紧贴浏览器屏幕的 ,所以你设置了居中 ,也是看不来效果的) 2.垂直居中 ①当元素设置margin:auto,高度为固定值或百分比或没有设置的时候,没有设置绝对定位,元素则不会垂直居中 (原理:垂直居中时没有办法计算出父元素高度,所以你设置了父元素高度也是无法计算出来的,这就是margin:auto的一个特点。它的原理就是没有办法计算出父元素的高度) ②当元素设置margin:auto,高度为固定值或百分比的时候,设置绝对定位并在父元素设置了相对定位(结合margin:auto;lrbt:0),元素则在父元素垂直居中,并且水平居中 (原理:结合定位和margin:auto能够实现垂直居中的原理类似于拔河效应,即设置了bottom:0, 有设置了top:0,元素不知道到底要移上去还是移下去,上下为难的时候,出来一个margin:auto,干脆居中好了) ③当元素设置margin:auto,高度没有设置的时候,设置绝对定位(结合margin:auto;lrbt:0),元素则不会垂直居中
    2019-01-18 10:43:30
  • 同学总结的ok
    2019-01-18 10:49:23
  • 灰灰老师,我还有一个总结,您看看? 绝对定位和margin移动的区别 绝对定位:当元素绝对定位以后,它在父元素的位置是根据top/left/right/bottom来定位的;margin:margin是根据自身当前位置来定位的
    2019-01-18 10:52:26
好帮手慕夭夭 2019-01-16 17:35:16

你好同学 , 垂直居中时没有办法计算出父元素高度的 , 所以你设置了父元素高度也是无法计算出来的 ,这就是margin:auto的一个特点 ,  . 不过在实际开发中 , 很少有要设置垂直居中的元素 ,如果有的话  , 要结合定位实现即可 . 

水平居中没有宽度一般是不可以的 . 像块元素一般都是相对浏览器100%显示的 , 例如如下

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

一个盒子本身左右都是紧贴浏览器屏幕的 ,所以你设置了居中 ,也是看不来效果的 ,只有你设置一个小于浏览器屏幕的固定宽度 , 居中效果才能看出来的:

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

自己可以的练习一下 , 测试一下效果 , 祝学习愉快 ,望采纳 .

  • 提问者 阿扬在自律路上 #1
    灰灰老师,垂直居中没有办法计算父元素高度的原理是什么?结合了绝对定位就可以计算高度的原理又是什么?
    2019-01-16 21:37:18
  • 提问者 阿扬在自律路上 #2
    下面是我的总结,请灰灰老师看一下对不对?有没有需要补充完善的? 元素的水平和垂直居中、margin属性、绝对定位的三者关系 1.水平居中 ·当元素设置margin:0 auto,宽度为固定值的时候,元素则水平居中,不需绝对定位 ·当元素设置margin:0 auto,宽度为固定值的时候,设置绝对定位,元素则不会水平居中(因为绝对定位以后就脱离了父级盒子,只能以父级为参考进行定位,你可以理解为绝对定位以后就浮在了父级上面,所以margin中auto就没有了参考值) ·当元素设置margin:0 auto,宽度为百分比或者没有设置的时候,元素则不会水平居中(因为元素会相对浏览器来显示,一个盒子本身左右都是紧贴浏览器屏幕的 ,所以你设置了居中 ,也是看不来效果的) · 2.垂直居中 ·当元素设置margin:auto,高度为固定值或百分比或没有设置的时候,没有设置绝对定位,元素则不会垂直居中(垂直居中时没有办法计算出父元素高度,所以你设置了父元素高度也是无法计算出来的,这就是margin:auto的一个特点) ·当元素设置margin:auto,高度为固定值或百分比的时候,设置绝对定位(结合margin:auto;lrbt:0),元素则垂直居中 ·当元素设置margin:auto,高度没有设置的时候,设置绝对定位(结合margin:auto;lrbt:0),元素则不会垂直居中
    2019-01-16 23:24:29
  • 同学总结的有两点需要注意一下 , 第一点是元素设置百分比也可以水平居中 , 例如90% ,80% ,只要不是100%让元素紧贴浏览器两侧 ,它就能够居中显示 . 第二点是设置绝对定位(结合margin:auto;lrbt:0)的元素 ,它的父元素需要设置相对定位 ,这样就能在父元素中居中了 . 其实margin:0 auto与定位是实现居中的两种不同方式 . 如果你只要水平居中 , 直接给元素设置宽度和margin:0 auto实现就可以了 . 如果是想要实现水平和垂直居中 , 可以结合margin:auto;lrbt:0这种方式去实现 .
    2019-01-17 15:13:45
好帮手慕夭夭 2019-01-16 16:22:11

你好同学 , margin:0 auto设置水平居中时不需要设置定位的 . 同学可能和之前设置垂直居中记混了 . 因为设置垂直居中需要计算元素的父元素高度 , margin:auto并不能计算出父元素高度 , 所以垂直居中无效 , 想要水平垂直都居中 , 需要结合定位实现效果 .单纯的设置水平居中是不需要定位的 . 

同学再重新理解一下, 也可以自己尝试敲一下代码进行验证 ,帮助自己理解 . 祝学习愉快 ,望采纳 .

  • 提问者 阿扬在自律路上 #1
    灰灰老师,1.垂直居中的时候父元素如果已经有高度了,就可以使用了吗?2.水平居中如果没有宽度,那还能实现吗?
    2019-01-16 17:26:58
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
前端小白入门系列课程
  • 参与学习           人
  • 提交作业       11218    份
  • 解答问题       36713    个

从一个不会编程的小白到一个老司机是需要过程的,首先得入门,学习基础知识,然后才能进阶,最后再到精通,本专题是你走进前端世界的不二选择!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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