由圣杯布局引发的思考

简介: 今天在MDN看到块格式化上下文有点不以为然,关键是它写的高深莫测,读不懂...于是下午想试试圣杯布局的时候,终究还是逃不过它。🤣这里不介绍圣杯布局的历史,这样的文章网上不知道多少篇,我来写写千篇一律中的亮点吧,哈哈。

今天在MDN看到块格式化上下文有点不以为然,关键是它写的高深莫测,读不懂...

于是下午想试试圣杯布局的时候,终究还是逃不过它。🤣

这里不介绍圣杯布局的历史,这样的文章网上不知道多少篇,我来写写千篇一律中的亮点吧,哈哈。

想知道怎么写的,请参考这篇文章⬅

这篇文章有配解释图,能让你更好理解如何一步一步搭建起来~

此处是圣杯的布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        body {
            min-width: 550px;
        }
        * {
            margin: 0;
            padding: 0;
        }
        #container {
            padding-left: 200px;
            padding-right: 150px;
            min-height: 300px;
        }
        #header,
        .footer {
            background-color: black;
            height: 40px;
        }
        #center {
            background-color: darkgrey;
            min-height: 300px;
        }
        #left {
            width: 200px;
            margin-left: -100%;
            position: relative;
            right: 200px;
            background-color: blue;
            min-height: 300px;
        }
        #container .column {
            float: left;
        }
        #center {
            width: 100%;
        }
        #right {
            width: 150px;
            background-color: brown;
            min-height: 300px;
            margin-right: -150px;
        }
        #footer {
            clear: both;
        }
    </style>
</head>
<body>
    <div id="header"></div>
    <div id="container">
        <div id="center" class="column"></div>
        <div id="left" class="column"></div>
        <div id="right" class="column"></div>
    </div>
    <div id="footer"></div>
</body>
</html>

然后当我解读这段代码时候,我奇怪的是什么,left需要margin-left:-100%就提升所谓的高度了。。。

其实正常文档流中,如果你的center宽度小点,这三个元素是并排显示的,因而margin-left的负值(应该往左移动),还是100%,将移动最左侧了,所以覆盖了。

排列位置是center,left,right,left被移动走了,再margin-right就去右边了。

那为什么left还要借助postion,right却不用呢?

margin-left设置百分比是相对于父元素宽度的,这个宽度是不包括padding在内的,所以到达了与center重叠的地方

right是往右走,其实代码不唯一,你设置-100%,照样到末尾。

position: relative;,你还要注意left这边算最小宽度时候要算两遍,因为它原来的宽度是存在的。

那么为什么会提到刚刚我说的块格式化上下文,英文名就是BFC

我是看到了这篇介绍,我没看懂,感觉该作者语言组织不好。。。

#突然提到BF#

没办法,于是我就去补了BFC的漏洞

这篇文章更好的介绍

当你有了理解之后,再来看本文❗

现在你终于知道为什么设置float之后,这些元素不会重叠,因为他们属于BFC并且BFC与浮动容器不重合,

可是为什么设置margin-left的负值(应该往左移动,反倒上去重合了呢?)-》margin-left强制改动了位置。

目录
相关文章
|
9月前
|
并行计算 算法 异构计算
antv/g6之图布局及切换布局
antv/g6之图布局及切换布局
1047 0
|
3月前
|
前端开发 容器
|
6月前
瀑布流布局
瀑布流布局
46 0
|
9月前
|
前端开发
前端三栏布局(包括圣杯,双飞翼)
前端三栏布局(包括圣杯,双飞翼)
|
9月前
|
前端开发
两栏布局的实现
两栏布局的实现
圣杯布局和双飞翼布局
圣杯布局和双飞翼布局
|
前端开发
前端经典圣杯布局和双飞翼布局
圣杯布局和双飞翼布局解决的问题是一样的 就是两边顶宽,中间自适应的三栏布局,中间栏要在放在文档流前面以优先渲染
114 0
|
前端开发 容器
从0开始学习FlexBox布局
之前研究过一篇《移动端适配总结》,里面主要通过布局不变,改变布局组件元素的大小去适应移动端。但是这种方式对于PC端或者Pad等大屏幕并不适合,所以从想找找看是否有新的方案能否满足跨端自适应布局方式。
119 0
|
容器
2022年了,还是得学圣杯布局与双飞翼布局
2022年了,还是得学圣杯布局与双飞翼布局 今天看别人的面经,发现还是有很多家公司会问圣杯布局以及双飞翼布局,之前我跳过了,因为实际中我几乎没有用过float布局,所以对这两个布局理解起来稍微有一点费劲,但是既然面试可能要问,那还是得把这个理解透,所以这篇文章将带你从零创建一个圣杯布局以及双飞翼布局,小白也能看懂,绝对的保姆级讲解,当然理解有误的希望大家积极补充,共同进步。 可以转载,但请声明源链接:文章源链接justin3go.com(有些latex公式某些平台不能渲染可查看这个网站)
120 0