前端优秀实践不完全指南 (3)

这个时候,我们可以借助 object-fit,它能够指定可替换元素的内容(也就是图片)该如何适应它的父容器的高宽。

ul li img { width: 150px; height: 100px; object-fit: cover; }

利用 object-fit: cover,使图片内容在保持其宽高比的同时填充元素的整个内容框。

image

object-fit 还有一个配套属性 object-position,它可以控制图片在其内容框中的位置。(类似于 background-position),m默认是 object-position: 50% 50%,如果你不希望图片居中展示,可以使用它去改变图片实际展示的 position 。

ul li img { width: 150px; height: 100px; object-fit: cover; object-position: 50% 100%; }

image

像是这样,object-position: 100% 50% 指明从底部开始展示图片。这里有一个很好的 Demo 可以帮助你理解 object-position。

CodePen Demo -- Object position

考虑屏幕 dpr -- 响应式图片

正常情况下,图片的展示应该没有什么问题了。但是对于有图片可展示的情况下,我们还可以做的更好。

在移动端或者一些高清的 PC 屏幕(苹果的 MAC Book),屏幕的 dpr 可能大于 1。这种时候,我们可能还需要考虑利用多倍图去适配不同 dpr 的屏幕。

正好,<img> 标签是有提供相应的属性 srcset 让我们进行操作的。

<img src='http://www.likecs.com/photo@1x.png' srcset='photo@1x.png 1x, photo@2x.png 2x, photo@3x.png 3x' />

当然,这是比较旧的写法,srcset 新增了新的 w 宽度描述符,所以更好的写法是:

<img src = "photo.png" srcset = “photo@1x.png 300w, photo@2x.png 600w, photo@3x.png 1200w, >

利用 srcset,我们可以给不同 dpr 的屏幕,提供最适合的图片。

上述出现了一些概念,dpr,srcset 属性,不太了解的可以移步 前端基础知识概述

图片丢失

好了,当图片链接没问题时,已经处理好了。接下来还需要考虑,当图片链接挂了,应该如何处理。

处理的方式有很多种。最好的处理方式,是我最近在张鑫旭老师的这篇文章中 -- 图片加载失败后CSS样式处理最佳实践 看到的。这里简单讲下:

利用图片加载失败,触发 <img> 元素的 onerror 事件,给加载失败的 <img> 元素新增一个样式类

利用新增的样式类,配合 <img> 元素的伪元素,展示默认兜底图的同时,还能一起展示 <img> 元素的 alt 信息

<img src="http://www.likecs.com/test.png" alt="图片描述" onerror="this.classList.add('error');"> img.error { position: relative; display: inline-block; } img.error::before { content: ""; /** 定位代码 **/ background: url(error-default.png); } img.error::after { content: attr(alt); /** 定位代码 **/ }

我们利用伪元素 before ,加载默认错误兜底图,利用伪元素 after,展示图片的 alt 信息:

image

OK,到此,完整的对图片的处理就算完成了,完整的 Demo 你可以戳这里看看:

CodePen Demo -- html">图片处理

交互设计优化

接下来一个大环节是关于一些交互的细节。对于交互设计,一些比较通用的准则:

Don’t make me think

符合用户的习惯与预期

操作便利

做适当的提醒

不强迫用户

过渡与动画

在我们的交互过程中,适当的增加过渡与动画,能够很好的让用户感知到页面的变化

譬如我们页面上随处可见 loading 效果,其实就是这样一种作用,让用户感知页面正在加载,或者正在处理某些事务。

前端优秀实践不完全指南

滚动优化

滚动也是操作网页中非常重要的一环。看看有哪些可以优化的点:

滚动平滑:使用 scroll-behavior: smooth 让滚动丝滑

使用 scroll-behavior: smooth,可以让滚动框实现平稳的滚动,而不是突兀的跳动。看看效果,假设如下结构:

<div> <nav> <a href="#1">1</a> <a href="#2">2</a> <a href="#3">3</a> </nav> <div> <section>First section</section> <section>Second section</section> <section>Third section</section> </div> </div>

不使用 scroll-behavior: smooth,是突兀的跳动切换:

scrol

给可滚动容器添加 scroll-behavior: smooth,实现平滑滚动:

{ scroll-behavior: smooth; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdfyg.html