长期以来,我一直只使用 px 来设置文本大小。即使这样做明显不酷的时候——那些聪明人关心用 px 设置的文本在 IE 6-8 中无法调整大小的时候。我现在已经切换到使用 em 了。我还没有将所有项目都迁移过来,但我的想法已经转变了。为什么?我最终找到了一些让我现在理解的令人信服的理由。
您需要根据不同的屏幕尺寸更改字体大小
在手机屏幕上看起来不错的正文类型大小,在宽屏桌面布局上看起来就不好了。查看 Trent 的网站,这是一个很好的例子。在大型屏幕上,文本应该稍微大一些。
假设您查看样式表,发现有 50 个不同的 font-size
声明以 px 为单位。这意味着当屏幕尺寸发生变化时,您需要通过媒体查询更改这 50 个地方的字体大小。这 50 个地方都是麻烦点。
首先,对于除最庞大的网站之外的所有网站来说,50 个地方都太多了。但假设这 50 个地方都以 em 为单位。现在,通过媒体查询,您只需要更改 body 的字体大小,然后该更改会级联到整个文档中并相应地调整大小。
body {
font-size: x-large;
}
@media (max-width: 1000px) {
body { font-size: large; }
}
@media (max-width: 500px) {
body { font-size: medium; }
}
无论如何,它都是任意的
尽管设备的屏幕密度不同,但它们确实试图规范“1px”的物理尺寸。真是有趣的事情。“像素”与屏幕上的真实像素无关。它实际上是 一个角度测量单位。
您可能觉得用 px 调整大小更舒服,因为您已经使用它很长时间了,但这并不意味着它更直观。您选择一个在屏幕上看起来正确的数值。它是 1.35 还是 17 有什么关系呢?
相对空间
假设您要在设计中使用图像图标。您希望能够随意地将它们应用于标题。您希望这些图标的大小与标题的大小成比例。您不能像 padding-left: 20px
那样保留空间,因为无论标题的字体大小如何,它始终都是 20px。如果将该填充设置为 em,则可以保留相对于该标题当前 font-size
的空间量。
关系
如果您全面使用 em,则可以开始使用 em 设置诸如 margin
和 padding
之类的内容。这意味着当您将 body 的 font-size
调低时,站点周围的间距也会随之降低。这将您站点的设计与排版联系起来,这是一种主要的阴阳 #协同效应。
小问题
em 仍然有一些令人讨厌的事情,比如级联。如果您决定列表项应为 font-size: 1.1em
,然后嵌套列表,它将级联并增大子列表的字体大小。您可能不希望这样。您可以使用 li li { font-size: 1em; }
来修复它,但这正是那种可能会让您头疼的事情。这就是 rem 派上用场的地方,但由于浏览器支持较少(IE 9+),因此也可能很棘手。
应该是 rem,那是根 em 的路径 :)
我在文章中提到了 rem。我非常喜欢它们。您只需要使用 IE 9+ 或编写回退。(为此编写 mixin)
我经常使用 em 来设置字体大小,但在设置边距和填充时,我坚持使用 px,因为如果涉及不同的字体大小,几乎不可能将不同大小的文本沿边缘对齐。我想 rem 的浏览器支持现在已经足够广泛,成为一个可行的解决方案了。
使用 rem 并带有 px 回退来对齐不同大小的文本;)
抱歉,忽略了您评论的第二部分(但我无法删除我的评论)
我同意 Andy 的观点:字体大小用 em,布局和定位用 px。多年来,这对我来说非常有效。:)
如果您将填充添加到包含文本的父元素中,它可以完美地工作,特别是如果您也使用 border-box 的情况下
我实际上更喜欢
em
而不是rem
,因为(如您上面提到的)在使用em
时,相对空间更容易。此外,通过使用em
,您可以轻松地将行高和底部边距与字体大小绑定(应该这样),而不是与根绑定。祝贺您切换!您的生活(可能)会变得更容易,我知道我的生活确实如此。我的一生也都在使用 px。我将尝试一下。
您还可以编写一些 mixin(假设您正在使用预处理器),这些 mixin 可以为您完成所有转换。然后,您可以在 less 中使用您喜欢的任何单位,并将其编译成正确的 em。
例如:font-size: fsize(17);
然后 fsize 会将该 17 转换为相应的 em/px 值。就我个人而言,我仍然更习惯于像素,因为我获得的每个设计都使用特定的像素大小来设置排版,并且在类型浏览器中查找它并将其粘贴到 CSS 中更容易。
您可以在 body 上设置 font-size: 10px,然后每个 1em 就是 10px。然后像往常一样操作,除了在子 li 元素等上添加覆盖。这就是我开始使用 em 的方式,而无需过多改变我的思维方式。
这拯救了我的 WordPress 和我的生活,以及移动优化方面花费的大量时间,感谢 CSS-Tricks,这是我新的最喜欢的代码网站!!
我也仍然使用像素来设置所有内容,但对 em 的使用很感兴趣。您能否提供一些在现实生活中使用 em 的好例子?据我所知,您链接的这个网站和 Trent Walton 的网站似乎都在使用 px 而不是 em。由于 1em 相对于当前的字体大小,您是否仍然以像素为单位设置字体大小?如果我设置
body { font-size: 16px; }
和h1 { font-size: 2em; }
,那么我的 h1 中的 em 将是多少?16px 还是 32px?据我所知,将您的 h1 大小设置为 2em 且 body 字体大小为 16px 将使您获得相当于 32px 的效果,但我认为最好使用百分比预先设置您的 body,然后在媒体查询中更改该百分比以适应不同的屏幕尺寸。假设 body { font-size: 100%/1.5 } 然后 h1 { font-size: 3em; 16*3=48 } h2 { font-size: 2.25em; 16*2.25=36 }。
然后,如果您转到 @media query (min-width: 30em) 例如,您可以执行 body { font-size: 120% },并且所有标题和段落样式都将随之改变。
谢谢。百分比到底代表什么。如果我设置
body { font-size: 100%; }
,我将其设置为 100% 的什么?对我来说,它看起来像字体应该与整个页面主体的高度相同。显然情况并非如此,但这如何运作?不确定这是否会发布在您上一个问题下,或者因为我无法直接回复您的上一个评论,但将body上的font-size设置为100%会将文本设置为浏览器认为的100%。这通常是16px。所以这就是我们如何得到3em等于48px。这就是Chris Coyier提到事物之间相对间距的原因。如果您更改此百分比,则会更改所有其他内容,因此您只需要更改一个地方即可。如果您想要为移动屏幕设置更小的文本,例如将body的font-size设置为75%。它会自动缩小您使用em单位设置的所有其他文本大小。然后,当您进入“平板电脑”屏幕尺寸时,您可以将body的font-size设置为100%,而在“桌面”尺寸上,如果需要,可以将其设置为120%。以这种方式更改字体大小要容易得多。
您可以使用此rem mixin来调整所有元素的大小,而不仅仅是字体大小:https://github.com/bitmanic/rem
虽然该mixin是一个很酷的解决方案,但我使用类似解决方案遇到的问题是,您的Sass代码稍后会变得难以阅读。所有规则都是由mixin组成的,我更愿意将使用mixin保留用于更大更复杂的CSS规则。
这是一个我编写的Sass函数,它执行相同的操作,但允许您的CSS编写更加规范化。
https://github.com/Anotheruiguy/stipe/blob/master/stylesheets/stipe/typography/_functions.scss
使用此函数,您只需为
$font_size
变量设置一个值即可。例如$font_size: 12
然后在您的Sass中,您可以编写以下规则
.block {
padding: em(30);
line-height: em(16);
}
您的CSS将执行以下操作
css
.block {
padding: 2.5em;
line-height: 1.33333em;
}
em函数接受两个参数,
$target
和$context
。默认情况下,上下文使用$font-size
值,但如果由于em基于大小的复合性质而需要覆盖上下文,只需传入相应上下文的value即可。时间巧合,我现在正在用rems编写我的第一个网站。我一直使用百分比和em来调整页面元素的大小。以及带有px回退的rems字体。
我的项目要求我支持IE7及更高版本,老实说,到目前为止,这个过程相当轻松。在这个项目之前,我长期使用px。我想看看将更改为更灵活的测量系统会遇到什么挑战,但到目前为止,它非常简单。
但实际上我切换到em的原因与字体关系不大。我对像素很满意,它们像一双旧鞋一样舒适。相反,我切换是因为基于em的媒体查询。这是一个参考链接
http://blog.cloudfour.com/the-ems-have-it-proportional-media-queries-ftw/
阅读完并了解基于em的媒体查询的好处后,我认为是时候换双新鞋了。;)
很棒的文章,我将浏览我的项目,寻找那些讨厌的px字体大小,并用大量的em来轰炸它们 :)
我刚刚开始在我的新生产网站上使用em——它实际上很有趣!我的CSS看起来像这样
等等……我发现它确实有助于保持间距的一致性,因为即使我更改了某些特定元素的
h1
的大小,边距也会相应缩小,但仍然与更大的h1
成比例。我正在尝试使用%来设置所有宽度,这需要侧边距/填充也使用%来设置大小——如果我减小屏幕尺寸并增加基本字体大小,这可能会导致问题(上下边距/填充将不相等),但我猜我会在遇到时克服这个障碍!现在我只是喜欢em带来的灵活性!
Becky,我相信你会找到解决你问题的方案,但我不知道这是否真的会成为问题。无论如何,你难道不希望你的上下边距和填充相对于你的字体大小吗?我认为如果你的上下间距与字体大小相关而不是屏幕宽度相关,它将允许更好的垂直节奏。
嘿,Becky,你总可以使用媒体查询在字体大小变小时进行调整。即使大小保持预期的相关性,您也会发现,根据您的屏幕尺寸/视口,有时仍然需要进一步调整。
我使用一个SCSS函数来帮助解决这个问题
这允许我将其与16pt的默认上下文一起使用,但也提供当它继承除16px之外的其他内容时的上下文
我和Doug一样,这是一种有效且干净的方法。与其依赖
rem
在各种浏览器上的兼容性,不如将责任委托给我们的代码。我们是为用户开发网站还是为屏幕尺寸开发网站?
不幸的是,EM方法和响应式样式Web开发假设用户希望他们的屏幕“充满”内容。
但是,在查看像trentwalton.com这样的网站时,我最终会“缩小”,以便我可以在浏览器窗口中看到更多页面——而不仅仅是让窗口的额外空间充满内容,或者在trents网站上,额外空间充满更大的字体——这不是我放大页面的原因——我放大是为了查看更多内容……
作为Web开发人员,我们需要考虑我们如何影响那些喜欢特定查看风格的用户,而不会强迫他们与由于EM类型开发而扩展和增大的设计/布局进行交互。
如前所述,为了获得我喜欢的查看风格(由于trentwalton.com使用EM字体和响应式设计),我需要将缩放比例缩小到50%,这样我就可以完全打开浏览器,而不会被迫看到足以让盲人阅读的字体。
如果作为Web开发人员,我们只关心将尽可能多的内容塞进查看屏幕,我们将继续忽略为我们的观众提供具有逻辑组织的愉悦网站的想法。
我不确定这里是否指出了这一点。Trent的网站当然是一个测试平台,测试什么才是可能的,而不是什么对每个人都最好。坦率地说,我喜欢它,因为我实际上可以坐下来阅读。使用em的目的不是为了打扰用户,而是为了提供一个更灵活的解决方案来解决一个大问题。
许多人不知道的是,您可以将em用于宽度、边距和位置,例如:您有一个固定的导航,它具有字体大小和填充,但没有设置高度。
您想在body中添加一个等于导航高度的填充。
您可以使用em设置body的填充,以便它随字体大小自动更改:D 也适用于文本缩进和浮动图像。
我一直都在框上使用em,它很棒:D
william说得对,
我在code pen示例上展示了如何在em上设置断点,但宽度使用百分比。
如果您更改笔中的基本字体大小,您可以看到它如何影响断点。
@Justin Avery,在我自己没有进行太多测试的情况下,假设您想在媒体查询中调整body的字体大小。如果查询本身使用em(一个好的做法),那么更改body上的字体大小是否会影响断点何时发生,或者媒体查询是否仍然依赖于任何媒体查询之外的基本body字体大小。或者就此而言,更改字体大小是否会影响媒体查询?
实际上,我通过分叉Justin的笔并尝试了一些东西自己回答了我的问题。我将75em断点的body的font-size设置为3em,它没有影响媒体查询的触发。使用em设置的媒体查询似乎与浏览器标准有关?
@christopherisaak
它似乎不影响断点,我想如果它确实影响了,您可能会发现自己陷入页面扩展和收缩的无限循环中。
我在该笔中做了一些事情来显示对其他元素大小的影响,就是将容器的max-width设置为64em。这绝对受body大小的影响。
如果您将
body
的字体大小增加到1.1em,则max-width
将变为64em x 1.1em。我<3 em。对于好奇的读者,这里还有一篇关于em的好文章。
http://v1.jontangerine.com/log/2007/09/the-incredible-em-and-elastic-layouts-with-css
我使用百分比和EM超过十年了,今年我切换到PX,因为几个非常重要的原因
– 使用PX开发的时间大大减少
– 不同浏览器之间的字体和行高看起来更加一致
对于所有刚刚开始使用EM的人,我建议查看雅虎:YUI 2:网格CSS
我同意开发时间减少的说法,但我不知道使用px可以使跨浏览器的字体/行高更加一致。这是真的吗?
是的,这是真的。即使在 WebKit 的不同版本之间,em 的继承方式也不同。
我喜欢你在句子中使用“grok”。需要维基一下。
我之前使用过px,但这篇文章让我重新思考了这个问题。我会在我的模型设计中研究它,看看是否能为我所用。我喜欢rem似乎是一个不错的新的尺寸单位。
你知道最初,CSS em 单位是从大写字母 M 的宽度派生出来的吗,这就是它名称的由来?
如果你问我,这是一个很有趣的事实。
尽管存在与像素相关的明显问题,但我确实使用了像素。但是,我不同意你关于当使用像素时,更改整个网站内容很麻烦的观点。我在body上设置了像素的字体大小(通常是16px),其余的则使用百分比。它非常易于维护,并且浏览器似乎可以进行当前的百分比计算。
当情况相反时,问题就开始了:body使用百分比,其余使用px。
我对于以这种方式提倡使用
em
持谨慎态度。嵌套元素中计算的维护简直是噩梦。我发现,在某些方面,从使用px
迁移到使用em
可能会增加工作量。我发现有用的是,如前所述,使用
rem
并辅以px
备用方案。rem
是一个自由变量,并且可以通过引用默认字体大小的变量来声明所有px
备用方案例如:
$default-unit-px
仅此一项就足以成为所有项目开始使用Sass的理由。
em
对于相对于字体的测量很有用,例如计算按钮内相对于块字体大小的填充。曾经有一段时间,我认为使用
em
值不必要地复杂。我显然已经改变了主意,并且已经使用
em
代替px
相当长一段时间了。首先用于字体,然后用于width
/padding
/margin
/border-radius
等,因为我获得了灵活性。尽管有时出于相同的灵活性原因,我也使用%。最终取决于我想要实现的目标。例如,如果我制作一个按钮/徽标,并且想要使整个内容变大/变小,那么我只需要调整
font-size
,如果其尺寸或填充设置为em
,则所有操作都已完成。但是,当涉及到像博客文章之类的填充时,我必须考虑如何使其随不同的屏幕宽度变化,然后决定是使用
%
值(取决于父元素的width
)还是em
值(取决于元素本身的font-size
)。在这种情况下,我实际上发现自己在小屏幕上使用%
值(因为我希望填充随着屏幕宽度的减小而快速减小),在大屏幕上使用em
值(因为我不想最终在大屏幕上出现巨大的填充)最后,在我意识到自己的网站在缩放时看起来很糟糕之后,我也开始在媒体查询中使用
em
。我当时使用基于px
的媒体查询,从大约800px
开始,我将底部的菜单移到内容的右侧,并为其设置了固定的width
和position: fixed;
。我烦扰了很多人检查它在他们不同的手机上的显示效果,但我从未想到过我应该检查它在我自己的笔记本电脑上放大时的显示效果。直到我读到这篇文章。我感觉就像威尔·E·考约特意识到他抓捕快速兔子的完美计划适得其反了。
好吧,但问题是如果你真的需要巨大的边距/填充,如果你的字体很大(例如,使用页面缩放放大)?我认为不是,因为它会完全破坏设计的显示效果。如果有人想拥有更大的文本,他们并不一定会想要更大的空间。我认为在任何地方都使用em非常非常危险,并且会比使用px更破坏你的设计。但这并不意味着你应该使用后者。rem绝对是最佳选择!
我长期以来一直在努力从PX切换到em,主要是因为经过这么多年,px对我来说已经成为第二天性。Em看起来很随意,而且不一致……
但是,由于我们现在都使用支持变量的预处理器(SCSS),我想知道如果我使用变量设置字体大小和一些边距,并在整个样式中使用变量而不是数字,是否可以取得一些成功,从而更容易调整和更改。
只是一个想法!
我应该在发布这个之前阅读所有人的评论#脸红
这里有一个新手问题。如果我设置我的body字体大小:1em,它将是哪个的1em?如果我也将我的边距/填充设置为em,它将是哪个的em,是body的字体大小吗?
它将是浏览器字体大小(通常为16px)的1em。em单位的边距和填充将基于最后声明的值;如果在body上声明了em单位的边距/填充,并且你在其中声明了1em的字体大小,那么它将根据body计算这些值。如果在同一文档中的段落中声明了较小的em单位字体大小,然后在段落上声明边距/填充,它将根据段落字体大小计算边距/填充。
(如果这能澄清的话!)
我想使用rem/em,但还没有尝试,因为知道有一些问题和复杂情况需要处理……
看起来WebKit中存在一个缩放问题,这会影响在媒体查询中使用em:http://alastairc.ac/2012/01/zooming-bug-in-webkit/
此外,我想知道当em最终以分数大小出现时,webfont渲染是否会受到影响。有谁知道浏览器在使用em时是否会四舍五入到提示大小?我见过一些webfont(即使是流行的付费字体)的丑陋现象,当大小不是整数增量时,它们最终没有TrueType提示。不确定这是否相关。
使用em的一点小技巧。将字体大小设置为62.5%使1em = 10px。这允许更快速地进行现场计算。
例如,
10px = 1em。
20px = 2em。
14px = 1.4 em,依此类推。
以这种方式找出28px是多少em比将字体大小设置为16px或100%容易得多。
…或者为了更完美的像素布局,将字体大小设置为10px以确保安全。
问题在于,并非所有用户都希望你覆盖他们的设置。基本字体大小被“标准化”是有充分理由的,但可以通过用户样式表覆盖。
在响应式环境中,我始终建议你使用基于百分比的字体大小(或者如果你想的话可以使用em,尽管基于百分比的字体大小在旧版浏览器中似乎缩放效果更好)以及基于em的媒体查询。当您真正关心让用户控制自己的样式时,这最有效。
如果你问我,基于像素的媒体查询很糟糕,因为例如当放大时它们会“失效”。由于em相对于字体大小,因此媒体查询响应得更好。
思考的素材;-)
我敢肯定,有一些可以分叉的优秀Codepen可以演示em继承。有谁知道哪一个吗?
对于比例媒体查询也很有用,例如:
@media screen and (max-width:50em) {}
如果你错过了,我们在评论中的更上面部分更多地讨论了比例媒体查询。
这是一个难题。
你分析背后的主要原因是,人们观看小屏幕设备时的距离比观看大屏幕设备时的距离更远,但DPI却没有改变(这里不讨论HiDPI/视网膜屏幕,道理是一样的)。所以实际的视觉DPI(考虑到距离)实际上是不同的。这就是EM发挥作用的地方。但要非常清楚,屏幕的实际尺寸仍然以像素为单位。因此,如果你使用em来调整div的宽度,可以确保你的文本在任何设备上都能正常显示,但在屏幕本身,它与在桌面浏览器上调整大小相比,可能会出现很大的偏差。因为用户的默认字体大小可能不同。
我不知道在移动设备上将“small”作为字体大小是否与桌面上的相同px大小相同。我认为应该不同,因为上述原因,但可能并非如此,因为这会增加网页开发者和最终用户的复杂性,导致网站显示混乱。
在移动设备上,生产力(可读性和速度)远远高于桌面体验。因此,我认为布局应该做出让步,文本始终保持良好的可读性。这样,网页开发者可以根据需要调整他们的东西,而不是相反。
现在我写了这些,我开始怀疑我所说的是否属实。
例如,苹果公司作为移动设备DPI标准的创建者,是否只是确保视觉DPI看起来与桌面上的视觉DPI相同?
这样更有道理。那么你的文章就有点错误了。因为他们已经进行了很好的分析以确保两者相符。
根据我的经验,我经常觉得手机上的字体太小了。例如,在“阅读器”(iOS)中,我会将文本放大一点。
或者说,普遍的臂长使得视觉DPI在全球范围内大致相同?而桌面设备的视觉DPI则差异很大,因为每个人都有不同的桌子和不同的工作方式?
这是一个有趣的话题,我确信苹果公司已经花费了3年的时间来决定iPhone上的精确DPI应该是什么,从而创造了标准。
我当然希望DPI不会像相机上的像素那样。因为它必须谨慎选择才能创建良好的比例。
任何垂直方向的元素我都会使用
em
,任何水平方向的元素我都会使用%
。在一些情况下,当我不希望距离根据屏幕尺寸缩小时,我会在水平方向使用
em
。嗨!!
我同意你的看法…
这正是我在所有我设计的模板中所做的事情.. :)
使用em作为边距宽度:四分之一列宽度除以基本字体大小(四舍五入到最接近的奇数)= em边距宽度
是的,我喜欢使用em来调整字体大小,但我从未找到解决宽度和高度问题的方法。
我之前从px切换到%。
也许我遗漏了什么,但在其好处和功能方面,%和em基本上是否可以互换?
换句话说,是否有理由特别选择em而不是%?如果有,你能否为我提供一些解释其优缺点/差异的文章?谢谢!
它们非常相似,但也有一些区别。
主要区别在于
em
单位从基本正文文本大小获取其相对测量值。如果你将16px设置为
body
大小,那么1em = 16px,20em = 320px,60em = 960px。
如果你将10px设置为
body
大小,那么1em = 10px,20em = 200px,60em = 600px。
另一个问题是
em
与其父级测量值相关(这就是为什么人们一直在建议使用rem
,因为它们始终与根测量值相关)。奇怪的是,使用
em
设置元素的宽度不会影响任何其他也使用em
设置的子元素宽度,也不会影响font-size
。如果你对容器应用
font-size: 2em;
,那么任何使用em
设置的子元素都将加倍,如果宽度使用em
设置,则容器本身也会加倍。实际上,我想澄清一下前面提到的讨论。我多年来一直使用px,发现它非常成功,但是由于显示器开始变得多种多样,像素密度也发生了变化(例如新的MacBook Pro),因此转向使用em或%这种“感觉更专业”的方法变得顺理成章。在过去构建动态网站时,我倾向于使用%而不是em,纯粹是因为我发现结果更令人满意——你不需要依赖父级测量值。我在开发一个实际上是全宽的网站时发现了这一点,并且想要一个可以调整以适应网站宽度的标题,我认为使用em不会那么灵活,所以我使用了%。我正在开发几个网站http://www.reynoldsdigital.com,将来会使用em,所以我会报告更多发现!
我很高兴看到我不是唯一一个多年来一直坚持使用px作为字体大小的人(我尝试过em,但发现很难跟踪)。但是我现在正在使用em,因为我想要我的网站从现在开始具有响应性,就我而言,这是我网站字体最好的方法(我最近开始使用SASS,这使得更容易跟踪实现字体大小所需的em,而无需记住计算以及我与之相关的父元素)。
我已经在几个项目中使用了rem,并且对此感到非常满意。之前我几乎在所有地方都使用em,但嵌套有时会让我抓狂。但是,如果我应该在某些元素上使用em而不是rem,以便空间相应地调整,我仍然在努力。
但另一方面,如果有人增加了字体大小,并不一定意味着他们也想要巨大的边距/填充。因为如果使用rem设置所有内容并使用页面缩放,所有元素和空间也会变大,但不是与元素本身相关,而是与body相关(这是一个很大的区别)。但是,如果你对H1使用em并也使用em设置边距,那么如果你放大,它会变得非常快。因此,rem是首选单位:px过于限制,em过于宽松,不可预测。
我还写了一篇关于此主题的文章:http://www.css3files.com/2012/10/11/relative-is-the-new-absolute-the-rem-unit/
我认为许多人使用px而不是em,现在仍然如此,是因为他们渴望控制。他们不想或不能满足用户设置个人字体首选项的需求。很难编写一个在许多字体大小下都看起来不错的设计。另一个原因是px在跨不同浏览器指定字体大小方面更可靠(假设,不能100%确定)。
我发现有趣的是,许多em实现都与精确像素大小做了完全相同的事情:它们建立一个基线,通常是10像素,然后从那里进行计算,将像素反向转换为em。我们追求的目标与之前相同:控制,并且我们针对这些特定的em值优化我们的设计,我们承认,我们将它们视为px值。
你们中有多少人真正更改了基本em值以获得高度不同的值,然后检查您的设计是否仍然有效?您如何处理0.8em作为10px基线的标题子文本与该10px基线配合得很好,但在使用9或8像素的基线时却崩溃的情况?您如何处理填充和边距实际上并不总是与字体大小成比例相关,并且在响应式设计中有很多边界情况,这种关系根本就崩溃了?
不要误解我的意思,我完全赞成使用em而不是px(我个人使用rem),但我确实认为它仍然存在一些很少讨论的严重问题。我还认为,并非所有人都认同真正目标:跨字体大小工作的设计。这应该是em的意义所在,而不是通过不同的方法实现像素完美。现在,我看到很多人整天都在调整浏览器大小以使其具有响应性。我没有看到人们经常更改字体大小。
这不是对任何人或任何事物的抱怨,我只是在自言自语。
一些非常好的需要思考的观点,谢谢。
所有东西都使用em,除了边框。
你为什么希望你的布局不成比例?这是我对rem的主要问题,它们不成比例地缩放。另一个主要的缺点是需要双倍的CSS来提供向后兼容性。太糟糕了。
如果你在级联方面遇到问题,那么你几乎肯定过于复杂化了你的标记或你的CSS。
em都很好,但在创建布局时要明智地使用它们。
假设你想切换到一个x高度不同的字体。如果它是一个x高度较小的字体,你自然会希望增加字体大小。但由于你使用em来设置宽度、边距、填充等,因此增加字体大小会导致布局放大,并且你的新字体在比例上会看起来更小。
从本质上讲,如果你对所有内容都使用em,请注意,你以后将无法轻松切换到x高度不同的字体。出于同样的原因,我更喜欢在用户可以更改字体的任何设计/模板中使用百分比而不是em。'px'也没有这个问题,但它并不理想。
观看这个线程很有趣。在设计UI时,em优于px显然是正确的做法,但我同意em的工作方式确实很麻烦。所以我们需要寻找更好的工具。
Sass为我们提供了这些工具。查看我整理的这个codepen。它是一个关于如何解决此问题的快速“操作指南”。
http://codepen.io/blackfalcon/full/wlzhv
我主要指的是那些还无法使用 CSS 预处理器的人。他们可能在早期阶段也不会考虑这个问题。是的,它可以通过 CSS 预处理器 [1](不是一个非常优雅的解决方案)来修复,但并不是每个人都能使用 CSS 预处理器。
如果你正在设计一个从本质上和完全(宽度、边距、填充)与排版比例(因此,'em')绑定的界面,你最好不要决定切换到非常不同的字体系列。这是基于 em 的布局的基础之一,它们与字体大小相关联。
字体大小的任何更改都会产生放大/缩小的效果。例如,在基于 em 的布局中,如果你想替换 PT Sans(相当于 13px),例如用 Open Sans(更高的 x 高度,所以现在需要 12px),你会如何在不放大整个布局的情况下做到这一点?SCSS 示例在最后。
附注:我并不是说不应该使用基于 em 的布局。相反,我指出了在创建人们希望通过更改字体来自定义的模板时应该记住的事情。您可以使用智能 CSS 预处理器函数通过比率保持布局固定,或者只是使用 px 或 % 而不产生太多缺点。
[1] http://codepen.io/joe/full/Jqzru(Dale 发布的原始版本的修改版本)。
这个小抱怨是最近一个项目中不得不与 UI 纠缠的结果。
我同意那位说使用 em(或任何相对单位)很麻烦的发帖人。这是 CSS 实现糟糕的另一个领域。过于复杂,为每一个东西计算特异性权重,许多结构就像一个醉酒的小丑用亚拉姆语写的一样奇怪且不直观。
我从前端开始,我很高兴我转向了应用程序方面的事情。这么多年过去了,CSS 仍然是一场火车事故。
不要责怪你的工具。
@Chris Coyier
在 css-tricks.com 上,您大多数尺寸都使用 px。
您是否再次改变了主意,或者您还没有更改代码?
您目前的建议是什么:所有内容都使用 em(边距、宽度、字体大小、媒体查询)?
ZURB Foundation 5 似乎采用了这种方法(使用 rem),但例如 Bootstrap 3 几乎所有内容都使用 px。
很棒的文章。我不记得我什么时候停止在大多数情况下使用 px 了,但已经有一段时间了。话虽如此,我理解为什么大多数人仍然使用它们,并且在现有项目中尤其不急于更改。我想对于这个网站的规模来说,将所有内容都更改为 em 或 rem 将是一项艰巨的任务。但请记住,我们是在为最终用户设计,而不是为其他设计师设计。我怀疑用户会说,嘿,这不是 px,所以它很糟糕。他们不会知道区别。他们可能会也可能不会抱怨大屏幕上的文字太小,这是一个不同的问题。为此,您只需要逐个案例处理。专注于对用户有意义的事情,你就不会出错!
感谢这篇精彩的文章。我遇到一个问题,当我缩小网站时,网站看起来不同(字体大小和边距和填充),因为我同时使用了 em 和 px。但我不知道正确使用它们的确切方法。
我希望即使在超大屏幕上,网站看起来也与我在 15 英寸笔记本电脑上看到的一样。我应该为此制定什么行动计划。