- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想跳上图标字体火车,但很快就被渲染器推迟了。当图标位于具有百分比宽度或自动居中的 div 内时,图标可能会对齐到半个像素,导致它呈现模糊。
我联系了 Icomoon 支持人员,他们向我介绍了一个 bug,该 bug 是 Chrome 特有的。 ( https://bugs.chromium.org/p/chromium/issues/detail?id=426333 ) 不幸的是,我能够在所有主要浏览器中重现该问题。
我得到的建议是避免 auto margin 并只使用 float left,这在当今世界是不可能的。即使我这样做,我仍然会与百分比宽度发生冲突。
问题
有什么方法可以防止模糊发生吗?我想使用 inline-svgs 是一种选择吧?但这有点违背了图标字体的全部目的。或者有一个脚本可以将所有内容四舍五入到整数像素,但这听起来也很极端。
重现问题的步骤
我在Icomoon上制作了一套24px的图标,下载了一套,里面有一个demo.html。然后我只是给演示的主要包装器,并给它一个固定的宽度和边距 0 auto。然后通过调整浏览器宽度,我可以使图标模糊或清晰。
Chrome
火狐
歌剧
边缘
Internet Explorer
最佳答案
如果有人可以提供证据证明这是理想的浏览器实现中实际发生的事情,但这个答案是基于你在问题中提到的偶数/奇数像素值,我认为这是最可能的原因。
在基本层面上,图标字体是矢量。这允许图标缩放而不考虑字体大小并且不会变得模糊。然而,当矢量的边缘与像素的边缘不对齐时,就会出现模糊。
从Font Awesome Icon Design Tips Guide窃取,你可以看到下面的两个演示。顶部图像是一个矢量,带有一堆 1px
宽线,间隔 1px
,但它们偏移了 0.5px
。当在没有放大的情况下呈现为像素时,这会导致它们变得模糊,因为像素必须采用 50% 的线条颜色和 50% 的背景颜色。
Vector edges that don't line up with the pixel edges. (The blue representing the 0.5px offset from the pixel edge).
另一方面,下图的矢量排成一行,因此线条/条形的任一边缘都与像素的边缘对齐。因此,在像素级渲染时,没有像素必须合并背景和线条颜色。
Correctly aligned vectors
要查看更多示例来更详细地解释这一点,我建议阅读完整指南,其中也解释了清晰的对 Angular 线边缘。
浏览器现在必须处理高 DPI/视网膜屏幕,这使得“居中”文本变得非常容易,因为每个 CSS px
宽度有 2 个实际像素;因此,您可以每隔 0.5px
绘制清晰的线条。
根据您的图像判断,您使用的是常规 DPI 屏幕来查看字体,因此当浏览器被迫以 0.5px
值呈现图标时,矢量的边缘位于像素的中间,而不是中间,这意味着该像素必须占据背景颜色的 50% 和图标颜色的 50%,从而导致边缘模糊。
至于解决方案,遗憾的是我手头没有较低分辨率的显示器来测试。您的目标是使图标的边缘呈现在像素边界的边缘,这需要一些操作,但您可以尝试以下操作:
display: inline-block
而不是文本通常具有的默认 display: inline
。 (不太可能奏效,但可能奏效)。div
中,刚好大于可以居中的图标大小。div
方法,请尝试文本左对齐或居中对齐的区别。关于css - 自动居中的 div 内的图标字体呈现模糊/清晰基于浏览器宽度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41161375/
你好,我是 Cone。 首先,我们思考一个问题。 为什么会有操作系统? 在我们教科书上会提到分时系统、批处理系统等等现代操作系统前的中间产物,也会讲到管理硬件的功能,但似乎没有讲到为什么有
假设我只想清除顶部的所有条目,清除 Map 的 Map 的最合适方法是什么 -关卡 map ? Map> nestedMap; 方法A:仅清除顶层 map 。 nestedMap.clear();
我时不时遇到一个问题,我不确定解决方案是什么。 我有一个 2 列布局(左边是 strit,然后是主要区域)。在主要区域,我有时会有一个次要的 2 栏布局(例如 - 对于新闻部分,那里有一个图标,然后是
我有以下代码: Created Created .clearfix:after{ clear: both; bdy: "."; display
有没有办法CLS单行输出?我不相信 CLS 有任何开关,所以也许更好的问题是: 有什么办法吗 保留所有以前的输出以供重复使用? 或 捕获当前显示的输出(就像通过标记和复制一样)? 我只是想通过实时反馈
我有一个流式布局。当布局足够宽时,一些 div(.one 和 .two)可以全部水平排列在一条线上。 当布局最终被挤压时,右侧 float 的 div (.two) 最终会出现在多行上。有没有一种方法
我面临着一个我真的不知道从哪里开始解决的问题,所以我希望这个问题不要太宽泛。 我正在制作并在屏幕上应用它,我将有一个包含一些信息的矩形(假设它是一个 )并且我需要用另一个矩形覆盖那个矩形,所以当用户
我的 UITableView 跨越 iPhone View 的大小,并有一个 tableHeaderView 保存附加内容。想要标题清晰,表格的其余部分白色,我将表格的背景颜色设置为清晰,并在 Vie
我一直在使用 ImageMagick,但它产生的结果非常模糊。 convert -density 300 ../images/favicons/procensus.svg -background tr
我有手动数据的工作项目,但我想在我的项目中添加 json 解析。我认为我需要帮助。 (必须是实时解析,如果可能的话,新的item添加时会自动释放) 我的 TableView 代码 - (void)sc
我正在制作一个响应式网站。我有 3 个 div (.block),我需要将它们水平放置在一起。 当屏幕足够宽时,这很容易实现。但是,当我使浏览器更窄时,第三个 div (3) 换行到下一行,但我想要的
如何在 Swift 3 中使这个 UITableView 和它的单元格清晰。 我已经完成了前面的线程,但我仍然得到一个白色背景。 正如您从我的代码中看到的,我已经尝试了提到的各种方法: overrid
当我使用 为了显示图标,它在谷歌浏览器中看起来非常清晰锐利。然而,当我在 Firefox 或 Internet Explorer 中打开 svg 时,图标看起来很模糊。 这些浏览器似乎将图标呈现为半像
我是一名优秀的程序员,十分优秀!