我应该在CSS中使用px还是rem作为值单位?

538

我正在设计一个新的网站,希望它与尽可能多的浏览器和浏览器设置兼容。我正在考虑使用哪种度量单位来设定字体和元素的大小,但是找不到结论性的答案。

我的问题是:在我的CSS中应该使用px还是rem

  • 目前我知道,使用px不能与在其浏览器中调整基础字体大小的用户兼容。
  • 我放弃了em,因为相比rem,它们更难维护,而且会出现级联的问题。
  • 有些人认为rem是分辨率无关的,因此更受欢迎。但其他人说,大多数现代浏览器会等比缩放所有元素,因此使用px也没有问题。

我提出这个问题是因为有很多不同的意见,关于在CSS中最理想的距离测量方式是什么,我不确定哪一种最好。


5
这是一个有争议、需要辩论和观点的问题,不属于 Stack Overflow 擅长回答的技术性问题。顺便说一句,正确的答案是“不”。☺ - Jukka K. Korpela
10个回答

577

简述:使用px

事实

  • First, it's extremely important to know that per spec, the CSS px unit does not equal one physical display pixel. This has always been true – even in the 1996 CSS 1 spec.

    CSS defines the reference pixel, which measures the size of a pixel on a 96 dpi display. On a display that has a dpi substantially different than 96dpi (like Retina displays), the user agent rescales the px unit so that its size matches that of a reference pixel. In other words, this rescaling is exactly why 1 CSS pixel equals 2 physical Retina display pixels.

    That said, up until 2010 (and the mobile zoom situation notwithstanding), the px almost always did equal one physical pixel, because all widely available displays were around 96dpi.

  • Sizes specified in ems are relative to the parent element. This leads to the em's "compounding problem" where nested elements get progressively larger or smaller. For example:

      body { font-size:20px; } 
      div { font-size:0.5em; }
    

    Gives us:

      <body> - 20px
          <div> - 10px
              <div> - 5px
                  <div> - 2.5px
                      <div> - 1.25px
    
  • The CSS3 rem, which is always relative only to the root html element, is now supported on 99.67% of all browsers in use.

观点

我认为每个人都同意,将页面设计得适合所有人,并考虑视觉障碍者是好的。其中一种考虑(但不是唯一的!)是允许用户放大站点文本,以便更容易阅读。

起初,提供用户缩放文本大小的唯一方法是使用相对大小单位(例如em)。这是因为浏览器的字体大小菜单只是更改根字体大小。因此,如果您使用px指定字体大小,则在更改浏览器的字体大小选项时它们不会缩放。

现代浏览器(甚至是不那么现代的IE7)都将默认缩放方法更改为简单地放大一切,包括图像和框尺寸。基本上,它们使参考像素变大或变小。

是的,某人仍然可以更改其浏览器默认样式表以调整默认字体大小(相当于旧式字体大小选项),但这是一种非常神秘的方法,我敢打赌没有人这样做。(在Chrome中,它被隐藏在高级设置、Web内容、字体大小下。在IE9中,它甚至更加隐蔽。您必须按Alt键,然后转到查看、文本大小。)使用浏览器主菜单中的缩放选项(或使用Ctrl+ / - /鼠标滚轮)要容易得多。

如果我们假设大多数用户使用缩放选项来缩放页面,则我认为相对单位基本上无关紧要。当所有内容都以相同的单位指定时(图像都以像素处理),开发页面会更容易,而且您不必担心复合问题。(“我被告知不需要数学”——需要处理计算1.5em实际上是多少像素。)

使用相对单位作为字体大小的唯一问题之一是,用户调整字体大小可能会破坏您布局所做出的假设。例如,这可能导致文本被剪切或过长。如果您使用绝对单位,则无需担心意外的字体大小破坏布局。
因此,我的建议是使用像素单位。我将所有内容都使用px。当然,您的情况可能有所不同,如果您必须支持IE6(愿RFC的众神怜悯您),则仍然需要使用em。

