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

简介: 前端优秀实践不完全指南

本文其实应该叫,Web 用户体验设计提升指南。


一个 Web 页面,一个 APP,想让别人用的爽,也就是所谓的良好的用户体验,我觉得他可能包括但不限于:


  • 急速的打开速度
  • 眼前一亮的 UI 设计
  • 酷炫的动画效果
  • 丰富的个性化设置
  • 便捷的操作
  • 贴心的细节
  • 关注残障人士,良好的可访问性
  • ...


所谓的用户体验设计,其实是一个比较虚的概念,是秉承着以用户为中心的思想的一种设计手段,以用户需求为目标而进行的设计。设计过程注重以用户为中心,用户体验的概念从开发的最早期就开始进入整个流程,并贯穿始终。


良好的用户体验设计,是产品每一个环节共同努力的结果。


除去一些很难一蹴而就的,本文将就页面展示、交互细节、可访问性三个方面入手,罗列一些在实际的开发过程中,积攒的一些有益的经验。通过本文,你将能收获到:


  1. 了解到一些小细节是如何影响用户体验的
  2. 了解到如何在尽量小的开发改动下,提升页面的用户体验
  3. 了解到一些优秀的交互设计细节
  4. 了解基本的无障碍功能及页面可访问性的含义
  5. 了解基本的提升页面可访问性的方法


页面展示



就整个页面的展示,页面内容的呈现而言,有一些小细节是需要我们注意的。


整体布局



先来看看一些布局相关的问题。

对于大部分 PC 端的项目,我们首先需要考虑的肯定是最外层的一层包裹。假设就是 .g-app-wrapper。


<div class="g-app-wrapper">
    <!-- 内部内容 -->
</div>


首先,对于 .g-app-wrapper,有几点,是我们在项目开发前必须弄清楚的:


  1. 项目是全屏布局还是定宽布局?
  2. 对于全屏布局,需要适配的最小的宽度是多少?


对于定宽布局,就比较方便了,假设定宽为 1200px,那么:


.g-app-wrapper {
    width: 1200px;
    margin: 0 auto;
}


利用 margin: 0 auto 实现布局的水平居中。在屏幕宽度大于 1200px 时,两侧留白,当然屏幕宽度小于 1200px 时,则出现滚动条,保证内部内容不乱。

3ca2418b6ef046d7b2635a2e10a4610c_tplv-k3u1fbpfcp-watermark.gif


对于现代布局,更多的是全屏布局。其实现在也更提倡这种布局,即使用可随用户设备的尺寸和能力而变化的自适应布局。

通常而言是左右两栏,左侧定宽,右侧自适应剩余宽度,当然,会有一个最小的宽度。那么,它的布局应该是这样:


<div class="g-app-wrapper">
    <div class="g-sidebar"></div>
    <div class="g-main"></div>
</div>


.g-app-wrapper {
    display: flex;
    min-width: 1200px;
}
.g-sidebar {
    flex-basis: 250px;
    margin-right: 10px;
}
.g-main {
    flex-grow: 1;
}


865f09c168c04c808104b8540277a6f7_tplv-k3u1fbpfcp-watermark.gif


利用了 flex 布局下的 flex-grow: 1,让 .main 进行伸缩,占满剩余空间,利用 min-width 保证了整个容器的最小宽度。


当然,这是最基本的自适应布局。对于现代布局,我们应该尽可能的考虑更多的场景。做到:


4a1120cd519248cb8f706c63d28176be_tplv-k3u1fbpfcp-watermark.png


底部 footer



下面一种情形也是非常常见的一个情景。


页面存在一个 footer 页脚部分,如果整个页面的内容高度小于视窗的高度,则 footer 固定在视窗底部,如果整个页面的内容高度大于视窗的高度,则 footer 正常流排布(也就是需要滚动到底部才能看到 footer)。


看看效果:


image.gif


嗯,这个需求如果能够使用 flex 的话,使用 justify-content: space-between 可以很好的解决,同理使用 margin-top: auto 也非常容易完成:


<div class="g-container">
    <div class="g-real-box">
        ...
    </div>
    <div class="g-footer"></div>
