margin相关

  • margin与可视尺寸,适用范围:
    1、没有设定width/height的普通block水平元素
    2、只适用于水平方向尺寸
    实际应用:一侧定宽的自适应布局(原理是因为margin改变了区域的可视区域大小)
    <img width="150" style="float:left">
    <p style="margin-left:170px">图片左浮<p>

  • margin与占据尺寸
    1、block/inline-block水平元素均适用
    2、与有没有设定width/height值无关
    3、适用于水平方向和垂直方向

  • margin与百分比单位
    1、普通元素的百分比margin都是相对于容器的宽度计算的。并不是分别根据宽高计算的。
    2、绝对定位元素的百分比margin是相对于第一个定位祖先元素(relative/absolute/fixed)的宽度计算的。与普通元素的区别是不按照直接容器进行计算。

  • margin重叠
    通常特性:
    1、只发生在block水平元素(不包括float和absolute元素)
    2、不考虑writing-mode,只发生在垂直方向(margin-top/margin-bottom)
    三种情景:
    1、相邻的兄弟元素
    2、父级和第一个/最后一个子元素

Paste_Image.png
Paste_Image.png

干掉父元素、子元素margin-top重叠的几个办法:
a、父元素块状格式化上下文元素
b、父元素设置border-top
c、父元素设置padding-top
d、父元素和第一个子元素之间增加一个inline元素分割

3、空的block元素
空的block元素margin重叠的条件
a、元素没有Border设置
b、元素没有padding值
c、里面没有inline元素
d、没有height,或者min-height

  • margin重叠计算规则
    1、正在取大值
    2、正负值相加
    3、负负最负值

  • margin重叠的意义:
    1、连续段落或列表之类,如果没有margin重叠,首尾项间距会和其他兄弟标签1:2关系,排版不自然
    2、web中任何地方嵌套或直接放入任何裸div,都不会影响原来的布局
    3、遗落的空任意多个<p>元素,不要影响原来的阅读排版。

  • margin:auto的机制
    如果一侧定值,一侧auto,auto为剩余空间大小,如果两侧均是auto,则平分剩余空间。
    两个常见疑问:
    1、为何图片用此办法不居中?因为图片是inline-block水平,而inline-block水平是没有剩余空间可以利用的,故无法水平居中!!!
    2、为何容器定高,设置margin:auto不能实现垂直居中?因为垂直方向不会自动填充,没有可以利用的剩余空间。
    元素居中的两种办法:
    a、修改文档流方向,默认方向为水平方向。使用writing-mode:vertical-lr,可将元素置为垂直方向,从而使用以上特性达到垂直方向居中,但是无法实现水平方向居中。
    b、利用absolute的拉伸特性,增加垂直方向剩余面积,然后使用margin:auto即可水平、垂直居中。IE8+
    position:absolute;
    left:0;right:0;top:0;botton:0;
    width:100px;height:100px;
    margin:auto;
    ps:如果宽度不足以分配,那么也不会达到居中效果。

  • margin无效的几种情况
    1、inline水平元素的垂直margin无效(非替换元素,如img)
    2、margin重叠
    3、display:table-cell,按照规范,margin是不会再table-cell中有作用的,但是某些替换元素不适用上述规则,如Img,button(具有浏览器差异)
    4、绝对定位(absolute)元素非定位方位的margin值“无效”,除非给容器增加position:relavite。(原理是由于脱离文档流,故肉眼看不出来)
    5、鞭长莫及。。。。 看似无效,其实有效


    Paste_Image.png

    6、图片不管如何设置margin,都不可能完全脱离容器,原因是因为图片是inline-block水平的,故图片一定会与它之后的文字基线对齐(不管后面是否有文字),而内联元素的特性是不可能超出容器的范围,故导致图片也不会超出此范围

  • 默认情况下,margin-start与margin-left相同,但是当改变文档流时,margin-start会改变,与流向有关。margin-end同理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 14,687评论 1 92
  • 一、标准盒模型和怪异模式盒模型 标准盒模型和怪异模式盒模型可以通过box-sizing来设置: 标准盒模型: bo...
    会有猫惹阅读 3,584评论 0 1
  • 以下文章是我在网上收集的内容,为了记录自己的学习以及为了以后不到处找而记录下来,如果对你有用,请感谢写这些文章的前...
    DCbryant阅读 4,485评论 0 2
  • 收听音频,戳链接,旧号itclan已暂停使用,欢迎关注微信itclanCoder公众号可收听更多音频 前言 关于网...
    itclanCoder阅读 12,533评论 3 30
  • 过了年,我们单位换了新boss,来了就先提出几字方针:积极主动、务实高效、资源下放。自己最初听得觉得最切合的...
    双宝妈YQ阅读 1,553评论 0 0