源码论坛公告:本站是一个交流学习建站资源的社区论坛,旨在交流学习源码脚本等资源技术,欢迎大家投稿发言! 【点击此处将锦尚放在桌面

源码论坛,商业源码下载,尽在锦尚中国商业源码论坛

 找回密码
 会员注册

QQ登录

只需一步,快速开始

查看: 8303|回复: 0
打印 上一主题 下一主题

[CSS/Html] 给子div设置的margin-top值在父div上生效了该怎么办?

[复制链接]

3123

主题

3525

帖子

14万

金币

超级版主

Rank: 8Rank: 8

积分
287186
跳转到指定楼层
1#
发表于 2022-7-13 14:20:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

1.问题产生: 在写元素垂直水平居中时,有一种方式是设置子元素margin: 具体值 auto,但此时发现给子元素设置的margin-top值作用在了父元素上

  1. <style>
  2.     .box1{
  3.       width: 200px;
  4.       height: 200px;
  5.       background-color: purple;
  6.       margin: 20px;
  7.     }
  8.     .inner{
  9.       width: 100px;
  10.       height: 100px;
  11.       background-color: yellowgreen;
  12.       margin: 50px auto;
  13.     }
  14.   </style>
  15.   <body>
  16.   <div class="box1">
  17.     <div class="inner">222</div>
  18.   </div>
  19.   </body>
复制代码




2.问题产生的原因:由于css外边距合并导致的

3.解决方案:

(1)方案一:设置父元素overflow:hidden

  1. <style>
  2.     .box1{
  3.       width: 200px;
  4.       height: 200px;
  5.       background-color: purple;
  6.       margin: 20px;
  7.       overflow:hidden;
  8.     }
  9.     .inner{
  10.       width: 100px;
  11.       height: 100px;
  12.       background-color: yellowgreen;
  13.       margin: 50px auto;
  14.     }
  15.   </style>
  16.    <body>
  17.   <div class="box1">
  18.     <div class="inner">222</div>
  19.   </div>
  20.   </body>
复制代码




(2)方案二:给父元素设置有效的border(设置border-style 或者border: 1px solid #000均可)

  1. <style>
  2.     .box1{
  3.       width: 200px;
  4.       height: 200px;
  5.       background-color: purple;
  6.       margin: 20px;
  7.       border-style: solid;
  8.     }
  9.     .inner{
  10.       width: 100px;
  11.       height: 100px;
  12.       background-color: yellowgreen;
  13.       margin: 50px auto;
  14.     }
  15.   </style>
  16. </head>
  17. <body>
  18.   <div class="box1">
  19.     <div class="inner">222</div>
  20.   </div>
  21. </body>
复制代码




(3)方案三其实都是通过改变父级元素的display值(可以设为
display: flex;
display: grid;
display: -webkit-box;
display:inline-flex;
display: inline-grid;
)就可以了,子元素设置固定值或者auto均可实现垂直水平居中

  1.   <style>
  2.     .box1{
  3.       width: 200px;
  4.       height: 200px;
  5.       background-color: purple;
  6.       margin: 20px;
  7.       display: flex;
  8.     }
  9.     .inner{
  10.       width: 100px;
  11.       height: 100px;
  12.       background-color: yellowgreen;
  13.       margin: auto;
  14.     }
  15.   </style>
  16. </head>
  17. <body>
  18.   <div class="box1">
  19.     <div class="inner">222</div>
  20.   </div>
  21. </body>
复制代码




(4)方案四是设置父元素的before伪元素,子元素需设置margin:固定值 auto;方可实现垂直水平居中。

  1. <style>
  2.     .box1{
  3.       width: 200px;
  4.       height: 200px;
  5.       background-color: purple;
  6.       margin: 20px;
  7.     }
  8.     .box1::before{
  9.       content: '';
  10.       display: table;
  11.     }
  12.     .inner{
  13.       width: 100px;
  14.       height: 100px;
  15.       background-color: yellowgreen;
  16.       margin: 50px auto;
  17.     }
  18.   </style>
  19. </head>
  20. <body>
  21.   <div class="box1">
  22.     <div class="inner">222</div>
  23.   </div>
  24. </body>
复制代码




分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

锦尚中国源码论坛

聚合标签|锦尚中国,为中国网站设计添动力 ( 鲁ICP备09033200号 ) |网站地图

GMT+8, 2024-12-5 09:35 , Processed in 0.156285 second(s), 24 queries .

带宽由 锦尚数据 提供 专业的数据中心

© 锦尚中国源码论坛 52jscn Inc. 非法入侵必将受到法律制裁 法律顾问:IT法律网 & 褚福省律师 锦尚爱心 版权申诉 版权与免责声明