52
你应该使用像素和rem单位。这样新的浏览器将使用rem,而旧的浏览器将会回退到像素(比如WordPress 2012所做的)。你可以使用Sass或Less来自动化这个过程,只需要输入像素值,它就会自动输出像素和rem单位。 - TechRemarker
90
我对这个观点的主要异议在于,当在响应式断点上调整字体大小和间距时,您可以在html元素上设置新的字体大小,而您在rem中设置的每个尺寸都会自动调整;而使用px,则需要为想要调整的每个尺寸编写新规则。当然,即使使用rem,可能仍然需要进行更多的调整,但通过巧妙的规划,您可以免费获得大量比例缩放。将特定的盒子间距测量与字体、轻型代码以及更少的复杂性/更易维护相结合,对我来说,rem无疑是一个明显的优胜者。 - RobW
1
我不理解在什么情况下需要这样做: div { font-size:0.5em; } 看起来非常糟糕... font-size 应该只给文本标签...你只需要处理例如: li { font-size:1.2em } li li { font-size:1.em } 在 DIV 标签中,你要给 font-size 百分比的值,以便准确缩放 DIV 中的文本.... 而且使用类,而不是 "div"。 - SLV
35
假设没有用户更改字体大小设置是相当大胆的假设。这种说法应该有数据支持,否则只会排斥一些已经很脆弱的用户(严重视力受损者)。如果可能的话,请使用rem而不是px。在我看来,应用程序应该能够独立地缩放它们的界面和字体大小。"只使用px"是许多开发人员希望听到的关于em问题的答案,但这并不是Web的正确答案。 - Olivvv
26
希望能够跟进这个事情。Rem现在的支持率已经达到95%以上了。 - Union find
显示剩余14条评论

442

我想表扬josh3736的答案,他提供了一些出色的历史背景。虽然表述清晰,但自这个问题被提出以来,CSS的情况已经发生了改变。当这个问题被提出时,px是正确的答案,但今天不再是这样了。


简而言之:使用rem

单元概述

历史上,px单位通常代表一个设备像素。随着设备像素密度越来越高,这对于许多设备(例如苹果的Retina显示屏)不再适用。

rem单位表示 em大小。它是与:root匹配的任何内容的font-size。在HTML的情况下,它是<html>元素;对于SVG,它是<svg>元素。每个浏览器*中的默认font-size16px

关于使用px

互联网上的大多数CSS示例都使用px值,因为它们是事实上的标准。理论上可以使用ptin和其他各种单位,但是它们在处理小值时效果不佳,因为您很快就需要使用分数,这些分数输入更长,且更难以理解。

如果你想要一个细边框,使用 px 可以使用 1px,而使用 pt 需要使用 0.75pt 来保持一致的结果,这并不是很方便。

使用 rem

rem 的默认值为 16px 并不能成为其使用的强有力的理由。写 0.0625rem 比写 0.75pt 更糟糕,那么为什么会有人使用 rem 呢?

rem 相对于其他单位有两个优势。

  • 尊重用户喜好
  • 可以更改 rem 的表现 px

尊重用户喜好

浏览器缩放多年来发生了很大变化。历史上,许多浏览器只会扩大字体大小,但是当网站意识到他们美丽的像素完美设计在用户缩放时会出现问题时,这种情况迅速改变了。此时,浏览器会缩放整个页面,因此基于字体的缩放已经不再适用。
尊重用户的意愿并不是不可能的。仅因为浏览器默认设置为16px,并不意味着任何用户不能更改其首选项为24px32px以纠正低视力或视力差(例如屏幕反光)。如果您的单位基于rem,则任何使用更高字体大小的用户都将看到比例更大的网站。边框将更大,填充将更大,边距将更大,所有内容都会流畅地缩放。
如果您基于rem设置媒体查询,您还可以确保用户看到的网站适合他们的屏幕。在宽度为640px的浏览器上将font-size设置为32px的用户,实际上将看到您网站中320px宽浏览器上16px大小的用户所看到的内容。在使用rem时,响应式网页设计(RWD)不会有任何损失。

更改表现为px的值

因为rem基于:root节点的font-size,如果要更改1rem表示的内容,只需更改font-size即可:

:root {
  font-size: 100px;
}
body {
  font-size: 1rem;
}
<p>Don't ever actually do this, please</p>

