position 跟 display、margin collapse、overflow、float 这些特性相互叠加

一、‘display’、‘position’ 和 ‘float’ 的相互关系

下图:

设定值 转换后
inline-table table
inline, inline-block,run-in,table-row-group,table-column,table-column-group,table-header-group,table-footer-group,table-row,table-cell,table-caption block
其他 保持设定值

1、position:absoluteposition:fixed 优先级最高,有它存在的时候,浮动不起作用

<style>
.container {width: 300px;height: 300px;border: 1px solid #ff0000;
}
.item {width: 100px;height: 100px;border: 1px solid yellowgreen;background-color: yellowgreen;position: fixed;float: right;
}
</style><div class="container"><div class="item"></div>
</div>

2、display值为none

当元素display值为none时,元素不产生框,float和position都不起作用。

3、float值不为none

当元素有了浮动属性(float不为none,是left或right)后,该框浮动且display值会按上表转换。例如,span是行内元素,设置浮动后会变为块级元素。

4、元素为根元素

如果元素是根元素,设置的display也会按上表进行转换。否则,元素的display值为指定值或默认值。

二、position 跟 display、overflow、float下的 margin collapse

补充:margin collapse 外边距折叠 指的是毗邻的两个或多个外边距 (margin) 会合并成一个外边距

margin 毗邻,可以归结为以下两点:

  • 这两个或多个外边距没有被非空内容、padding、border 或 clear 分隔开。
  • 这些 margin 都处于普通流中。

两个或多个毗邻的普通流中的块元素垂直方向上的 margin 会折叠

  • 参与折叠的 margin 都是正值

    <div style="height:50px; margin-bottom:50px;width:50px; background-color: red;">A</div>
    <div style="height:50px;margin-top:100px; width:50px; background-color: green;">B</div>
    

    在 margin 都是正数的情况下,取其中 margin 较大的值为最终 margin 值。

  • 参与折叠的 margin 都是负值

<div style="height:100px; margin-bottom:-75px;width:100px; background-color: red;">A</div>
<div style="height:100px;margin-top:-50px; margin-left:50px; width:100px; background-color: green;">B</div>

当 margin 都是负值的时候,取的是其中绝对值较大的,然后,从 0 位置,负向位移。

  • 参与折叠的 margin 中有正值,有负值
<div style="height:50px; margin-bottom:-50px;width:50px; background-color: red;">A</div>
<div style="height:50px;margin-top:100px; width:50px; background-color: green;">B</div>

​ 先取出负 margin 中绝对值中最大的,然后,和正 margin 值中最大的 margin 相加。

  • 相邻的 margin 要一起参与计算,不得分步计算
<div style="margin:50px 0;background-color:green; width:50px;"><div style="margin:-60px 0;"><div style="margin:150px 0;">A</div></div>
</div>
<div style="margin:-100px 0;background-color:green; width:50px;"><div style="margin:-120px 0;"><div style="margin:200px 0;">B</div></div>
</div>

A 和 B 之间的 margin 折叠产生的 margin,是6个相邻 margin 折叠的结果。将其 margin 值分为两组:

  • 正值:50px,150px,200px
  • 负值:-60px,-100px,-120px

根据有正有负时的计算规则,正值的最大值为 200px,负值中绝对值最大的是 -120px,所以,最终折叠后的 margin 应该是 200 + (-120) = 80

此时我们的解决方法就是:在元素能够触发 格式化上下文(BFC)

  • 给父元素添加下列 css 样式的其中一个即可

    • border-top: 1px solid transparent;
    • padding-top: 1px;
    • display: inline-block;
    • float: left;
    • position: absolute;
    • position: fixed;
    • overflow: scroll;
  • 对于兄弟元素而言:

    • 给其中一个元素添加父元素,然后触发BFC规则(不推荐)
    • 只设置其中一个块级元素的margin值即可(推荐)

