Modernizr 如何帮助您实现 CSS 回退
已发表: 2021-04-05作为网页设计师,我们经常被鼓励利用 CSS 提供的最新和最强大的功能。 这样做有很多令人信服的理由。 CSS Grid 和 Flexbox 等技术可以快速处理常见布局,而 CSS 动画则增加了移动性和交互性。 这只是冰山一角。
但是,实现这些功能有时会以浏览器兼容性为代价。 对于仍然有大量用户使用旧版浏览器的网站,或者对于非常新的功能,存在将一些人排除在外的风险。
从哲学上讲,一些设计师对此很满意——这没关系。 但是为这些功能实现后备可能比您想象的要容易。 这些故障保护措施提供了对特定布局或设计元素的合理复制,并且与旧版 Web 浏览器兼容。
今天,我们将向您展示如何利用 Modernizr 特征检测库来实现此目的。 开始了!
什么是 Modernizr?
Modernizr 是网页设计师多年来一直依赖的便捷工具之一。 它是一个可以定制的库,可以在网页加载时“检测”(实际上,它正在运行测试)特定功能。 从那里,它将 CSS 类添加到页面的<HTML>
元素,允许设计人员根据库找到的内容来定位他们的代码。
在我们的例子中,我们将使用它来检测 CSS Flexbox。 但是,它也能够查找与 HTML 和 JavaScript 相关的功能。 例如,您可以使用它来确定浏览器是否支持 HTML5。 如果没有,可以使用可用的 HTML5 shiv 脚本将其升级为代码,可以这么说。
真正好的是您可以自定义 Modernizr 以满足您的项目需求。 他们网站的用户界面将让您只挑选您想要检测的项目。 做出选择后,单击“构建”按钮以生成自定义的可下载包。
我们的构建
为了我们的目的(并且为了简单起见),我们正在构建我们的 Modernizr 包来检测 Flexbox。 我们还将选择缩小代码并添加 CSS 类。
第 1 步:设置演示
为了演示这一切是如何工作的,需要几个文件——两者都可以在 GitHub 上找到:
- flexgrid.css – 这是我们简单的 CSS Flexbox 网格系统。 您会注意到它具有用于不同对齐方式和列宽的类。 此外,还有一组特殊的
.no-flexbox
类也使用老式 CSS 浮点数。 这将帮助我们在旧版浏览器中创建类似的布局样式。 - modernizr-custom.js - 上述脚本将检测当前浏览器是否支持 CSS Flexbox。
接下来,我们将要创建一个新的 HTML 文档,它调用<head>
区域中的上述两个文件。 此外,该文档还需要一个示例 CSS Flexbox 布局和一些内容。
您可以随意使用下面的演示文件进行实验。 它包含一个简单的 3 列布局,以及一些小的视觉增强(稍后会详细介绍)。
第 2 步:在现代浏览器中查看 HTML 文档
现在是时候看看我们的演示在浏览器中的样子了。 首先,让我们使用支持 Flexbox 的现代 Web 浏览器。
至少,我们怀疑它支持 Flexbox。 我们怎么能确定呢? 这就是 Modernizr 要做的事情。
在我们的例子中,我们要查看演示页面的源代码,特别是<HTML>
元素。 如果元素中添加了一个flexbox
类,我们就知道我们的浏览器支持该功能。 继续并在您的浏览器中查看页面源 - 我们将等待。
课堂在哪里?
如果您尝试查看页面的完整源代码,您可能已经注意到<HTML>
元素不包含类。 别担心——这是正常的。
这是因为该类是在运行时添加的,在Modernizr 测试所选功能之后。 因此,它不会出现在完整的源代码中。
使用浏览器的开发者工具
相反,打开您的 Web 浏览器的开发人员工具(按键盘上的F12按钮)。 这将提供对<HTML>
元素的准确查看。
在这里,我们使用的是最新版本的 Firefox 开发者版。 据 Modernizr 称,它支持 CSS Flexbox。 耶!
第 3 步:在旧版浏览器中测试 CSS 回退
在我们的现代浏览器中,一切看起来都很棒。 但是遗留软件呢?
我们的样式设置为在不支持 Flexbox 的浏览器中使用 CSS 浮动。 这个后备应该允许我们创建一个多列布局,即使是在古老的设置上。
根据 Can I use 的说法,Flexbox 的部分支持最早可以追溯到 Internet Explorer 10、Firefox 2、Chrome 4 和 Safari 3.1。 自从这些浏览器被广泛使用以来,已经过去了很多年。 然而,特别是 IE 仍然到处挂着。
Modernizr 可以配置为测试部分支持——但它会变得混乱。 它会导致编写更多的 CSS 回退,以考虑许多不同的情况。 这不是很有效。 因此,我们正在我们的测试中寻找全有或全无的支持。
让我们看看我们在 IE 10 中的演示(通过浏览器测试服务),看看会发生什么。
不是太寒酸。 我们的第三列被推到下一行,可以调整。 但是 Flexbox 支持呢?
快速浏览一下 IE 的开发者工具可以看出,我们的<HTML>
元素显示了一个no-flexbox
类。 这意味着这里不支持Flexbox,并且正在使用 CSS 后备。
修复 CSS 浮动的布局
我们的后备 CSS 浮动不会与我们所做的视觉增强配合。 第三列被推到第二行,看起来不是很好。
这是因为浮动为我们之前在样式表中设置的列宽添加了填充和边框。 另一方面,Flexbox 可以在不增加整体列宽的情况下调整这些项目。 因此结果不同。
我们可以做一些不同的事情来纠正这种情况。 我们可能会减少列的宽度,甚至缩小列之间的边距。 让我们尝试将列宽从30.66%
减少到28.66%
。
有效! 我们的列现在可以愉快地显示并且与 Flexbox 版本相当相似。 除了一些间距差异之外,这至少可以在旧浏览器中使用。 我们可以进入并进行进一步的更改以更接近原始版本。
检测浏览器功能并进行相应调整
虽然我们的演示侧重于检测 CSS Flexbox,但 Modernizr 可以做得更多。 它可以查找其他常见功能,例如 HTML Canvas、SVG 支持、CSS Grid 和一系列其他有用的花絮。
这个想法是,一旦你知道用户的浏览器能做什么,你就可以调整你的代码来效仿。 这使得采用更新的 CSS 规范(例如,一个不那么令人担忧的过程)。
也许您不需要在每个实例中都使用回退。 但是很高兴知道在 Modernizr 的帮助下实现它们很容易。