# 实现三栏布局 三栏布局在开发十分常见,即两边固定宽度,中间自适应宽度的布局。 ## Flex 使用`CSS3`的`flex`布局实现三栏布局,`Flex`布局也称弹性布局,可以为盒状模型提供最大的灵活性,是布局的首选方案,现已得到所有现代浏览器的支持,此处主要是利用`flex`容器成员默认按照主轴排列,以及利用`flex`属性即`flex-grow`,`flex-shrink`和`flex-basis`的简写形式将间的块自适应撑起。 ```html FLEX
left
main
right
``` ## Calc 通过`CSS`的`calc`可以动态计算中间部分的长度从而做到自适应,`calc`可以配合`inline-block`行内块级元素实现三栏布局,注意使用行内块级元素的时候如果编写`HTML`时换行,这个空白的换行也会作为元素解析从而会产生空白间隙,所以在编写时此处不要换行,此外`calc`通过与`float`配合实现也是可行的。 ```html Calc
left
main
right
``` ## BFC `BFC`块级格式化上下文`Block Formatting Context`,是`Web`页面的可视CSS渲染的一部分,是块盒子的布局过程发生的区域,也是浮动元素与其他元素交互的区域,是用于布局块级盒子的一块渲染区域,并且与这个区域的外部毫无关系,是一个独立的区域,是一个环境,在这里利用`BFC`区域不会与浮动元素重叠的特性实现三栏布局。 ```html BFC
left
right
main
``` ## Margin 这个方法是使使左右模块各自向左右浮动,并设置中间模块的`margin`值使中间模块宽度自适应。 ```html Margin
left
right
main
``` ## Float 使用`Float`配合`margin`实现三栏布局,主要是`margin`的负值的应用。 ```html Float
main
left
right
``` ## Table 利用`table`布局即表格的样式,实现三栏布局。 ```html Table
left
main
right
``` ## Grid 目前`CSS`布局方案中,网格布局可以算得上是最强大的布局方案了。它可以将网页分为一个个网格,然后利用这些网格组合做出各种各样的布局。`Grid`布局与`Flex`布局有一定的相似性,都可以指定容器内部多个成员的位置。不同之处在于,`Flex`布局是轴线布局,只能指定成员针对轴线的位置,可以看作是一维布局。`Grid`布局则是将容器划分成行和列,产生单元格,然后指定成员所在的单元格,可以看作是二维布局。 ```html Grid
left
main
right
``` ## 每日一题 ``` https://github.com/WindrunnerMax/EveryDay ``` ## 参考 ``` https://zhuanlan.zhihu.com/p/25070186 https://juejin.cn/post/6844903686758465550 https://juejin.cn/post/6844904062224171021 ```