我可以在同一个样式表(CSS)中同时使用 px 和 em 吗?

Posted

技术标签:

【中文标题】我可以在同一个样式表(CSS)中同时使用 px 和 em 吗?【英文标题】:Can I use both px and em in the same style sheet(CSS)? 【发布时间】:2014-10-30 23:45:07 【问题描述】:

我想知道我是否可以在同一个 css 文件中同时使用 px 和 em(对于同一个标签/类)。我的意思是,我能有这样的东西吗:-

body
    font-size: 10px; 
    font-size: 0.625em;
    font-weight: normal;
    font-family: arial;
    margin: 0px auto;
    color: #333333;
    background: #E0E0E0;

我的目标是转换一个支持“em”的非常大的 css 文件,以便用户可以决定他们想要使用的字体大小。但我的问题是 'em' 有据可查的问题 - 嵌套标签受到影响。

我在某些地方使用“rem”而不是“em”来寻求帮助。虽然它有所帮助,但我失去了网页的整个结构。

我想在我的网页中保持完全相同的字体大小,并且仍然支持想要更改字体大小的用户。

我正在使用 jquery 向 body 标记添加一个类,该类将包含指定的字体大小,并且其他所有内容都应该是可扩展的。

如果有不清楚的地方,我很乐意解释!多谢你们!

【问题讨论】:

【参考方案1】:

不能在同一个css中定义,但是可以这样定义。

.input 
     width:100px;
    



 <input width:0.1em;>

【讨论】:

【参考方案2】:

我知道这不是真正的问题,但我来这里是为了寻找另一个答案,所以无论如何我都会发布它。 (关于您的问题,显然用不同的单位定义相同的属性两次是没有意义的,但请检查其他答案。)

但是是的,您可以在同一个样式表中使用 em 和 px,甚至可以在同一属性中使用 em 和 px

body 
    font-size: 12px;

.footnote 
    font-size: 0.7em;

input 
    padding: 0.5em;
    border: 1px solid #666;

.input-replace 
    padding: calc(0.5em - 3px);
    border: 4px solid #eee;

当您使用calc() 时,您可以确保两个元素的大小始终完全相同。

【讨论】:

【参考方案3】:

对您想要根据用户选择进行缩放的任何文本(或其他元素)使用em 单位。并使用rem 单位来表示您希望保持相同大小的东西。

DEMO EXAMPLE


CSS: REM 单位将基于此值(以 10 为底,便于计算)

html  font-size:10px; 

HTML:用户可以选择他们想要的页面字体大小

<select id="sizeSelector">
  <option value="10px">Extra Small</option>
  <option value="12px">Small</option>
  <option value="14px">Normal</option>
  <option value="16px">Large</option>
  <option value="18px">Extra Large</option>
</select>

JS:创建一个 jQuery 函数,绑定到修改 &lt;body&gt;font-size 的选择框,从而更改基于 em 的声明:

$(document).ready(function() 
  $("#sizeSelector").change(function(e) 
    $("body").css('fontSize', e.target.value);
  );

  // initialize font size for first page load
  $("#sizeSelector").prop("selectedIndex", 2).trigger('change');
);

更新:代码不再依赖于类

【讨论】:

请记住,您不想更改的任何内容都应以rem 为单位进行定义。 谢谢 J.C. 我还想知道你的方法是如何解决旧浏览器的“rem”问题。我相信旧浏览器不支持“rem”单位。那么你建议我在这种情况下使用“px”吗? 定义两个单元以获得最佳浏览器支持。您将首先定义px 值,然后是rem 版本,就像font-size:10px; font-size:1rem; 一样。新浏览器将使用自上次声明的rem 版本,旧浏览器将忽略“rem”并回退到px 声明。如果您使用 LESS 或 SASS,这里是一个很棒的 tut:drublic.de/blog/rem-fallback-sass-less【参考方案4】:

解决您的示例 css...

您可以随意混合使用 px 和 em(以及百分比)。这很好:

body
    font-size: 10px; 
    margin: 0px auto;

你不能定义相同的 css 属性两次。好吧,从技术上讲你可以,但只会应用其中一个。所以这被打破了:

body
    font-size: 10px; 
    font-size: 0.625em;

但它与混合 px 和 em 无关。这也坏了:

body
    font-size: 10px; 
    font-size: 20px;

好消息是你在正确的轨道上......

使用字体大小(以像素为单位)定义一些***容器或正文。 用 em 中的 font-size 定义每个子节点。 使用 javascript 更改***容器的字体大小。

这是一个小提琴示例:http://jsfiddle.net/pabo/pn1tyaxb/

请注意,按钮,实际上是您选择的***容器之外的任何内容,都不会受到重新缩放的影响。

【讨论】:

感谢帕博的建议!我会试试这个,看看这是否有效。我的猜测是应该的。另外,你知道我如何处理“li”标签,因为这是为我嵌套的标签,而“em”在这里不能很好地工作。

以上是关于我可以在同一个样式表(CSS)中同时使用 px 和 em 吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 XML 上同时使用 CSS 和 XSLT?

为啥是 em 而不是 px?

设置span最后一个字符的css样式

在 Laravel 刀片文件中使用 css 样式标签

样式表

CSS样式表