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

使用CSSFlexbox打造可靠实用的网站页眉

时间:2023-04-02 19:57:33 HTML

作者:Shadeed译者:前端小智来源:ishadeed再次点赞,微信搜索【大运世界】,B站关注【前端小智】这个没有大厂出身,却有着向上积极的心态。本文已收录到GitHubhttps://github.com/qq44924588...,文章已分类,也整理了很多我的文档和教程资料。最近开源了一个Vue组件,但是还不够完善。欢迎大家一起完善,也希望大家能给个star支持一下。谢谢。github地址:https://github.com/qq44924588...在CSS3还没有普及的时候,制作网站header是一件多么可怕又艰巨的事情?。那个时候Flexbox还是个新鲜事物,我们还得用老办法,比如float、clearfix技术。在今天,情况完全不同了,Flexbox得到了广泛的支持,大大减少了我们的开发工作,同时也为我们提供了更多的可能性。可能有人会说,现在CSS3这么流行,做个网站头还不简单吗??并非如此,因为有一些有趣的挑战需要解决,在本文中我们将介绍其中的一些。简介首先,这里提到的网站标题是用户访问网站时最先看到的内容之一。通常,它包含一个徽标或网站名称和导航链接,如下所示:无论Header的视觉设计如何,关键元素是徽标和导航。Flexbox当flexbox应用于Header元素时,它将使所有子项位于同一行。然后,您需要做的就是应用justify-content来分配它们之间的间距。html品牌css.site-header{显示:弹性;证明内容:空格之间;align-items:center;}很简单,对吧?对于这样的用例,是的,它可能会变得比这更复杂。HeaderWrapper在上面的lago和nav之外没有包含一层wrapper,这在大屏幕上可能会导致问题。从上面可以看出,第一个Header太宽了,因为它没有内包装。与第一个相比,第二个看起来好多了。因此,我们可以对HTML进行如下调整。

flexbox应该移动到.site-header__wrapper元素中。.site-header__wrapper{显示:flex;证明内容:空格之间;align-items:center;}使用flex-wrap在屏幕小的时候水平滚动。如下图,如果不设置flex-wrap:wrap,当屏幕太小时会出现水平滚动。如果你不想这样,你可以添加flex-wrap:wrap`?。多种形式的标题我喜欢使用flexbox的原因是它可以轻松处理标题设计的多种变体。基于之前的页眉设计,我对页眉元素进行了扩展,添加了一些选项,例如添加按钮、搜索输入和更改子项的顺序。HeaderVariation1假设我想在导航链接旁边添加一个按钮。这应该如何处理?我们应该将它添加为导航栏中的链接吗?还是应该与导航分开?我更喜欢这个。Track
在这种情况下,我们不能再使用justify-content:space-between来处理间隙,取而代之的是,我将在nav元素上使用margin-left:auto,这样它就会自动右对齐。将导航和跟踪按钮分开对于移动设备很有用,因为我们需要保留该按钮并在其旁边显示一个移动切换按钮。标头变体2与第一个变体类似,这个变体添加了一个搜索输入,占用了剩余的可用空间。对于flexbox,这可以通过使用flex属性来实现。html
追踪
css.search{flex:1;}现在,搜索输入将填充品牌和导航之间的可用空间。然而,这有一些限制。在较小的视口上,标题将如下所示:搜索输入宽度不应小于此宽度,因为输入和查看全文会很困难。下面有两种解决方案:我更喜欢第二种,因为它不会过早地隐藏导航。一般来说,如果元素不影响布局,我尽量避免隐藏它。标头变体3对于此示例,HTML标记相同,但标头中元素的顺序不同。我们应该怎么做?您可能会想到使用order属性来解决这个问题?htmlTrackcss.site-header{显示:flex;justify-content:space-between;}.nav{order:-1;}有一个问题,thespacebetweenDoesn'tcenterthelogo,itjustspreadsoutthespacebetweentheitems.解决方案是给每个孩子一个flex:1,这将在他们之间分配可用空间。.brand,.nav,.button{flex:1;}这样,由于flex:1,按钮元素变宽了,解决这个问题的唯一方法是将它包裹在另一个元素中。HTML轨道这样我们就可以让下方的logo和按钮居中了。.logo{text-align:center;}/*不要介意这里的命名,它只是为了演示*/.button-wrapper{text-align:end;/*end相当于LTR语言中的right*/}但是,如果添加更多导航链接,这种方法很容易失败。我们需要保证导航链接的数量不超过一定的限制。下面是一个偏离中心的标志的例子?:正如你在上图中看到的,标志没有居中。所以请记住这一点以避免这个意想不到的问题?。使用Flexboxflex-basis构建标题的有用技巧如果一个元素需要在移动设备上占据整个宽度(不能隐藏的重要导航),我使用flex-basis:100%?。从上面的模型来看,做起来可能很简单。其实并不是。通常,header可能有一个内部间距(padding),当我们强制某些东西占满整个宽度时,除非清除padding,否则它不会生效。然而,移除填充是不切实际的,因为它会影响设计中的其他元素。下面这个问题的一种解决方法是:将flex:10100%添加到nav元素。如有必要,更改其顺序。有时,可能还有其他元素,我们希望确保导航排在最后。添加等于宽度等于填充的负边距也会使导航占据整个宽度。向导航添加填充,这会增加一些适当的空间。最后,justify-content:center用于使导航项居中(不重要).nav{flex:10100%;/*[1]*/命令:2;/*[2]*/保证金:1rem-1rem-1rem-1rem;/*[3]*/填充:1rem;/*[4]*/显示:flex;/*[5]*/证明内容:居中;/*[5]*/}Chrome和Firefox支持flexgap属性,现在比以往任何时候都更容易在flex项目之间添加间距。考虑以下标题。要实现如上所示的高亮间距,只需将gap:1rem添加到flex父级即可。没有间隙,我们仍然需要使用间距?的旧方法。/*旧方式*/.brand{margin-right:1rem;}.sign-in{margin-right:1rem;}/*新方式*/.site-header{/*其他flexbox样式*/gap:1rem;代码部署后可能存在的bug无法实时获知。事后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的bug监控工具Fundebug。原文:https://ishadeed.com/article/...每周更新交流文章。可以微信搜索“大千世界”阅读即时更新(比博文早一两篇)。这篇文章在GitHub上https://github.com/qq449245884/xiaozhi已经收录,整理了很多我的文档。欢迎明星和完美。面试可以参考考点。也关注公众号,后台就能看到福利了。你说对了。