当前位置: 首页 > Web前端 > CSS

如何使用Flexbox和CSSGrid实现高效布局

时间:2023-03-31 11:54:29 CSS

CSS浮动属性一直是网站元素排列的主要方式之一,但在实现复杂布局时,这种方式并不总是理想的。幸运的是,在现代网页设计时代,使用Flexbox和CSSGrid对齐元素变得相对容易。使用Flexbox可以很容易地对齐元素,因此Flexbox得到了广泛的应用。同时CSSGrid布局也给网页设计行业带来了极大的便利。虽然CSSGrid布局并未被广泛采用,但浏览器逐渐开始添加对CSSGrid布局的支持。虽然Flexbox和CSSGrid可以完成类似的布局,但这次,我们将学习如何结合使用这两种工具,而不是只选择其中一种。当CSSGrid布局在不久的将来获得完整的浏览器支持时,设计人员将能够利用每个CSS组合的优势来创建最有效和有趣的布局设计。测试Flexbox和CSSGrid的基本布局我们从一个非常简单和熟悉的布局类型开始,包括页眉、侧边栏、主要内容和页脚。通过这样一个简单的布局,帮助我们快速的找到各种元素的布局方式。下面是需要创建的内容:要完成这个基本布局,Flexbox需要完成的主要任务包括:创建一个全宽的页眉和页脚将侧边栏放在主要内容区域的左侧确保侧边栏和主要内容区域对齐适当调整大小以确保导航元素的准确定位基本HTML结构

使用Flexbox创建布局Header样式我们从外到内开始设计,一层一层,首先添加display:flex;到容器,这也是所有Flexbox布局的第一步。接下来,将flex-direction设置为column,确保所有部分都是相对的。.container{显示:flex;flex-direction:column;}通过display:flex;自动创建全角标题(标头默认是块级元素)。有了这个声明,导航元素的放置就变得容易了。导航栏左侧有一个标志和两个菜单项,右侧有一个登录按钮。navigation位于header中,navigation和button之间的自动间距可以通过justify-content:space-between;来实现。在导航中,使用align-items:baseline;使所有导航项与文本基线对齐,这也使导航栏看起来更加统一。代码如下:header{padding:15px;底部边距:40px;显示:弹性;证明内容:空格之间;}标题导航ul{显示:flex;对齐项目:基线;列表样式类型:无;}页面内容样式接下来,用包装器包装侧边栏和主要内容区域。带有.wrapper类的div也需要设置display:flex;但弯曲方向与上面不同。这是因为侧边栏和主要内容区域彼此相邻而不是堆叠。.wrapper{显示:flex;flex-direction:row;}主要内容区域和侧边栏的大小非常重要,因为这里显示了重要的信息。主要内容区域应该是侧边栏大小的三倍,这很容易用Flexbox实现。.main{flex:3;margin-right:60px;}.sidebar{flex:1;}总的来说,Flexbox在创建这个简单布局方面非常高效。对于控制列表元素的样式和设置导航和按钮之间的间距特别有用。使用CSSGrid创建布局为了测试效率,让我们使用CSSGrid创建相同的基本布局。Grid模板区域CSSGrid的便利之处在于可以指定模板区域,这也使得定义布局非常直观。采用这种方法,网格上的区域可以由位置项命名和引用。对于这个基本布局,我们需要命名四个项目:headermaincontentsidebarfooter基本的HTML结构

  •      
  •      
  •      

我们在绘制它们时按顺序在网格容器中定义这些区域。grid-template-areas:"headerheader""sidebarmain""footerfooter";目前侧边栏在左侧,主要区域内容在右侧,您也可以根据需要轻松更改顺序。需要注意的一件事:这些名称需要“链接”到样式。所以你需要添加grid-area:header;在标题块中。标头{网格区域:标头;填充:20px0;显示:网格;grid-template-columns:1fr1fr;}HTML结构与Flexbox示例中的相同,但创建网格布局的CSS完全不同。使用CSSGrid布局时,设置display:grid;很重要在容器中。这里声明grid-template-columns是为了保证页面的整体结构。此处grid-template-column已将侧边栏和主要内容区域大小设置为1fr和3fr。fr是网格的小数单位。.container{最大宽度:900px;背景色:#fff;保证金:0自动;填充:060px;显示:网格;网格模板列:1fr3fr;grid-template-areas:"headerheader""sidebarmain""footerfooter";grid-gap:50px;}接下来需要调整header容器中的fr单位。将grid-template-columns设置为1fr和1fr。这样,标题中就有两列大小相同的列,导航项和按钮将非常适合。标头{网格区域:标头;显示:网格;grid-template-columns:1fr1fr;}要放置按钮,我们只需要将justify-self设置为结束。headerbutton{justify-self:end;}导航的位置设置如下:headernav{justify-self:start;}使用Flexbox和CSSGrid创建布局最后,我们结合Flexbox创建更复杂的布局和CSS网格。基本布局如下图所示:这种布局需要在行列方向上保持一致,所以使用CSSGrid来实现整体布局是非常有效的。规划对于布局的实现非常重要。接下来我们一步步看看代码是如何实现的。首先显示:网格;是基本设置,其次,内容块之间的间距可以通过grid-column-gap和grid-row-gap来实现。.container{显示:网格;网格模板列:0.4fr0.3fr0.3fr;网格列间隙:10px;grid-row-gap:15px;}列和行布局标题部分跨越所有列。.header{网格列开始:1;网格列端:4;网格行开始:1;网格行尾:2;background-color:#d5c9e2;}也可以使用速记,startValue和endvalue在同一行,用斜线隔开。像这样:.header{grid-column:1/4;网格行:1/2;background-color:#55d4eb;}构建网格布局后,下一步就是微调内容。NavigationFlexbox非常适合放置标题元素。基本页眉布局需要设置justify-content:space-between。在上面的CSSGrid布局例子中,需要设置justify-self:start;在导航栏上并自我证明:结束;在按钮上,但如果你使用Flexbox,导航间距将变得容易设置。.header{网格列:1/4;网格行:1/2;颜色:#9f9c9c;文本转换:大写;border-bottom:2pxsolid#b0e0ea;填充:20px0;显示:弹性;内容:空格;align-items:center;}列内容网格将所需元素排列在一个方向上,意味着所有元素都在同一水平维度上,通常Flexbox是实现这种布局的更好选择。此外,Flexbox可以动态调整元素的大小。使用Flexbox,您可以将所有元素连接成一条直线,这也确保了所有元素具有相同的高度。带有文本和按钮的行内容下面是包含“额外”文本和按钮的三个区域。Flexbox可以很容易地设置三列的宽度。.extra{网格列:2/4;网格行:4/5;填充:1rem;显示:弹性;弹性包装:包装;边框:1px实心#ececec;justify-content:space-between;}design方法总结在上面的布局设计中,CSSGrid用于整体布局(以及设计的非线性部分)。对于网格内容区域的设计,使用Flexbox进行样式的排序和微调更容易。