获取中...

-

Just a minute...

因为css的知识比较琐碎,所以特地记录一下工作中踩过的坑

一个简单的答案和解决办法

前两天在工作中踩了个坑,给一个子元素设置了100px的margin-top,然后父元素没有设置border-top和padding-top,原本期待的是父元素能够顶到最上面,然后子元素在父元素内部,和父元素的顶部保持一个100px的距离。但是结果是,子元素的顶和父元素的顶贴在了一起,然后父元素没有顶到最上面,反而被挤下来了100px的距离。

上网了解了一下之后,知道了解决方案是给父元素设置padding-top或者border-top,这样就能达到预期了。

然后我又深入了解了一下,原来是涉及到外边距合并的知识。当两个垂直方向的外边距相遇时会发生合并,二者不会相加,而是合并成二者的较大值(可以理解为两个外边距重叠了)。这个其实我之前就知道,不过之前我知道的情境是兄弟元素之间的外边距合并,上面的margin-bottom和下面的margin-top会合并。但是我才知道,原来父子元素的margin-top也会合并。

而给父元素加伤padding-top和border-top就不会合并,是因为两个垂直外边距中间被border或者padding隔开,因此不会合并。

更进一步探究

而好奇的我不会在此停下,既然说的是合并成二者中的较大值,那如果有一方是负外边距怎么办?负外边距是不是相当于永远不起作用了?

然后我又找啊找,同时自己也试啊试,最终发现了一篇讲的很好的文章图解 外边距合并、负外边距,也能解释我实验的结果

结论就是:当要合并的外边距都为正时,取二者最大值。当一正一负时,正的和负的相抵消,最后为正就是正多少,为负就是负多少。当两个负外边距时,会取绝对值较大的负外边距,作为二者重合多少的标准。

当然,这种情况几乎没有什么用,我觉得也很少会有同时用到负外边距和外边距合并的情况,这么布局多少沾点魔鬼了,平时应该合理使用padding和margin,尽量让布局更加简明易懂

相关文章
评论
分享
  • 动手实现react-ssr 2

    仓库链接:本篇代码 运行方法参考readme,请使用pnpm,因为本次使用的rspack尚未推出1.0版本,预计后续可能会有很多breakchange,所以lock文件至关重要,而我只上传了pnpm的lock,非常抱歉。 环境:no...

    动手实现react-ssr 2
  • 动手实现react ssr

    关于ssr相关的介绍,可以移步之前的一篇博文,本文不再赘述 日常工作中,我们可能都接触过ssr,不过我们可能通常是借助于框架(例如Next.js)的支持来完成ssr。今天我想尝试,摆脱高度封装的前端框架,只依赖react相关的库,来实...

    动手实现react ssr
  • 基于tapable来模拟webpack插件机制

    前两天看到ByteFE公众号发了篇文章,从源码去讲webpack。我之前也从很多方面去学习webpack,只是源码一直没太看得进去,这一次我想仔细地读一读。 简要介绍tapable说实话,之前看webpack源码一直没看的太懂,...

    基于tapable来模拟webpack插件机制
  • 深入js——作用域,作用域链,执行栈(一)

    最近在补js基础。当初自学js的时候,总是感觉学的不扎实。只能说不去上手,再怎么死读书,也理解不了。积累了经验,然后自己去思考,这个时候再去看理论,就容易理解了。 感觉工作一年以来,确实学到了很多,但是过于专注于应用方面的知识,反倒...

    深入js——作用域,作用域链,执行栈(一)
  • webpack运行时代码简要分析

    开个坑,主要也是怕自己后面忘了 简单写写,有空了补上 __webpack_modules是一个数组,每个元素都是一个函数,函数接受三个参数:第一个参数module好像没用到,第二个是一个对象(会把本模块要导出的属性,赋值给这个对象),...

    webpack运行时代码简要分析
  • webpack动态加载原理简述

    为什么需要动态加载上一篇讲我写webpack针对markdown的loader的时候,提到了希望能动态加载以优化性能。篇幅原因没有展开说,打算单独写一篇文章讲一下。 当我们访问网站的时候,浏览器会向服务器请求页面资源。首先请求的当然是...

    webpack动态加载原理简述
  • 编写一个简单的webpack loader的踩坑

    因为觉得hexo框架搭的博客功能一般,就有了想要自己写一个博客的想法。然后就想着如果把markdown文件也放到项目里的话,会比较方便,发现需要编写一个加载markdown的loader,于是就有了这篇博客,来记录一下踩过的坑和收获...

    编写一个简单的webpack loader的踩坑
  • 简单通俗解释HTTP缓存

    开始前的碎碎念 最近加班真的很严重,组里同事们都已经苦不堪言。业务交付压力非常大,根本没时间去磨练本领,学习技术。真的很讨厌这种没有成长的日子,每天被业务需求赶着跑。每天下班之后,本来应该用于提升自我的时间也被压榨用来写业务代码。 ...

    简单通俗解释HTTP缓存
  • 从invalid hook call报错说到npm install相关

    遇到了invalid hook call报错上周,业务下游的同事反馈了一个生产问题,说我们传的值有问题,领导让我帮忙排查一下。我最近一直没做那个项目相关的需求,打开那个项目切到release分支,拉代码,npm i然后启动,结果就白屏...

    从invalid hook call报错说到npm install相关
  • useState为什么获取不到更新后的值,如何解决

    令人困扰的问题是因为异步吗大家都知道,react的useState和useReducer,在set和dispatch之后,马上去获取值,是拿不到最新的值的。这个原因之一是useState和useReducer是异步更新的,也就是说我们...

    useState为什么获取不到更新后的值,如何解决
Please check the parameter of comment in config.yml of hexo-theme-Annie!