发布于 2026-01-06 1 阅读
0

解决方案和组件通常使用 JavaScript 管理,但使用纯 CSS 构建。

解决方案和组件通常使用 JavaScript 管理,但使用纯 CSS 构建。

我以前编写代码界面时,会定义结构、组件和 CSS,也习惯于考虑动画、微交互和功能性交互。这个阶段让我对一些方面产生了疑问。

在我职业生涯的早期,我并不太关注性能,相反,设计师们总是要求我为各种动画大量使用 JavaScript。
如今,性能至关重要,因为绝大多数流量都来自移动设备,如果一些简单的动画只用 JavaScript,而另一些动画却仍然需要添加状态类,那就太愚蠢了。

我想和大家分享一些我从网上学到的、并在一些项目中设计和使用的变通方法。

返回顶部

这是用 JavaScript 实现的最没用的动画之一,仅仅是为了利用滚动条的流畅效果。它只是一个简单的链接!

所以如果你通常这样写:

$("#toTop").click(function () {
   $("html, body").animate({scrollTop: 0}, 1000);
})
Enter fullscreen mode Exit fullscreen mode

然后你可以写:

<style>
html {
  scroll-behavior: smooth;
}
</style>

<a href="#top">To top</a>
Enter fullscreen mode Exit fullscreen mode

下拉菜单

通常,该组件的工作方式是点击其标签来打开和关闭面板,以便在面板中选择内容。
为了在不使用 JavaScript 的情况下实现这种功能,我们需要对组件进行结构化处理,使面板在移动端获得焦点或在桌面端鼠标悬停时显示。因此,面板必须嵌套在组件内部,并带有相应的visibility: hidden属性。

Scrollsnap

最近,CSS3 引入了这项新的规范,并支持跨浏览器模式。https ://caniuse.com?search
=Scroll%20snap 这能显 著节省移动设备的计算资源!
只需定义几个属性,就能让容器.child内的元素.parent以流畅的方式流动,并将其与容器的起始位置关联起来。

.parent {
  scroll-snap-type: mandatory;
  scroll-snap-points-y: repeat(300px);
  scroll-snap-type: y mandatory;
}

.child {
  scroll-snap-align: start;
}

Enter fullscreen mode Exit fullscreen mode

模态

是的……这是可以实现的,只是不需要 JavaScript。
我从https://codepen.io/felipefialho找到了一个清晰的示例,它突出了开发这个组件有多么简单。
如果使用 JavaScript,我们需要点击按钮button来添加一个类modal,而只使用 CSS,我们可以将按钮用作一个link指向模态框的元素:

.modal:target:before {
  display: block;
}
.modal:target .modal-dialog {
  ...
}
Enter fullscreen mode Exit fullscreen mode

文章来源:https://dev.to/akatamer/solutions-and-components-usually-management-with-javascript-built-in-pure-css-1ka6