无论你做什么,都不要将:root元素的font-size设置为px值。
如果你将html上的font-size设置为px值,那么你就没有办法恢复用户的首选项。
如果你想改变rem的表现值,使用%单位即可。
这个数学问题相当简单。 :root的表现字体大小为16px,但我们想将其更改为20px。我们只需要用某个值乘以16即可得到20
设置你的方程式:
16 * X = 20

并解决 X 的值:

X = 20 / 16
X = 1.25
X = 125%

:root {
  font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>

将所有内容都以20的倍数进行并不是很好,但一个常见的建议是使rem的表现大小等于10px。这个魔法数字是10/16,即0.62562.5%

:root {
  font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>

现在的问题是,页面中其余部分的默认字体大小设置得太小了,但有一个简单的解决方法:使用rembody上设置font-size

:root {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}
<p>I'm the default font-size</p>

重要的是要注意,在进行这个调整后,rem 的表现值为 10px,这意味着你可能在 px 中编写的任何值都可以通过增加小数点来直接转换为 rem
padding: 20px;

变成

padding: 2rem;

您选择的显式字号取决于您自己,因此,如果您希望,就没有理由不能使用以下内容:
:root {
  font-size: 6.25%;
}
body {
  font-size: 16rem;
}

并且 1rem 等于 1px

所以,你现在懂了,这是一种尊重用户意愿的简单解决方案,同时避免了过度复杂化你的 CSS。

等等,那么有什么问题吗?

我知道你会问这个问题。尽管我想假装rem是魔法并可以解决所有问题,但仍然有一些需要注意的问题。在我看来,并没有太大的问题,但我还是要提出来,这样你就不能说我没有警告你。

媒体查询(使用em

rem 的第一个问题涉及媒体查询。考虑以下代码:

:root {
  font-size: 1000px;
}
@media (min-width: 1rem) {
  :root {
    font-size: 1px;
  }
}

这里的rem值取决于媒体查询是否适用,而媒体查询又取决于rem的值,所以到底发生了什么?

媒体查询中的rem使用font-size的初始值,不应该(请参见Safari部分)考虑对:root元素的font-size进行的任何更改。换句话说,它的实际值始终为16px

这有点烦人,因为这意味着你必须进行一些小数计算,但我发现大多数常见的媒体查询已经使用了16的倍数值。

|   px | rem |
+------+-----+
|  320 |  20 |
|  480 |  30 |
|  768 |  48 |
| 1024 |  64 |
| 1200 |  75 |
| 1600 | 100 |

此外,如果您正在使用CSS预处理器,则可以使用mixin或变量来管理媒体查询,这将完全掩盖该问题。
Safari
不幸的是,Safari存在已知的错误,其中对于:root字体大小的更改实际上会更改计算出的媒体查询范围的rem值。如果在媒体查询中更改:root元素的字体大小,则可能会导致一些非常奇怪的行为。幸运的是,修复方法很简单:使用em单位进行媒体查询
上下文切换
如果您在各种不同的项目之间切换,则rem的表观字体大小可能具有不同的值。在一个项目中,您可能会使用看起来像10px的表观大小,在另一个项目中,表观大小可能是1px。这可能会导致混淆和问题。
我唯一的建议是坚持使用62.5%rem转换为表观大小为10px,因为在我的经验中,这更为常见。

共享 CSS 库

如果你正在编写 CSS,将其用于一个你无法控制的网站上,例如嵌入式小部件,那么很难知道 rem 的大小。如果是这种情况,请继续使用 px

如果你仍然想使用 rem,可以考虑发布一个 Sass 或 LESS 版本的样式表,并提供一个变量来覆盖 rem 大小的缩放。


* 我不想吓到任何人使用rem,但我无法正式确认每个浏览器都默认使用16px。你知道,有很多浏览器,其中一个浏览器稍微偏离一点,比如说15px18px,这并不难。然而,在测试中,我没有看到一个浏览器在使用默认设置的系统中使用默认设置时具有16px以外的任何值。如果您发现这样的例子,请与我分享。


3
在 JavaScript 中,您大多会使用计算后的像素值。我的建议是尽可能使用切换类来管理元素的外观。对于一些情况,您无法避免使用 JS 计算像素值,因此最好的方法是从 DOM 状态中计算像素值。 - zzzzBov
3
1rem等于1px会因Chrome的最小字体大小而引起问题:https://dev59.com/iFcP5IYBdhLWcg3wd5qm https://stackoverflow.com/questions/24200797/chrome-will-increase-the-font-size-when-zooming-out - Paul
13
你关于我们应该使用rem的论点是为了适应选择使用非标准缩放方法的用户,但在同一篇文章中你又说我们不必考虑那些只支持px的浏览器的2%的人,这是为什么呢?使用缩放网页的人所占比例很小,并且其中还有缩放并更改根字体大小的人的比例更小,可能远少于2%的人。这讲不通吗?你说我们应该照顾极少数的人,同时忽略使用rem的2%的人。 - ICW
6
你甚至列举了多个只在使用rem时出现而在使用px时从未出现的问题。这是一个令人信服的帖子,说明你应该不要使用rem。在整篇文章中,真正没有一个令人信服的理由不使用“px”。 - ICW
2
值得注意的是,Firefox/Gecko在更改字体大小时不会缩放边框宽度的px值,但如果您在rem中定义边框宽度,则这些值将被缩放。在某些情况下,这可能会影响您想要使用的单位。Chrome/Blink总是同时缩放两者。 - Mikko Rantalainen
显示剩余7条评论

58

这篇文章相当详细地描述了使用pxemrem的优缺点。

作者最终得出结论,最好的方法可能是同时使用pxrem,先声明px用于旧浏览器,再重新声明rem用于新浏览器:

html { font-size: 62.5%; } 
body { font-size: 14px; font-size: 1.4rem; } /* =14px */
h1   { font-size: 24px; font-size: 2.4rem; } /* =24px */

2
是的,这就是我最初对rem感兴趣的原因。有两件事我不明白:他只建议将其作为字体(而非元素)的度量单位,并且如果我理解正确,使用rem的唯一真正原因是因为IE用户可以调整文本大小? - user1218247
1
@Samuel 我也这么认为。如果不是因为文本大小调整,我们可能更喜欢使用 px。至于元素的单位,坚持使用 px 会更好,因为通常你会想要精确地调整元素的大小。 - uzyn
1
正如许多评论所指出的那样在这里,我们需要放弃使用px的原因是为了实现调整大小。现在,如果我们使用rem,我们仍然必须提供px回退(在旧版浏览器中)。本质上,这意味着px可调整大小的支持比rem更好。新版浏览器支持px大小调整,对于旧版浏览器,我们无论如何都会回退到px。 基于这个结论,我非常想知道,为什么要使用rem?如果我可以看到隧道尽头的光明。 - fusionstrings
3
不能保证像62.5% = 10px这样的数值。只有当浏览器默认字体大小设置为16px时才成立,虽然这是默认设置,但不能保证。 - cimmanon
2
任何人浏览这里的所有答案,试图充分理解问题,也应该阅读以下文章:https://medium.com/@sascha.wolff/dont-use-rem-em-for-paddings-margins-and-more-94e19026b000 https://mindtheshift.wordpress.com/2015/04/02/r-i-p-rem-viva-css-reference-pixel/在我看来,一个非常重要的点是:“用户有两个选项来配置浏览器以满足个人偏好...你通过让它看起来与另一个完全相同来窃取其中一个选项。如果有人说他们只想让文本变大而不是其他所有东西,那么他们一定有理由。” - V. Rubinetti
显示剩余3条评论

40

是的,REM和PX是相对单位,但其他回答建议使用REM而不是PX。我也想用一个无障碍的例子来支持这个观点。当用户在浏览器上设置不同的字体大小时,REM会自动缩放网页上的元素(如字体、图像等),而PX则不会。


在下面的gif中,左侧文本使用字体大小的REM单位进行设置,而右侧文本则使用PX单位进行设置。

enter image description here

你可以看到,当我调整网页默认字体大小时,REM会自动缩放。(右下角)

网页的默认字体大小是16px,等于1个rem(只适用于默认的HTML页面即html{font-size:100%})。因此,1.25rem等于20px。

附言:谁还在使用REM?像Bootstrap 4、Bulma CSS等CSS框架!所以最好跟上潮流。


13
你正在对 HTML 的 font-size 属性进行缩放,而 em/rem 单位相对于它来说是相对的而不是像素。尝试放大或缩小浏览器,这也是任何辅助功能使用情况会做的事情。字体会变得更大或更小。在现代浏览器中,通过百分比来修改 font-size 并不能与可访问性有任何关联。 - John Culviner
7
抱歉,亲爱的@JohnCulviner。如果你想一遍又一遍地打扰视力障碍用户,在浏览时需要不断地捏合缩放或按键盘操作,那么你是正确的。但是浏览器中的字体大小设置是最常用的无障碍功能之一,它可以减轻这些用户的负担并简化他们的生活。 - Volker E.
编辑 - Volker在浏览器/操作系统字体大小设置方面是正确的。尽管上述示例没有显示,但从技术上讲不正确。REM是最好的选择,尽管它会使开发变得有点困难! - John Culviner

10

josh3736的回答很不错,但是三年后提供一个对立的观点:

如果只是为了让开发人员更容易更改字体大小,我建议使用rem单位。虽然用户很少更改浏览器中的默认字体大小,并且现代浏览器缩放会放大px单位,但如果你的老板告诉你“不要放大图像或图标,但要将所有字体都变大”,那么只需更改根字体大小,让其他所有字体相对于它进行缩放,比更改数十或数百个CSS规则中的px大小更容易。

我认为在某些图像或某些布局元素上仍然使用px单位是有意义的,因为无论设计的比例如何,它们的大小始终应该保持不变。

Caniuse.com可能在josh3736在2012年发布回答时只支持75%的浏览器,但截至3月27日,他们声称支持93.78%。在他们跟踪的浏览器中,只有IE8不支持它。


1
仅IE8在他们追踪的浏览器中不支持它。什么?链接页面说明:“当在字体缩写属性中使用或用于伪元素时,IE9和IE10不支持rem单位。在:before和:after伪元素上使用line-height属性时,IE9、10和11不支持rem单位。在Chrome中,当页面缩小时,以rem为大小的边框会消失。在Samsung Note II Android 4.3浏览器和Android 4.2上的Samsung Galaxy Tab 2上不起作用。当根元素具有百分比大小时,基于Chrome 31-34和Chrome的Android(如4.4)存在字体大小错误。” - e-sushi
此外,关于您提到的“截至3月27日,他们声称支持率为93.78%”,在撰写本评论时,caniuse仅显示91.79%的完全浏览器支持率。看到您的百分比,我很确定您也包括了有缺陷的浏览器支持(目前为2.8%),这可能被解释为乐观的94.6%总覆盖率 - 但事实是,这2.8%带有有缺陷、不完整甚至完全失败的支持...正如我之前的评论所指出的:每个错误都是不同的浏览器版本和操作系统组合的结果。您可能需要相应地更正您的答案... - e-sushi
3
这篇文章中一个(在我看来)非常重要的问题是:用户有两个选项来配置浏览器以满足个人偏好...但如果你让它们看起来完全一样,那么你就剥夺了其中一个选项。如果有人说他们只想要文本变大而不是其他所有东西,那么他们肯定有理由。作为设计师,我们很容易使用全部REM单位,这样无论用户的文本大小如何,都能使一切看起来很好。但是,如果我们这样做,两个选项(缩放级别和文本大小)基本上就变成了相同的,从而剥夺了用户的控制权。 - V. Rubinetti

9
作为一种反射性的回答,我建议使用rem,因为它允许您一次更改整个文档的“缩放级别”,如果必要的话。在某些情况下,当您希望大小相对于父元素时,请使用em。
但是,rem支持存在不稳定性,IE8需要polyfill,而Webkit正在展示一个错误。此外,亚像素计算可能会导致诸如单像素线条有时消失等问题。解决方法是对这些非常小的元素进行像素编码。这引入了更多的复杂性。
因此,总体而言,问问自己是否值得 - 在CSS中更改整个文档的“缩放级别”有多重要和可能?
对于某些案例,是,对于某些案例,将是否。
因此,这取决于您的需求,并且您必须权衡利弊,因为与“正常”的基于像素的工作流程相比,使用rem和em会引入一些额外的考虑因素。
请记住,从px转换为rem很容易(JavaScript是另一个故事),因为以下两个CSS代码块将产生相同的结果:
html {
}

body {
  font-size:14px;
}

.someElement {
  width: 12px;
}

html {
  font-size:1px;
}

body {
  font-size:14rem;
}

.someElement {
  width: 12rem;
}

2

ptrem类似,它相对固定,但几乎总是与DPI无关,即使非兼容浏览器以设备相关方式处理pxrem随根元素的字体大小变化而变化,但您可以使用类似Sass/Compass的工具自动使用pt

如果您有以下内容:

html {
    font-size: 12pt;
}

然后1rem将始终为12ptremem只有在它们所依赖的元素上是设备无关的; 一些浏览器不按规范行事,并且字面上处理px。 即使在Web的早期,1点始终被视为1/72英寸--也就是说,1英寸中有72个点。
如果您使用旧的、不兼容的浏览器,并且您有:
html {
    font-size: 16px;
}

那么1rem将会依赖于设备。对于默认继承自html的元素,1em也将依赖于设备。12pt将是希望保证设备无关性的等效单位:16px / 96px * 72pt = 12pt,其中96px = 72pt = 1in
如果您想坚持使用特定的单位进行计算,这可能会变得非常复杂。例如,.75em of html = .75rem = 9pt.66em of .75em of html = .5rem = 6pt。一个好的经验法则:
  • 使用pt进行绝对大小。 如果您真的需要根据根元素动态调整大小,那么您要求CSS做太多的事情了;您需要一种编译成CSS的语言,如Sass/SCSS。
  • 使用em进行相对大小。 能够说,“我希望左边的边距大约是一个字母的最大宽度”,或者,“使这个元素的文本比周围的环境稍微大一点。”在<h1>上使用字体大小以ems为单位是很方便的,因为它可能出现在各种地方,但应该始终比附近的文本大。这样,您不必为应用于h1的每个类都设置单独的字体大小:字体大小会自动适应。
  • 对于非常小的大小,请使用px 在非常小的大小上,pt在一些浏览器上以96 DPI模糊,因为ptpx不完全对齐。如果您只想创建一个细的一像素边框,请这样说。如果您有高DPI显示器,则在测试期间您可能无法注意到这一点,因此请确保在某个时候在普通的96 DPI显示器上进行测试。
  • 不要使用子像素来在高DPI显示器上制作花哨的东西。 一些浏览器可能支持它--特别是在高DPI显示器上--但这是不可取的。大多数用户喜欢大而清晰,尽管Web已经教给我们开发人员另外的方式。如果您想为拥有最先进屏幕的用户添加扩展细节,可以使用矢量图形(即SVG),这也应该是您正在做的事情。

1
pt是用于印刷媒体的,不应该用于屏幕。 - s-f
@s-f CSS定义了pt和px,使它们始终保持相同的比例,尽管这不是这些术语的技术上准确的用法(72pt = 96px = 1in)。实际上,在CSS中,px并不是一个单一的设备像素。在我的屏幕上,1px等于2个设备像素。使用pt而不是px的优点是可以轻松地相对于文本相关大小指定元素大小。 - Zenexer

2

我发现编写网站字体大小的最佳方法是为 body 定义一个基础字体大小,然后在声明其他 font-size 后使用 em(或 rem)。这可能是个人偏好,但它为我服务得很好,也使得更容易地实现 响应式设计

至于使用 rem 单位,我认为在代码中寻找进步与为旧浏览器提供支持之间要找到平衡。查看此链接以了解 rem 单位的浏览器支持情况,这应该对您的决策有所帮助。


好的。但是响应式设计使用像素单位同样容易实现,对吧(只需基于像素编写媒体查询即可)? - user1218247
然而,如果您希望在网站的视口宽度变小时使字体大小变小,则可以更改“body”字体大小,所有内容都会随之更改。 - cereallarceny
我并不担心浏览器支持的问题。我会为所有尺寸包含一个回退像素大小,这样旧版浏览器也能够解释。 - user1218247
然后可以采用rem的渐进方式。只要提供备选方案,我认为没有什么害处。但对我来说,这似乎只是额外的工作,但在你的情况下可能不是。 - cereallarceny

-2

半个(但仅仅是半个)讽刺的回答(另一半是对官僚主义现实的痛恨):

使用vh

始终根据浏览器窗口大小设置大小。

始终允许向下滚动,但禁用水平滚动。

将body宽度设置为静态的50vh,并且永远不编写css以使其漂浮或打破父div。 (如果他们尝试模拟看起来像这样的东西,巧妙地使用背景gif可以使他们偏离轨道。)并且仅使用表格进行样式设计,以便所有内容都被牢牢地固定在预期位置上。包括一个JavaScript函数,以撤消用户可能执行的任何ctrl +/- 活动。

用户会讨厌你,因为网站不会根据他们正在使用的设备而有所不同(例如,在手机上文字太小无法阅读)。你的同事会讨厌你,因为没有理智的人会这样做,而且它很可能会破坏他们的工作(但不会破坏你的工作)。你的编程教授会讨厌你,因为这不是个好主意。你的用户体验设计师会讨厌你,因为它将揭示他们在设计UX模型时缩短时间的角落。

几乎每个人都会讨厌你,除了那些告诉你要快速地将事情与模型匹配的人。然而,这些人(通常包括项目经理)会对你的准确性和快速周转时间感到非常兴奋。而且每个人都知道他们的意见是对你的薪水最重要的。

3
哈哈哈哈。这可能是我在SO上读过的最有趣的答案。而且,实际上,它并不完全错误。我不会建议在网站中使用vh,但有一些特定领域的问题需要使用整个页面以vh(甚至vw)为单位进行样式设置。想想视频叠加等情况。看到整个页面与窗口大小成比例缩放是相当迷人的。另请参见流体排版,该文章甚至提到了垂直韵律 - Aleks-Daniel Jakimenko-A.
1
很好!我个人只做过一次,而且只是因为我一直被抱怨事情没有完全匹配模型(之后再也没有收到这样的抱怨了。UX人员随后特别指出,一些偏差是可以满足技术要求的,与项目经理进行干预。)老实说,你向我指出这种设计实际上有用的场景,让我感到非常惊讶和有趣。 - lilHar

-3

是的。或者说,不是。

嗯,我的意思是,这并不重要。使用适合您特定项目的那个。PX和EM都是有效的,但根据整个页面的CSS架构会有所不同。

更新:

澄清一下,我想说的是通常情况下使用哪种方式可能并不重要。有时,您可能需要明确选择其中之一。如果您可以从头开始并想使用基本字体大小并使所有内容相对于该大小进行调整,则EM很好。

PX通常需要在将重新设计应用于现有代码库并需要px的特定性以防止错误嵌套问题时使用。


那么你的答案是无所谓吗?还是在某些情况下,你会更看重其中一种?如果是这样,在什么情况下会出现这种情况? - user1218247
@Samuel 是的,有时你可能想使用其中之一。我已经更新了我的回答并提供了更多信息。 - DA.
抱歉,我有点困惑原始措辞。我认为您在标题中使用了 REM,在正文中使用了 EM。看起来您特别询问的是 REM。答案基本上仍然相同,但 REM 有一些额外的好处需要考虑,但主要与 EM 用法相同——它允许您使用“基础”字体大小。 - DA.
为什么如果你可以从头开始并想使用基本字体大小并使所有内容相对于该大小,那么“em's [...]很好用”?(r)em相比px的优势是什么?它是为了让IE用户调整文本大小,还是有其他优点超过px(似乎更简单)? - user1218247
好处都是基于具体情境的,真正只适用于开发人员。最终用户很可能不在乎你使用什么单位来设置字体大小。我建议您使用对您有意义的内容,不要过度思考。 - DA.
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接