响应式Web中的高级设计,你是认真的吗?
时间:2023-03-15 15:44:58
科技观察
本文已获得原作者AhmadShadeed授权翻译。看到这个标题😂,高度响应式设计?你是认真的?由于“响应式网页设计”,通常会在多种宽度和设备尺寸上检查浏览器。我们一般通过减小宽度来调整水平方向的响应性,但是我很少看到通过减小浏览器的高度来考虑垂直方向的响应性。说到这里,智米的心里可能会有一点波动,带着一些疑问:浏览器的高度需要降低吗?是的,让我们继续讨论。我们在设计网站的时候,不依赖实际数据就做假设是不好的,横向和纵向测试的责任也很重要。为什么要测身高?对于设计师来说,不合理的假设是破坏网站设计的最重要因素之一。例如,假设用户肯定是在使用屏幕的全宽和全高来浏览网站是不正确的。相反,我们需要考虑最坏的情况。吉米,你明白吗?事实上,并非所有用户都按照我们期望的方式使用浏览器。当我降低浏览器高度时,我发现网站看起来很糟糕。浏览器DevTools调整浏览器(垂直)大小并不是更改视口高度的唯一方法。当我们打开浏览器DevTools时,它也会占据浏览器的高度。上图中的箭头区域代表当前视口的高度。对于较小的笔记本电脑屏幕,我们只会看到网页的一小部分。真正的问题是:我们能否在视口高度较小时增强用户体验?是的,有可能,让我们来看看。在CSS中垂直思考作为设计师和开发人员,我们中的一些人只关注设计中的宽度变化而忽略视口高度变化。例如,在开发中,UI提供了随不同视口宽度而变化的特定组件。但是不同的视口高度呢?在上图中,我们有一个根据视口高度进行调整的导航菜单。.如果视口尺寸较小(例如iPhone5),导航项将显示为两列网格。这种思维方式通常会被丢弃,或者在有人说要这样做之前不会进行优化。可以使用CSS以两种不同的方式实现上述要求:VerticalmediaqueriesViewportunitsVerticalMediaQueries知乎知乎CSSusingwidthmediaqueries。@media(min-width:700px){.element{/*dosomething..*/}}较少使用的是检查视口高度的垂直媒体查询。@media(min-height:500px){.element{/*dosomething..*/}}/*or*/@media(orientation:landscape){.element{/*dosomething..*/}}视口单位使用视口单元有助于为用户提供更好的体验。例如,根据视口高度控制元素之间的垂直间距。.hero__title{margin-bottom:calc(10px+5vh);}如上图,对于较大的屏幕(比如iMac27英寸),底部边距会变得很大。我们有两种方法来解决边距过大的问题。媒体查询CSS比较功能第一种方式(媒体查询)支持比较多。如果屏幕很大,我们需要为下边距设置一个最大值。@media(min-width:2200px){.hero__title{margin-bottom:40px;}}另一种方法是使用CSSclamp()比较函数,它返回一个值范围。....在视口高度变小之前,一切看起来都很好。该部分的高度将不足以容纳插图和文本内容。因此,它将与页面上的其他部分重叠。请注意插图如何与下面的部分重叠。发生这种情况是因为有足够的垂直空间。看看HTML和CSS。
css.hero{height:100vh;}.hero__thumb{flex:00550px;width:550px;}针对此类问题,这里有几种解决方法:和高度)而不是只设置宽度,缺少高度会继续出现这个问题。高度:仅当视口高度大于700像素时为100vh(媒体查询值可能因上下文而异)。我们可以将两者结合起来以获得更强大的解决方案。.hero__thumb{width:400px;height:300px;object-fit:contain;/*Toavoidcompressingtheimage*/}@media(min-height:700px){.hero{height:100vh;}好了,现在我们同意使用垂直媒体查询更好。但是,使用100vh是有风险的,因为即使我们限制插图的大小,我们也可能无法对文本内容做同样的事情。如果文本内容变长,同样的问题又会出现,见下图:为了解决这个问题,我们可以使用min-height代替height。这样,如果内容变长,高度将扩大而不是重叠。@media(min-height:700px){.hero{min-height:100vh;}}FixedHeader在滚动时固定标题不是坏事,但是,我们只想确保垂直空间足够好Fixthe标题,这样体验会更好。这是一个关于风景的网站。这里我们可以看到,当高度太小的时候,固定高度会整体占用很大的空间。这对用户来说真的很重要吗?在大多数情况下这并不重要,因为普通用户不会缩小来查看这样的网站。目前,如果我们要优化,也是可以的。思路是通过垂直媒体查询判断高度小于一定高度时,将固定定位改为静态定位。@media(min-height:700px){.site-header{/*position:fixedorposition:sticky*/}}隐藏不太重要的元素我在Twitter.com的导航栏上注意到了这种模式。这个想法是将垂直媒体查询与Priority+模式结合起来。当视口高度调整大小时,不太重要的元素(书签和列表)被删除并附加到“更多”菜单,这是垂直媒体查询的一个很好的用例。.nav__item--secondary{display:none;}@media(min-height:700px){.nav__item--secondary{display:block;}}减少间距-nav如果我们的网站有侧边栏或者侧边栏,当视口高度时小,我们可以减少一些导航项之间的垂直间距,这也增强了整体设计。.nav__item{padding-top:4px;padding-bottom:4px;}@media(min-height:700px){.nav__item{padding-top:10px;padding-bottom:10px;}}我们知道的模态框,mod状态盒子至少应该水平居中。但是,有时我们需要垂直居中。我们一般采用如下方案:.modal__body{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:500px;}但是,当内容变长,模式垂直填充屏幕,用户将无法滚动它。这种情况有几个原因:模态框没有高度,模态垂直居中(这样会导致问题更快出现)下面是固定的css:.modal__body{position:absolute;left:50%;top:3rem;transform:translateX(-50%);width:500px;min-height:200px;max-height:500px;overflow-y:auto;}@media(min-height:700px){.modal__body{top:50%;transform:translate(-50%,-50%);}}请注意,我使用了最小高度和最大高度。min-height是为了让模态即使内容很短也能好看,max-height是用特定的值来限制它的高度,而不是添加一个固定的高度。总结在设计体验时,最好考虑宽度和高度。垂直调整浏览器大小可能有点奇怪,但它有其优点。在这篇文章中,我们讨论了垂直测试的重要性,以及我们是如何做的,最后提出了一些示例和用例,希望对智米有用。作者:AhmadShadeed译者:FrontendXiaozhi来源:ishadeed原文:https://hadeed.com/article/responsive-design/本文转载自微信公众号「大运世界」,可关注以下二维码代码。转载请联系大千世界公众号。