js margin作用到父元素_CSS中margin-top对父级元素产生作用的问题
在页面重构中,利用margin进行定位非常常见,然而margin-top这个属性经常会给我们带来一定的困扰,有时候不起作用,还把父层“拉”了下来,如图所示:
代码如下:
test2
.header { width:300px; height:100px; background: green; }
.outer { width:300px; height:300px; background: yellow; }
.inner { margin-top:100px; width:100px; height:100px; background: red;}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
这是在做布局时的一个经典问题。那这个问题是怎么产生的呢?主要是合并margin的问题,红色层(子层)的margin-top与黄色层(父层)相合并,产生了共同的margin-top。其实合并margin还有其他的形式,比如说:
父层的margin-top与一系列子层中第一个层的margin-top合并
上层的margin-bottom与下层的margin-top合并,此时margin值为合并margin值中的最大值。至于负margin,就从正相邻margin的最大值中减去负相邻margin的绝对值的最大值。如果没有正margin,就用0减去相邻margin的绝对值的最大值
层高为0时,自身的margin-top和margin-bottom合并
那如何解决这个问题呢,w3.org给出了思路:
一个浮动的盒与任何其它盒之间的margin不会合并(甚至一个浮动盒与它的流内子级之间也不会)
建立了新的块格式化上下文的元素(例如,浮动盒与’overflow’不为’visible’的元素)的margin不会与它们的流内子级合并
绝对定位的盒的margin不会合并(甚至与它们的流内子级也不会)
内联盒的margin不会合并(甚至与它们的流内子级也不会)
一个流内块级元素的bottom margin总会与它的下一个流内块级兄弟的top margin合并,除非兄弟有空隙
一个流内块级元素的top margin会与它的第一个流内块级子级的top margin合并,如果该元素没有top border,没有top padding并且该子级没有空隙
一个’height’为’auto’并且’min-height’为0的流内块级盒的bottom margin会与它的最后一个流内块级子级的bottom margin合并,如果该盒没有bottom padding并且没有bottom border并且子级的bottom margin不与有空隙的top margin合并
盒自身的margin也会合并,如果’min-height’属性为0,并且既没有top或者bottom border也没有top或者bottom padding,并且其’height’为0或者’auto’,并且不含行盒,并且其所有流内子级的margin(如果有的话)都合并了
简单的来讲,就是
都用float来定位(有条件要求,适用范围较广)
为父元素添加overflow不为visiable 的属性 (适用范围极广,推荐使用)
为元素添加border(一般不用)
使用绝对定位(适用范围较窄)
父元素增加padding-top属性(改变尺寸,不建议使用)
然鹅我在用margin-top的时候又发现一个问题: 在上一个层有clear属性的时候margin-top不起作用,应该还是margin合并的问题,但是具体原因我没有分析清楚,只提供几个解决方案,供大家参考:
中间加一个层
设置上一个层的margin-bottom来代替下一个层的margin-top
使用包裹层,并设置上下层都用float:left;
使用绝对定位
全部加上border
js margin作用到父元素_CSS中margin-top对父级元素产生作用的问题相关推荐
- html中哪个属性表示块级元素,HTML块级元素与行级元素
转自:http://gkecenter.blog.163.com/blog/static/181380305201291745234195/ 一.两种类型 HTML中的大部分元素都可分为两种类型:块级 ...
- 什么是行内元素、行内块、块级元素。它们有什么区别和特点
什么是行内元素.行内块.块级元素 块级元素 每个块级元素通常都会独占一行或者是多行,可以对其单独设置高度,宽度以及对齐等属性. 常见的块级元素有:<h1>~<h6>,<p ...
- html 获取下一个兄弟节点,JS/JQuery获取当前元素的上一个/下一个兄弟级元素等元素的方法...
$(function(){ //遍历获取的input元素对象数组,绑定click事件 var len = $("input[type='file']").length; for(v ...
- 在html中 常见的块级元素有哪些,常见的css块级元素有哪些
css块级元素介绍: (学习视频分享:css视频教程) 根据W3C上的解释,就是说block(块级)元素是独占一行显示的.它的兄弟元素必定不会与其在同一行中(除非脱离了文档流).其实,通俗点来说,就是 ...
- php for调用数组元素,php中foreach语句如何用于数组元素
php中除了for语句和while语句以外,还有用来处理数组循环的foreach语句,foreach语句是一个循环数组元素的语句,本篇文章就来给大家介绍关于php中foreach语句的用法. 我们先来 ...
- java数组包含某个元素_java中判断数组是否包含某元素的方法
有两种方法可以判断数组是否包含元素: 方法1, 将数组转换为list,然后使用list的contains方法来判断:Arrays.asList(...).contains(...) java.lang ...
- java中person作用_以下Java程序中Person(){};是什么意思,有什么作用?
匿名用户 1级 2013-08-20 回答 Person()方法是用来创建实例的构造方法,例如你要创建一个Person类的实例就需要new Person(),这里的Person()就是Person类的 ...
- 什么是BFC机制,如何触发BFC(消除浮动带来的父元素塌陷、垂直方向margin重叠、嵌套块级元素父元素margin塌陷)
BFC机制 BFC(Block Formatting Context):块格式化上下文 BFC是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其余元素的关系和相互 ...
- python 全栈开发,Day48(标准文档流,块级元素和行内元素,浮动,margin的用法,文本属性和字体属性)...
昨日内容回顾 高级选择器: 后代选择 : div p 子代选择器 : div>p 并集选择器: div,p 交集选择器: div.active属性选择器: [属性~='属性值'] 伪类选择器 a ...
最新文章
- 互联网大厂技术面试内幕@霞落满天
- 统计某一时刻的在线人数
- TypeError: tuple object does not support item assignment解决方案
- 缓存级别与缓存更新问题
- Python - 列表与字符串的互相转换
- 基于内存数据库的分布式数据库架构
- Mybatis之加载mybatis-config.xml
- leetcode 279. 完全平方数(dp)
- 程序员面试金典 - 面试题 16.20. T9键盘(数组)
- 远程过程调用失败_Java开发大型互联网RPC远程调用服务实现之问题处理方案
- 网易云api及 asrsea 加密参数文档
- (48)System Verilog 类中变量随机激励数组数据
- Fedora10字体安装与美化
- 执行jar包中的某个类
- CodeForces 255C. Almost Arithmetical Progression (DP)
- 用SQLAlchemy执行原生SQL
- JVM本地方法栈及native方法
- Android音频压缩方法
- 公司内部Wiki及搭建wiki系统-confluence
- Guass-newton
热门文章
- [转贴]现在在做一个WEB的站内消息系统,从工具栏位置弹出一徐徐上升的窗口...
- c语言函数指针的理解与使用(学习)
- SDN/NFV:现状,挑战和未来
- IBM的“认知计算时代”
- PLSQL DEVELOPER 使用的一些技巧【转】
- 推荐系列:2008年第07期 总9期
- word2vec模型评估_干货 | NLP中的十个预训练模型
- vue 带全选和多选的表格怎么写_vue实现下拉列表多选全选以及模糊查询的vue组件...
- java异常_聊聊Java中的异常及处理
- flask 检测post是否为空_用Flask和Vue制作一个单页应用(五)