6

我的 html 中有不同的元素,具有不同的文本大小。我想将它们设置为动态的,以便为不同的屏幕尺寸显示不同的字体大小。

最好的方法是什么?现在我正在这样做,但它使代码看起来很难看:

<script>
$(window).resize(function(){
$('#first').css('font-size',($(window).width()*0.2)+'px');
$('h2').css('font-size',($(window).width()*0.02)+'px');
$('h1').css('font-size',($(window).width()*0.03)+'px');

对于两个元素就可以了,但我还有更多。对 html/css/javascript 没有丰富的经验,所以这就是我想出的。

由于我正在学习,我想知道什么是最好的方法。

也许您对如何改进有一些建议?

4

9 回答 9

22

您可以为此使用新的 css 单位 vw,vh(视口宽度/高度)。

这是一篇有趣的css-tricks 文章,向您展示了如何将它们用于排版。

示例:(来自上面的文章)

h1 {
  font-size: 5.9vw;
}
h2 {
  font-size: 3.0vh;
}
p {
  font-size: 2vmin;
}

所以 h1 的字体大小将是视口宽度的 5.9%。等等


话虽如此,font-size以上述方式使用视口单元是有问题的,因为当视口宽度非常窄时 - 渲染的字体大小将变得太小,反之亦然。

为了克服这个问题,我可以推荐使用一种称为Fluid Type AKA CSS Locks的技术。

CSS 锁是一种特定类型的 CSS 值计算,其中:

  • 有最小值和最大值,
  • 和两个断点(通常基于视口宽度),
  • 在这些断点之间,实际值从最小值线性变为最大值。

来自这篇关于 CSS 锁的文章,其中也详细解释了所涉及的数学。)

因此,假设我们要应用上述技术,使得在视口宽度为 600 像素或更小的情况下最小字体大小为 16 像素,并且会线性增加,直到在视口宽度为 1200 像素时达到最大值 32 像素。

我们可以使用这个 SASS mixin,它为我们做所有的数学运算,这样 CSS 看起来像这样:

div {
  /* linearly increase the font-size from 16->32px 
     between a viewport width of 600px-> 1200px  */
  @include fluid-type(font-size, 600px, 1200px, 16px, 32px);
}
@media screen and (max-width: 600px) {
  div {
     font-size: 16px;
  }
}
@media screen and (min-width: 1200px) {
  div {
     font-size: 36px;
  }
}

// ----
// libsass (v3.3.6)
// ----

// =========================================================================
//
//  PRECISE CONTROL OVER RESPONSIVE TYPOGRAPHY FOR SASS
//  ---------------------------------------------------
//  Indrek Paas @indrekpaas
//
//  Inspired by Mike Riethmuller's Precise control over responsive typography
//  http://madebymike.com.au/writing/precise-control-responsive-typography/
//
//  `strip-unit()` function by Hugo Giraudel
//  
//  11.08.2016 Remove redundant `&` self-reference
//  31.03.2016 Remove redundant parenthesis from output
//  02.10.2015 Add support for multiple properties
//  24.04.2015 Initial release
//
// =========================================================================

@function strip-unit($value) {
  @return $value / ($value * 0 + 1);
}

@mixin fluid-type($properties, $min-vw, $max-vw, $min-value, $max-value) {
  @each $property in $properties {
    #{$property}: $min-value;
  }

  @media screen and (min-width: $min-vw) {
    @each $property in $properties {
      #{$property}: calc(#{$min-value} + #{strip-unit($max-value - $min-value)} * (100vw - #{$min-vw}) / #{strip-unit($max-vw - $min-vw)});
    }
  }

  @media screen and (min-width: $max-vw) {
    @each $property in $properties {
      #{$property}: $max-value;
    }
  }
}

// Usage:
// ======

// /* Single property */
// html {
//   @include fluid-type(font-size, 320px, 1366px, 14px, 18px);
// }

// /* Multiple properties with same values */
// h1 {
//   @include fluid-type(padding-bottom padding-top, 20em, 70em, 2em, 4em);
// }

////////////////////////////////////////////////////////////////////////////

div {
  @include fluid-type(font-size, 600px, 1200px, 16px, 32px);
}
@media screen and (max-width: 600px) {
  div {
     font-size: 16px;
  }
}
@media screen and (min-width: 1200px) {
  div {
     font-size: 36px;
  }
}
<div>Responsive Typography technique known as Fluid Type or CSS Locks. 
  Resize the browser window to see the effect.
</div>

Codepen 演示


延伸阅读

精确控制响应式排版

使用 CSS Poly Fluid Sizing 的流体响应式排版

CSS中的非线性插值

于 2013-10-07T19:02:52.580 回答
5

使用媒体在 css 文件中设置字体大小

@media(max-width:767px) {
    body {
        font-size: 10px;
    };
}

@media(min-width:768px) {
    body {
        font-size: 11px;
    };
}

@media(min-width:992px) {
    body {
        font-size: 12px;
    };
}

@media(min-width:1200px) {
    body {
        font-size: 13px;
    };
}
于 2013-10-07T11:47:27.733 回答
1

抛弃 javascript 以更改字体大小...在您的 css 文件中指定 em 中的字体大小,如下所示。

div{
   font-size:2em;
}
于 2013-10-07T11:42:21.263 回答
0

不要使用像素,而是使用它,em因为它会相应地缩放。

来自维基百科:

在网上,em 测量的使用变得更加普遍;随着级联样式表(或 CSS)的发展,HTML 和在线标记中的 W3C 最佳实践建议现在要求网页基于可扩展设计,使用相对的度量单位(例如 em 度量),而不是一个固定的像素(“px”)或点。

于 2013-10-07T11:45:23.033 回答
0

不要使用 javascript 来指定字体大小。CSS为此内置了方法。

您可以使用带有字体大小的“em”或“%”来更改与您的页面和设备尺寸相关的字体大小。

代码示例:

font-size: 3em;
font-size: 10%;

两者都应该做。

于 2013-10-07T11:45:28.473 回答
0

试试这个,如果它有帮助(如果你打算使用 javascript) http://fittextjs.com/

于 2013-10-07T11:45:44.753 回答
0

如果您在%em基础上设置,浏览器将相应地设置其字体大小。

于 2013-10-07T11:46:18.193 回答
0

您可以使用 css 媒体查询来做到这一点。

在媒体查询中以百分比设置正文大小。

例如:CSS

@media screen and (max-width: 1024px) {
   body {
      font-size: 90%;
   }
}

@media screen and (max-width: 1440px) {
   body {
      font-size: 100%;
   }
}

然后在调整浏览器大小或根据百分比分辨率调整字体大小的每个元素上设置字体大小。

例如:如果你想调整 h1 上的字体大小

h1 {
   font-size: 150%;
}

它会按你的意愿工作。

于 2013-10-07T11:50:36.760 回答
0

使用 JavaScript 调整字体大小不是一个好习惯。最好用传统的 CSS 来做。您可以在 CSS 中使用不同的单位调整字体大小,例如 px、em 和 % 以及 rem(根 em)。

为了根据屏幕大小调整字体大小,请以 rem 为单位设置字体大小。或者利用媒体查询为不同的屏幕分辨率设置字体大小。以下是一些执行此操作的示例媒体查询:

@media screen and (max-width: 1024px) {
    #first { font-size: 204px; }
    h2 { font-size: 20px; }
    h1 { font-size: 30px; }
}
于 2013-10-07T11:55:27.227 回答