</div>
.g-container {
    height: 100vh;
    display: flex;
    flex-direction: column;
}
.g-footer {
    margin-top: auto;
    flex-shrink: 0;
    height: 30px;
    background: deeppink;
}

Codepen Demo -- sticky footer by flex margin auto


当然,实现它的方法有很多,这里仅给出一种推荐的解法。


处理动态内容 - 文本超长



对于所有接收后端接口字段的文本展示类的界面。都需要考虑全面(防御性编程:所有的外部数据都是不可信的),正常情况如下,是没有问题的。


d465e773d8d84906ab73cd92d7e1e522_tplv-k3u1fbpfcp-zoom-1.png


 

但是我们是否考虑到了文本会超长?超长了会折行还是换行?

cb60f1b3201140dfbe209ce6314ddb21_tplv-k3u1fbpfcp-zoom-1.png


对于单行文本,使用单行省略:


{
    width: 200px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}


bb95d86d3c664799a70f27de9b73f725_tplv-k3u1fbpfcp-zoom-1.png


当然,目前对于多行文本的超长省略,兼容性也已经非常好了:


{
    width: 200px;
    overflow : hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
}


6c5697f5f04440af94a2a584d7259eec_tplv-k3u1fbpfcp-zoom-1.png


处理动态内容 - 保护边界



对于一些动态内容,我们经常使用 min/max-width 或 min/max-height 对容器的高宽限度进行合理的控制。


在使用它们的时候,也有一些细节需要考虑到。

譬如经常会使用 min-width 控制按钮的最小宽度:


.btn {
    ...
    min-width: 120px;
}


105a4921dba74801943595494321ba58_tplv-k3u1fbpfcp-zoom-1.png


当内容比较少的时候是没问题的,但是当内容比较长,就容易出现问题。使用了 min-width 却没考虑到按钮的过长的情况:

ebec14ad3ed144a89faa33a456349f74_tplv-k3u1fbpfcp-zoom-1.png



这里就需要配合 padding 一起:

.btn {
    ...
    min-width: 88px;
    padding: 0 16px
}


借用Min and Max Width/Height in CSS中一张非常好的图,作为释义:


4bb7075934fe41fcaf08145a00ff7e34_tplv-k3u1fbpfcp-zoom-1.png



0 内容展示



这个也是一个常常被忽略的地方。


页面经常会有列表搜索,列表展示。那么,既然存在有数据的正常情况,当然也会存在搜索不到结果或者列表无内容可展示的情形。


对于这种情况,一定要注意 0 结果页面的设计,同时也要知道,这也是引导用户的好地方。对于 0 结果页面,分清楚:


  • 数据为空:其中又可能包括了用户无权限、搜索无结果、筛选无结果、页面无数据
  • 异常状态:其中又可能包括了网络异常、服务器异常、加载失败等待


不同的情况可能对应不同的 0 结果页面,附带不同的操作引导。


譬如网络异常:

110c59469b8d460fbbf5fc4f3d512c78_tplv-k3u1fbpfcp-zoom-1.png


或者确实是 0 结果:


0985420f58b643ed9450deef3c7b6b87_tplv-k3u1fbpfcp-zoom-1.png



关于 0 结果页面设计,可以详细看看这篇文章:如何设计产品的空白页面?


小小总结一下,上述比较长的篇幅一直都在阐述一个道理,开发时,不能仅仅关注正常现象,要多考虑各种异常情况,思考全面。做好各种可能情况的处理。


图片相关



图片在我们的业务中应该是非常的常见了。有一些小细节是需要注意的。


给图片同时设置高宽


有的时候和产品、设计会商定,只能使用固定尺寸大小的图片,我们的布局可能是这样:

f963c109bf47406bb21b9a8e4e70e1af_tplv-k3u1fbpfcp-zoom-1.png


对应的布局:

<ul class="g-container">
    <li>
        <img src="http://placehold.it/150x100">
        <p>图片描述</p>
    </li>
</ul>
HTML 复制 全屏
ul li img {
    width: 150px;
}


当然,万一假设后端接口出现一张非正常大小的图片,上述不加保护的布局就会出问题:

