当设置了父元素的宽度,子元素设置宽度为100%后再在加上子元素上添加padding或margin值就会溢出。举个例子:

<!-- 示例 -->

<!-- html -->
<div class="parent">
<div class="child"></div>
</div> <!-- css -->
.parent {
width: 500px;
height: 50px;
background-color: green;
border: 1px solid #E74D4D;
}
.child {
width: 100%;
height: 30px;
margin: 20px;
background-color: pink;
}

示例

这是因为设置了width: 100%;后已经将父元素占满,再添加margin值就会溢出(默认溢出值为左侧的margin值)

解决方法:

  1. 父元素设置padding
<!-- 弊端是增加了parent占用的宽度 -->
.parent {
width: 500px;
height: 50px;
padding: 20px;
background-color: green;
border: 1px solid #E74D4D;
}
.child {
width: 100%;
height: 30px;
background-color: pink;
}
  1. [ 推荐 ]利用css3中的box-sizing: border-box; 属性解释链接
    设置他以后,相当于以怪异模式解析,borderpadding全会在你设置的宽度内部。
.parent {
width: 500px;
height: 50px;
padding:20px;
background-color: green;
border: 1px solid #E74D4D;
box-sizing: border-box;
}
.child {
width: 100%;
height: 30px;
background-color: pink;
}
  1. 子元素外添加一个div
<div class="parent">
<div class="child2"> <!-- 设置margin: 20px; -->
<div class="child"></div>
</div>
</div>

** end **


下面是彩蛋。。。

我在举这个例子的时候发现了一个css hack(针对不同的浏览器/不同版本写相应的CSS code的过程):父元素与子元素之间的margin-top问题
html代码

<div class="box1">
<div class="box2"></div>
</div>

css样式

.box1{height:200px;width:200px;background:gray;}
.box2{height:100px;width:100px;background:gold;margin-top:50px;}

结果

示例

父元素的盒子包含一个子元素盒子,给子元素盒子一个垂直外边距margin-top,父元素盒子也会往下走margin-top的值,而子元素和父元素的边距则没有发生变化。

解决方法:

  1. 修改父元素的高度,增加padding-top样式模拟(padding-top:1px;常用)
  2. 为父元素添加overflow:hidden;样式即可(完美)
  3. 为父元素或者子元素声明浮动(float:left;可用)
  4. 为父元素添加border(border:1px solid transparent可用)
  5. 为父元素或者子元素声明绝对定位

ps:

子元素设置margin-top后,父元素跟随下移的问题

https://www.cnblogs.com/bluey/p/6417922.html

css中hack是什么

https://www.cnblogs.com/Renyi-Fan/p/9006084.html

转载于:https://my.oschina.net/jack088/blog/3042690

多方法解决设置width:100%再设置margin或padding溢出的问题的更多相关文章

  1. div宽度设置width:100%后再设置padding或margin超出父元素的解决办法

    div宽度设置width:100%后再设置padding或margin超出父元素的解决办法 一.总结 一句话总结:直接加上box-sizing:border-box;即可解决上述问题. 1.box-s ...

  2. input 设置 width:100% 和padding后宽度超出父节点

    input 设置 width:100% 和padding后宽度超出父节点 添加如下css即可: box-sizing: border-box; -webkit-box-sizing: border-b ...

  3. 前端面试题CSS-div宽度设置为100%,设置属性margin-left和margin-right时出现的问题

    前端面试题CSS-div宽度设置为100%,设置属性margin-left和margin-right时出现的问题 div格式如下 <div class="a"> < ...

  4. css top,right,bottom,left设置为0有什么用?它和width:100%和height:100%有什么区别?

     壹 ❀ 引 当我们使用position属性时,总免不了与top,left,right,bottom四个属性打交道,那么这四个属性都设置为0时有什么用,与宽高设置100%又有什么区别?本文对此展开讨论 ...

  5. width:100% 和 max-width:100%; 有区别吗【转藏】

    这个博客是基于“Pelican+Markdown+定制的my-gum主题”的.定制的主题将博文正文页面的 右边栏去掉,这导致在Firefox等浏览器中,正文中大的图片会突破正文块的宽度,高度也得不到限 ...

  6. 设置height:100%无效的解决方法

    设置height:100%无效的解决方法 刚接触网页排版的新手,常出现这种情况:设置table和div的高height="100%"无效,使用CSS来设置height:" ...

  7. table和div设置height:100%无效的完美解决方法

    刚接触网页排版的新手,常出现这种情况:设置table和div的高height="100%"无效,使用CSS来设置height:"100%"也无效,为什么会这样呢 ...

  8. hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了

    hibernate中保存一个对象后再设置此对象的属性为什么不需要调用update方法了 例如session.save(user);user.setAge(20); 原因: hibernate对象的三种 ...

  9. 解决body设置height:100%无效问题

    1. 解决html设置height:100%无效问题 通常我们需要让自己的网页内容能够更好的适配各种屏幕大小,会采用height:100%,但是我们发现问题出来了,height:100%无效,其实解决 ...

随机推荐

  1. Linux利器:使用 gcc 编程C程序

    文章更新于:2020-03-23 文章目录 一.手动编译链接单个C源文件 1.创建C源文件 2.编译源文件 3.生成可执行文件 二.手动编译链接多个C源文件 1.创建两个C源文件 2.编译两个源文件 ...

  2. Flask入门 之 没有装饰器的路由

    有些时候,需要一个类似路由的功能,但又不能或者不想写装饰器,这该怎么办? so easy! eg: @app.route('login') def login(): return 'hello wor ...

  3. 搭建环境-git常见使用总结

    Descripton:git 一.Git安装和本地用户全局配置 官网下载并且安装 查看是否安装成功win + R输入git,出现git命令指南,则安装成功 全局配置本地用户,在git Bash中进行下 ...

  4. 3分钟掌握Quartz.net分布式定时任务的姿势

    引言 长话短说,今天聊一聊分布式定时任务,我的流水账笔记: ASP.NET Core+Quartz.Net实现web定时任务 AspNetCore结合Redis实践消息队列 细心朋友稍一分析,就知道还 ...

  5. Codeup 25593 Problem G 例题5-7 求圆周率pi的近似值

    题目描述 用如下公式 4*Π = 1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + 1/13 - 1/15 - 求圆周率PI的近似值,直到发现某一项的绝对值小于10-6为止(该项不 ...

  6. CVE-2020-0796 永恒之蓝?

    0X00漏洞简介 Microsoft Windows和Microsoft Windows Server都是美国微软(Microsoft)公司的产品,Microsoft Windows是一套个人设备使用 ...

  7. 委托的 `DynamicInvoke` 小优化

    委托的 DynamicInvoke 小优化 Intro 委托方法里有一个 DynamicInvoke 的方法,可以在不清楚委托实际类型的情况下执行委托方法,但是用 DynamicInvoke 去执行的 ...

  8. 使用 Chrome 插件 Vimium 打造黑客浏览器

    之前一直用 cVim,与 Vimium 功能类似,但是之后不在更新了,故转战到 Vimium. 简介 官网:http://vimium.github.io/ Vimium 是 Google Chrom ...

  9. vue中的错误日志

    一.Error compiling template: Component template requires a root element, rather than just text. 这个错误意 ...

  10. 提高万恶的KPI,切忌要避开这六个低效的编程习惯

    作者:程序员小跃 Slogan:当你的才华还无法撑起你的野心时,那应该静下心来好好学习 上次的翻译,引起了很大的反响,大家都想知道自己和高级工程师的差距,看了我的文章,是不是都在默默地做着比较呢?如果 ...