当前位置: 首页 > 科技观察

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

时间:2023-03-15 08:54:08 科技观察

本文已获得原作者Shadeed授权翻译。在CSS3还没有普及的时候,创建网站标题是一项可怕而艰巨的任务。那个时候Flexbox还是个新鲜事物,我们还得用老办法,比如float、clearfix技术。在今天,情况完全不同了,Flexbox得到了广泛的支持,大大减少了我们的开发工作,同时也为我们提供了更多的可能性。可能有人会说,现在CSS3这么流行,做个网站头还不简单吗??不一定,因为有一些有趣的挑战需要解决,我们将在本文中介绍其中的一些。简介首先,这里提到的网站标题是用户访问网站时最先看到的内容之一。通常,它包含一个徽标或网站名称和导航链接,如下所示:无论Header的视觉设计如何,关键元素是徽标和导航。Flexbox当flexbox应用于Header元素时,它将使所有子项位于同一行。然后,您需要做的就是应用justify-content来分配它们之间的间距。html品牌css.site-header{display:flex;justify-content:space-between;align-items:center;}够简单吧?对于这样的用例,是的,它可能会变得比这更复杂。HeaderWrapper在上面的lago和nav之外没有包含一层wrapper,这在大屏幕上可能会导致问题。从上面可以看出,第一个Header太宽了,因为它没有内包装。与第一个相比,第二个看起来好多了。因此,我们可以对HTML进行如下调整。

flexbox应该移动到.site-header__wrapper元素内。.site-header__wrapper{display:flex;justify-content:space-between;align-items:center;}当屏幕较小时使用flex-wrap水平滚动。如下图,如果不设置flex-wrap:wrap,当屏幕太小时会出现水平滚动。如果你不想这样,你可以添加flex-wrap:wrap`?。多种形式的标题我喜欢使用flexbox的原因是它可以轻松处理标题设计的多种变体。基于之前的页眉设计,我对页眉元素进行了扩展,添加了一些选项,例如添加按钮、搜索输入和更改子项的顺序。HeaderVariation1假设我想在导航链接旁边添加一个按钮。这应该如何处理?我们应该将它添加为导航栏中的链接吗?还是应该与导航分开?我更喜欢这个。在这种情况下,我们不能再使用justify-content:space-between来处理间隙。相反,我将在nav元素上使用margin-left:auto,这样它会自动向右对齐。将导航和跟踪按钮分开对于移动设备很有用,因为我们需要保留该按钮并在其旁边显示一个移动切换按钮。标头变体2与第一个变体类似,这个变体添加了一个搜索输入,占用了剩余的可用空间。对于flexbox,这可以通过使用flex属性来实现。html
轨迹
css.search{flex:1;}现在,搜索输入将填充品牌和导航之间的可用空间。然而,这有一些限制。在较小的视口上,标题将如下所示:搜索输入宽度不应小于此宽度,因为输入和查看全文会很困难。下面有两种解决方案:我更喜欢第二种,因为它不会过早地隐藏导航。一般来说,如果元素不影响布局,我尽量避免隐藏它。标头变体3对于此示例,HTML标记相同,但标头中元素的顺序不同。我们应该怎么做?您可能会想到使用order属性来解决这个问题?html轨道
css.site-header{display:flex;justify-content:space-between;}.nav{order:-1;}这有一个问题,logo之间的空间不会居中,它只是分散了项目之间的空间。解决方案是给每个孩子一个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]*/order:2;/*[2]*/margin:1rem-1rem-1rem-1rem;/*[3]*/padding:1rem;/*[4]*/display:flex;/*[5]*/justify-content:center;/*[5]*/}Chrome之间的间距并且Firefox支持flexgap属性,现在比以往任何时候都更容易在flex项目之间添加间距。考虑以下标题。要实现如上所示的高亮间距,只需将gap:1rem添加到flex父级即可。没有间隙,我们仍然需要使用间距?的旧方法。/*旧方式*/.brand{margin-right:1rem;}.sign-in{margin-right:1rem;}/*新方式*/.site-header{/*Otherflexboxstyles*/gap:1rem;}作者:Shadeed译者:前端小智来源:ishadeed原文:https://ishadeed.com/article/website-headers-flexbox/关注。转载本文请联系大千世界公众号。