目录
相关文章
|
2月前
|
缓存 前端开发 JavaScript
优化前端性能:从理论到实践的全面指南
前端性能优化是提升用户体验的关键环节,但这一过程常被技术细节和优化策略所困扰。本文将系统地探讨前端性能优化的理论基础及实践技巧,包括关键性能指标、有效的优化策略、以及常见工具的应用。我们将从最基本的优化方法入手,逐步深入到高级技巧,为开发者提供一套全面的性能提升方案,以实现更快的加载时间、更流畅的用户交互体验。
|
5天前
|
前端开发 JavaScript 开发者
利用代码分割优化前端性能:高级技巧与实践
【10月更文挑战第2天】在现代Web开发中,代码分割是优化前端性能的关键技术,可显著减少页面加载时间。本文详细探讨了代码分割的基本原理及其实现方法,包括自动与手动分割、预加载与预取、动态导入及按需加载CSS等高级技巧,旨在帮助开发者提升Web应用性能,改善用户体验。
|
3天前
|
前端开发 JavaScript 开发者
深入解析前端开发中的模块化与组件化实践
【10月更文挑战第5天】深入解析前端开发中的模块化与组件化实践
7 1
|
27天前
|
缓存 前端开发 JavaScript
优化前端性能:关键策略与实践
随着互联网技术的发展,用户对网页加载速度和交互体验的要求日益提高,前端性能优化成为提升用户体验和网站竞争力的关键。本文探讨了前端性能优化的重要性和七大关键策略,包括压缩资源文件、利用浏览器缓存、减少HTTP请求、异步加载、使用CDN、优化CSS和JavaScript执行及第三方脚本优化,并提供了实践案例,帮助开发者构建更快、更高效的网站。
|
7天前
|
前端开发 JavaScript API
前端开发趋势与实践:拥抱Web Components
前端开发趋势与实践:拥抱Web Components
20 4
|
7天前
|
前端开发 JavaScript 安全
前端开发趋势与实践:构建现代Web应用的探索
【10月更文挑战第1天】前端开发趋势与实践:构建现代Web应用的探索
16 2
|
9天前
|
存储 前端开发 JavaScript
前端技术深度探索:从基础到现代框架的实践之旅
前端技术深度探索:从基础到现代框架的实践之旅
22 2
|
28天前
|
移动开发 缓存 前端开发
构建高效的前端路由系统:从原理到实践
在现代Web开发中,前端路由系统已成为构建单页面应用(SPA)不可或缺的核心技术之一。不同于传统服务器渲染的多页面应用,SPA通过前端路由技术实现了页面的局部刷新与无缝导航,极大地提升了用户体验。本文将深入剖析前端路由的工作原理,包括Hash模式与History模式的实现差异,并通过实战演示如何在Vue.js框架中构建一个高效、可维护的前端路由系统。我们还将探讨如何优化路由加载性能,确保应用在不同网络环境下的流畅运行。本文不仅适合前端开发者深入了解前端路由的奥秘,也为后端转前端或初学者提供了从零到一的实战指南。
|
17天前
|
缓存 前端开发 JavaScript
优化前端性能:关键策略与实践
在现代web开发中,前端性能优化至关重要。本文探讨了提升用户体验、转化率及降低服务器负载的关键策略,包括压缩资源文件、利用浏览器缓存、减少HTTP请求、异步加载、使用CDN、优化CSS/JavaScript执行、优化第三方脚本等,并介绍了Webpack/Rollup模块打包、HTTP/2特性、性能预算及Lighthouse/WebPageTest测试工具的应用。通过这些方法,可显著提高网站性能。
|
2月前
|
缓存 前端开发 JavaScript
深入探讨前端性能优化:从理论到实践
在现代Web开发中,前端性能优化已成为提升用户体验的关键因素。本文将探讨前端性能优化的基本理论,并结合实际案例,深入分析如何通过优化代码、资源管理和用户交互,显著提升网站和应用的响应速度。我们将介绍从理论到实践的多种方法,包括资源压缩、异步加载、缓存机制及工具的使用,帮助开发者构建更加高效和用户友好的前端应用。