CSS 这些你冷落的属性,其实很好用能极大提升效率
myzbx 2024-12-02 22:38 15 浏览
一个成功的Web App必须有良好的用户体验。当我们谈及改善用户体验时,你会想到什么?
其实,有一点是很容易被开发者忽视的,那就是CSS。我们可以使用一些CSS技巧来改善网页的表现形式、交互细节和可访问性。
而且这些技巧不需要花费太多时间,也不需要消耗服务器资源。你只需要花两个小时学习,然后就可以把它应用到你所有的项目中,并永远改善用户体验。
可点击区域
有时你的按钮很小,这可能导致用户无法准确点击按钮。这种现象经常发生在移动端上。如果用户点击次数太多,没有点击他们想要的按钮,或者点击错误的按钮,会让他们感到非常沮丧。
那么,如何解决这个问题呢?有些开发者可能会说:把按钮做大点。
但网页中元素的大小往往是固定的,我们不能轻易调整一个元素的大小。而且如果按钮太大,感觉很奇怪。
一个更好的解决方案是在不改变按钮原始尺寸的情况下增加其可点击区域。具体来说:我们可以使用伪元素来增加一个元素的可点击区域。
例如,这里有一个按钮。
<button id="btn">btn</button>
然后我们可以为它添加一个伪类。
#btn::before {
content: "";
position: absolute;
top: -20px;
right: -20px;
bottom: -20px;
left: -20px;
}
这时,如果我们点击按钮周围的区域,我们仍然可以触发按钮的点击事件。
事例地址:
https://codepen.io/bytefishmedium/pen/rNYNoRX
平滑滚动
当页面被#链接滚动时,默认效果是这样的。
这种突然的跳跃会让人感到不舒服。为了解决这个问题,我们可以使用这个CSS样式:sroll-behavior: smooth。
事例地址:https://codepen.io/bytefishmedium/pen/NWwWoKL
选择所有文本
我们的网页经常需要提供一些内容供用户选择,如电话号码、地址、标题等。而这些文字应该是一个整体,我们希望当用户点击部分文字时,剩余的文字会被自动选择。
要实现这种效果非常简单,只需使用这个CSS样式:user-select: all 。用户选择的CSS属性控制用户是否可以选择文本。如果它的值是 all,意味着一个元素的所有内容都将被原子化地选择。
事例地址:https://codepen.io/bytefishmedium/pen/xxPxMZO
如果你想在文本被选中后添加一些额外的样式,你可以使用::selection 。::selection CSS伪元素将样式应用于文档中被用户突出显示的部分(比如在文本上点击和拖动鼠标)。
但要记住。只有某些CSS属性可以和::selection一起使用。
- color
- background-color
- text-decoration 及其相关属性
- text-shadow
- stroke-color, fill-color 和 stroke-width
事例地址:https://codepen.io/bytefishmedium/pen/gOXOqMz
Cursor
在不同的场景下使用不同的鼠标样式可以帮助读者感知页面的当前状态,从而改善用户的互动体验。
cursor CSS属性设置鼠标指针在一个元素上时要显示的鼠标指针(如果有的话)。
光标设置应该告知用户在当前位置可以进行的鼠标操作,包括文本选择、激活帮助或上下文菜单、复制内容、调整表格大小,等等。你可以用一个关键词来指定光标的类型,或者加载一个特定的图标来使用(有可选的回退图像和强制性的关键词作为最后的回退)。
例如:
事例地址:https://codepen.io/bytefishmedium/pen/bGYGzRz
有很多光标样式,你可以在MDN文档中找到它们。
Text Overflow
现在我们来看看 text-overflow 的问题。如果一个文本容器的内容是从服务器返回的,或者是由用户输入的,那么就很难预测这个文本会有多长。
如果没有任何预防措施,你可能会写出这样的代码。
<head>
<style>
.container{
border: 2px solid red;
width: 200px;
height: 60px;
}
</style>
</head>
<body>
<div class="container">
<div class="username">bytefish</div>
<p class="profile">FE, UX Designer</p>
</div>
</body>
这个容器有一个固定的宽度和高度,包裹着名字和介绍。
但如果有些用户的简介太长,就会导致文本溢出容器,使页面看起来很糟糕。
在这一点上,我们可以将溢出的文本折叠起来。做到这一点就像添加三行CSS样式一样简单。
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap; 可以使文本不被包起来。然后我们使用overflow: hidden来隐藏溢出的文本。最后,我们使用 text-overflow: ellipsis 在文本的末尾添加一个圆点,向用户表明有一些隐藏的文本。
事例地址:https://codepen.io/bytefishmedium/pen/VwrwgdQ
Image
现在我们来讨论一下图片的风格。网络应用中使用的图片一般由后端提供。你可能已经与后端开发者达成协议,将图片保持在一个固定的尺寸。然后你写下这样的代码。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.img-list {
display: flex;
flex-direction: row;
list-style: none;
}
</style>
</head>
<body>
<ul class="img-list">
<li>
<img src="https://miro.medium.com/fit/c/128/128/1*TyRLQdZO7NdPATwSeut8gg.png">
</li>
<li>
<img src="https://miro.medium.com/fit/c/128/128/1*pKOfOAOvx-fWzfITATgGRg.jpeg">
</li>
<li>
<img src="https://miro.medium.com/fit/c/128/128/1*mXOVdfMwS0IEcjPXiikJkg.png">
</li>
</ul>
</body>
</html>
而网页看起来是这样的。
图片的排列与我们所期望的一样。
通常情况下是没有问题的。但是当我们写代码时,我们不能假设一切都会按照我们的预期发展。我们需要做好充分的准备。如果后端返回的图片不正常,不符合预期的尺寸,可能大也可能小,那么布局就会被打乱。
你可以用这个替换其中一张图片的链接。
https://miro.medium.com/max/1400/0*zQaS0awtSTOO-JYa.jpg
你会发现,页面突然变得杂乱无章。
为了防止这个问题,使我们的页面更加健壮,我们可以设置图片的宽度和高度。这样,我们就不必担心后端返回的图片的大小。
img {
width: 128px;
height: 128px;
}
但上述写法有一个缺点:如果图像本身的长宽比与我们设定的长宽比不一致,图像将被压缩或拉伸。
为了保持图像的原始长宽比,我们可以使用 object-fit: cover 。
img {
width: 128px;
height: 128px;
object-fit: cover;
}
object-fit 的CSS属性设置一个被替换的元素的内容,如<img>或<video>,应该如何调整大小以适合其容器。
如果该值是 cover,那么被替换的内容的大小将保持其长宽比,同时填充元素的整个内容框。如果对象的长宽比与它的盒子的长宽比不一致,那么该对象将被剪掉以适配。
无图片
我们之前讨论的情况都是建立在我们能够得到图片的前提下。但是,在实际应用中,可能由于后端服务的不稳定,或者用户自身的网络信号不好,我们的网页可能无法正确加载图片。
当图片缺失时,浏览器的默认样式是不优雅的,这里我们可以优化它。
我们可以给 img元素添加一个 onerror 事件。如果在加载图片时出现了错误,那么我们可以通过 onerror事件给该元素添加一个样式,并使用404图片。
img 元素:
<img src="https://miro.medium.com/xxx.jpg" alt='fireworks picture' onerror="this.classList.add('error');">
假设这就是我们的404图像:
https://cdn-images-1.medium.com/max/1600/1*we8wfyztsdo12e2Cww6oVA.jpeg
下面是 css 代码
img.error {
display: inline-block;
transform: scale(1);
content: '';
color: transparent;
}
img.error::before {
content: '';
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background: #f5f5f5 url('https://cdn-images-1.medium.com/max/1600/1*we8wfyztsdo12e2Cww6oVA.jpeg') no-repeat center / 100% 100%;
}
这样,当 img 元素中的图片链接无法加载图片时,我们的404图片将被使用。
这里还有一点需要优化。在这种情况下,如果原始图片没有被正确加载,用户就不知道这个图片应该是什么。为了方便用户理解,我们可以将 img 元素的 alt 属性显示在页面上。
img.error::after {
content: attr(alt);
position: absolute;
left: 0;
bottom: 0;
width: 100%;
line-height: 2;
background-color: rgba(0, 0, 0, .5);
color: white;
font-size: 12px;
text-align: center;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
假设img的 alt 属性是这样的。
<img src="https://miro.medium.com/xxx.jpg" alt='Log of Medium' >
事例地址:https://codepen.io/bytefishmedium/pen/vYWYMxG
色彩对比度
当你在设计颜色组合时,你是否考虑过页面的颜色对比?
你需要知道,世界上有很多色盲和色弱用户。如果你的页面的对比度低,可能会导致他们无法正常使用你的产品。无论是出于人文关怀,还是出于留住客户的考虑,你都应该设计出合适的对比度。
WCAG AA规范指出,所有重要的内容需要有4.5:1以上的色彩对比度。
这里有一个对比度检查器的工具。
https://webaim.org/resources/contrastchecker/
事例:
我们也可以使用Chrome DevTool来检查一个元素的颜色对比。然后我们可以发现,Medium的网页也在实践这一原则。
总结
俗话说得好,细节决定成败。如果你的项目有很多可以改善用户体验的细节,你就可以让用户感到舒服,你就有更高的成功概率。
~完,我是刷碗智,新的一年我们一起刷刷刷!
作者:Shadeed 译者:前端小智 来源:medium 原文:https://betterprogramming.pub/10-css-tricks-that-greatly-improve-user-experience-5ee52886ca4b
相关推荐
- LPL第五轮综述:赛场局势风云变幻 强队持续低迷
-
——电玩巴士专稿,欢迎注源转载。LPL第五轮比赛战罢,本周比赛可谓是风云变幻,几支传统强队本周表现普遍不是很理想,几支排名比较靠后的战队则在本周发挥极为亮眼。而且本周的比赛也非常戏剧性,时常出现各种逆...
- 百公里4.6秒奥迪S5运动版3.0T性能改装
-
作为在欧洲与奔驰E63AMG,宝马M5分庭抗礼的另一款德系运动四门轿跑车——奥迪S5,虽然名气并不如之前的双B大,但是凭借着奥迪一贯推崇的充满动感的设计、激动人心的动力与操控、卓越的制造工艺完美相结...
- 比翼双飞秀“基”情!《英雄联盟》S5新赛季双排冲分组合推荐
-
随着《英雄联盟》S5新赛季的不断逼近,很多小伙伴也在努力提升自己排位的隐藏分,而大伙最关注的估计还是S5赛季如何去快速冲分。相比普通的单排,开5黑是个不错的选择,不过在难以集齐5位小伙伴的情况下,双排...
- S5新版本强势上分ADC英雄 及使用技巧分析
-
很多玩家都会问,S5什么英雄好上分?那么这次小编就为大家带来S5最好上分的ADC英雄,以及ADC的使用技巧。要问一个军事团队里最酷的位置是什么,特种兵毫无疑问第一啦。无论是远程狙击(女警、金克斯)还是...
- S5决赛阵容之KOO 上单Smeb的登顶之役
-
S5全球总决赛终于进入了决赛阶段,这意味着S5赛季终于到了自己的巅峰时刻,而在这个巅峰时刻为我们表演终极对决的两支队伍是SKT战队以及KOO战队。在这场胜者便可以登顶S5的最终之战上,双方无论是看上去...
- 英雄联盟S5小组抽签盘点:有人欢喜有人愁
-
S5小组赛分组抽签在周末的时候已经完成了,这次的分组为了确保公正还特意请了3位没有进入S5的电竞明星来抽签,结果是有人欢喜有人愁。下面就让小编带大家一起来盘点一下这次小组有可能会爆出的冷门吧。S5抽签...
- SUS631化学成分特性及适用范围(sus316的材料成分)
-
sus631特性及适用范围:添加铝的沉淀硬化型钢种,用作弹簧、热圈及计器部件。sus631/17-7PH/S17700/0Cr17Ni7Al沉淀硬化型不锈钢日本SUS631(17-7PH国标0Cr17...
- 4年仅掉价不到3成!这辆45万的奥迪S5纯素车,值不值得买?
-
哈喽~大家好,检车家老司机又和你们见面啦!我是你们的老朋友建国,我曾是一枚修过7年车的汽车修理工,现在是一名专业的二手车检测技师,更是一枚事故车劝退师。欢迎收看本期二手车检测趣事,今天给大家带来的车型...
- 新旗舰什么样?7张图全方位预测三星Note4
-
夏天已经快结束了,这也就意味着今年上半年的重磅机型已经悉数发布完毕,我们先要做的就是过一段平淡的日子然后期待着下半年的重磅产品陆续登场。三星GALAXYNote4无疑是下半年最值得我们期待的机型之一,...
- 拍照为主兼顾视频,将来可能接单,索尼a7m3和松下s5怎么选?
-
最近有小伙伴问了我下面这么一个问题。想买一台全画幅微单,但是预算有限,看好了两款机型,他的问题是:拍照为主兼顾视频,将来可能接单,索尼a7m3和松下s5怎么选?这个问题,我就想到这个网友也是做过一些功...
- GolangWeb框架Iris项目实战-JWT和中间件(Middleware)的使用EP07
-
前文再续,上一回我们完成了用户的登录逻辑,将之前用户管理模块中添加的用户账号进行账号和密码的校验,过程中使用图形验证码强制进行人机交互,防止账号的密码被暴力破解。本回我们需要为登录成功的用户生成Tok...
- 对焦大提升!松下S5M2 3.0固件&S5M2X 2.0固件详细测试
-
前段时间,松下发布了最新的S5M2和S5M2X的固件,并且这是一个比较大的更新,对对焦性能、防抖性能有较大提升,还新增了录制代理文件以及预连拍功能。这都是超级实用的功能,松下不愧是固件大厂!自动对焦升...
- 三星Galaxy S5安卓5.0测试版曝光,总算好看点了
-
三星GalaxyS5安卓5.0测试版曝光,总算好看点了出处:IT之家原创(远洋)2014-10-3123:11:04评论IT之家报道,显然,三星正在将自家的TouchWiz用户界面适配谷歌最...
- 松下S5M2对焦变换功能讲解#松下相机
-
大家好,今天和大家分享松下相机一个非常好用的功能:对焦变换。这个功能通常用于近景的视频拍摄,比如像现在画面里出现的人偶、象棋,看到视频的对焦点非常平顺的依次从画面的上方移动到中间,再移动到靠下的位置。...
- 松下 S5M2的几个重要功能(拍照篇) 松下 S5M2的几个重要功能
-
赶在618结束之前,我来讲几个松下S5二代的重要功能,也许其中的某一项功能会成为你购买它的理由。·首先来讲一讲高分辨率模式,这是一个非常好用的功能。使用松下S52代的左边波轮,可以直接进入这个模式。进...
- 一周热门
- 最近发表
- 标签列表
-
- HTML 基础教程 (29)
- HTML 简介 (30)
- HTML 响应式设计 (31)
- HTML URL 编码 (32)
- HTML Web 服务器 (31)
- HTML 表单属性 (32)
- HTML 音频 (31)
- HTML5 支持 (33)
- HTML API (36)
- HTML 总结 (32)
- HTML 全局属性 (32)
- HTML 事件 (31)
- HTML 画布 (32)
- HTTP 方法 (30)
- 键盘快捷键 (30)
- CSS 语法 (35)
- CSS 选择器 (30)
- CSS 轮廓 (30)
- CSS 轮廓宽度 (31)
- CSS 谷歌字体 (33)
- CSS 链接 (31)
- CSS 中级教程 (30)
- CSS 定位 (31)
- CSS 图片库 (32)
- CSS 图像精灵 (31)