HTML和CSS面试题第35题相关推荐

  1. [剑指offer]面试题第[35]题[Leetcode][第138题][JAVA][复杂链表的复制][暴力][HashMap][复制链表]

    [问题描述][中等] [解答思路] 1. 暴力 直接复制 将链表从头节点一个一个复制下去, 在根据记录的总长度num,遍历原来的每个节点的random到尾节点个数count,然后顺序遍历找到新链表的该 ...

  2. 105道 CSS 面试题,助你查漏补缺

    本部分主要是笔者在复习 CSS 相关知识和一些相关面试题时所做的笔记,如果出现错误,希望大家指出! 目录 1.介绍一下标准的 CSS 的盒子模型?低版本 IE 的盒子模型有什么不同的?[1] 2.CS ...

  3. 【面试题】755- 104道 CSS 面试题,助你查漏补缺(上)

    作者:CavsZhouyou https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/master/Css/Css.md 本部 ...

  4. 104道 CSS 面试题,助你查漏补缺(上)

    作者:CavsZhouyou https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/master/Css/Css.md 本部 ...

  5. 值得收藏的 104个 CSS 面试题

    给大家分享104个 CSS 面试题,助你查漏补缺.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助 CSS 面试知识点总结 最近在整理 CSS 的时候发现遇到了很多面试中常见的面试题,本 ...

  6. 104道 CSS 面试题

    104道 CSS 面试题 (给前端大全加星标,提升前端技能) 作者:CavsZhouyou https://github.com/CavsZhouyou/Front-End-Interview-Not ...

  7. 104道 CSS 面试题,助你查漏补缺(下)

    作者:CavsZhouyou https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/master/Css/Css.md 本部 ...

  8. 【面试题】104道 CSS 面试题,助你查漏补缺(下)

    作者:CavsZhouyou https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/master/Css/Css.md 本部 ...

  9. 程序员面试题精选100题(48)-二叉树两结点的最低共同父结点[数据结构]

    题目:二叉树的结点定义如下: struct TreeNode { int m_nvalue; TreeNode* m_pLeft; TreeNode* m_pRight; }; 输入二叉树中的两个结点 ...

  10. 第十一届蓝桥杯省赛 C++组试题 第2题 求完数

    /* 第十一届蓝桥杯省赛C++组试题精讲第2题 求完数因子:因子也叫因数,例如3×5=15,那么3和5是15的因子. 同时15×1=15,那么1和15也是15的因子. 1,3,5,15 这四个因子是1 ...

最新文章

  1. XamarinSQLite教程添加测试数据
  2. IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
  3. python爬虫隐藏ip_Python3网络爬虫之使用User Agent和代理IP隐藏身份
  4. gcc在64位系统上一个史诗级WARNING
  5. “Hello World!”团队第九次会议
  6. 一份帮助你更好地理解深度学习的资源清单 1
  7. 使用Python将Excel文件中的数据插入MySQL数据库,你学会了吗?
  8. C6748和音频ADC连接时候的TDM以及I2S格式问题
  9. 奔小康赚大钱 HDU - 2255(最大权值匹配 KM板题)
  10. springboot异常处理机制之统一异常处理和自定义异常类
  11. 幻想西游php源码,如何搭建幻想西游服务器
  12. 关于OpenGL游戏全屏模式的设置
  13. 计算机应用基础学科计划,《计算机应用基础》教学计划
  14. Redis可视化工具
  15. 加拿大前十大学计算机硕士学费,2018年加拿大各大学硕士学费一览表!
  16. STM32+QRCode二维码生成
  17. 梦境历险记-解说动漫电影
  18. 蚂蚁金服面试题和答案
  19. 2019年TI杯 简易电路特性测试仪 制作过程(9)——实际测试效果 20/05/24
  20. 六十星系之11紫微破军坐丑未

热门文章

  1. 词频统计(30 分)(map vector sort)
  2. 1949年-2021年历史县级行政区划分布数据 中国行政村边界数据、乡镇街道边界、行政区划边界
  3. 洛谷 P1896 状压DP
  4. c++ 读文件_C语言文件操作大全
  5. python ant_python3.7.1ant+TKinter在Tkin中显示来自ANT+设备的实时数据
  6. 多线程 空值线程数_跳槽涨薪季面试题之多线程(三)
  7. 防止孩子使用计算机的软件,如何防止熊孩纸在电脑里乱装软件
  8. vbs if 不等于_(四)if 判断与逻辑运算符
  9. 切片器可以设置日期格式?_Power BI之相对日期的设置
  10. 利用扩展双屏技术及Chrome浏览器,快速剖析优秀网页Div及CSS构成,并高效实现原型创作