移动端网页开发离不开强大的 rem 支持,但由于各尺寸基数未必成比例,以及浏览器的计算偏差,常常会导致 background-position 不够精确,引发 CSS Sprites 错位。下图左侧为 PC 端模拟页面,右侧为移动端实测:
明显可以看出右侧的图标已经错位,图中的问题可以依赖 iconfont 解决,但只局限于单色图标。既要响应式,又得避免 rem 带来的问题,选用百分比是个好方案。
可是……等等,怎么还是错位?甚至完全没办法定位到需要的位置?原来 backgroud-positon 为百分比单位时,其计算方式非常特殊,这里引用 林小志 在 《闲扯 background-position 的单位属性值》 中的一段话:
似乎大概意思是:如果是 14% 84% 的这个值,那么就以图片的 14% 84% 的坐标点,放置在容器的 14% 84% 的位置。那这样理解的话,就是说明,如果是用百分比来作为 background-position 的属性值的话,那么背景图片相对于容器的中心点是随时都在改变的。
于是问题迎刃而解,我们可以整理出以下公式:
n%*W - n%*w = -xn%*H - n%*h = -y
其中 W/H 是整个雪碧图的宽高, w/h 是单个 icon 的大小,而 x/y 则是传统的 px 坐标。基于 gulp.spritesmith + Sass,使用以下模板:
{{#extend "scss"}}{{#content "sprites"}}{{#each sprites}}@mixin {{prefix}}-{{name}} { background-position: 0 {{offset_y}}/({{height}}-{{total_height}})*100%;}{{/each}}{{/content}}{{#content "spritesheet"}}.{{spritesheet.name}} { background-image: url('{{{spritesheet.escaped_image}}}'); background-repeat: no-repeat; background-size: px({{spritesheet.width}}) px({{spritesheet.height}});}{{/content}}{{/extend}}
其中的 px(*) 是一个将 px 转换为 rem 的函数, {{prefix}} 等变量可以在gulpfile.js 中配置。之所以用 @mixin ,是由于 CSS3 动画中可以使用 @include 但不能使用 @extend 。同时也兼顾了元素与伪元素混合使用的情况,避免产生多余的样式。
怎么样?完美解决了吧 :)
(完)

theroottaginanhtmldocumentis.servesasthetop-levellementThateNcapsulatesAllotherContent,确保properdocumentstrumentstrumentsureandbrowserparserparsing。

文章解释说,HTML标签是用于定义元素的语法标记,而元素是完整的单位,包括标签和内容。他们一起工作以构建网页。查拉克计数:159

本文讨论了Lt; Head> &<身体> HTML中的标签,它们对用户体验的影响以及SEO的影响。正确的结构增强了网站功能和搜索引擎优化。

本文讨论了HTML标签,和和关注其语义与表现用途及其对SEO和可访问性的影响之间的差异。

文章讨论了在HTML中指定字符,重点介绍了UTF-8。主要问题:确保正确显示文本,防止乱七八糟的字符,并增强SEO和可访问性。

本文讨论了用于构建和造型Web内容的各种HTML格式标签,强调了它们对文本外观的影响以及语义标签对可访问性和SEO的重要性。

本文讨论了HTML的“ ID”和“类”属性之间的差异,重点是它们的独特性,目的,CSS语法和特异性。它解释了它们的使用如何影响网页样式和功能,并为


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

禅工作室 13.0.1
功能强大的PHP集成开发环境

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

VSCode Windows 64位 下载
微软推出的免费、功能强大的一款IDE编辑器

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

ZendStudio 13.5.1 Mac
功能强大的PHP集成开发环境