根据屏幕大小调整文本大小

Kar*_*lis 6 html javascript css jquery

我的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');
Run Code Online (Sandbox Code Playgroud)

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

因为我在学习,所以我想知道什么是最好的方法.

也许你有一些建议如何改善?

Dan*_*eld 22

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

这是一篇有趣的css-tricks文章,向您展示如何使用它们进行排版.

示例:(来自上文)

h1 {
  font-size: 5.9vw;
}
h2 {
  font-size: 3.0vh;
}
p {
  font-size: 2vmin;
}
Run Code Online (Sandbox Code Playgroud)

因此h1的视口宽度为字体大小的5.9%.等等


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

为了克服这个问题,我建议使用一种名为Fluid Type AKA CSS Locks的技术.

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

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

(从这篇关于CSS锁的文章中也可以非常详细地解释数学.)

因此,假设我们要应用上述技术,使得最小字体大小在视口宽度为600px或更小时为16px,并且将线性增加,直到在视口宽度为1200px时达到最大32px.

我们可以使用这个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;
  }
}
Run Code Online (Sandbox Code Playgroud)

// ----
// 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;
  }
}
Run Code Online (Sandbox Code Playgroud)
<div>Responsive Typography technique known as Fluid Type or CSS Locks. 
  Resize the browser window to see the effect.
</div>
Run Code Online (Sandbox Code Playgroud)

Codepen演示


进一步阅读

精确控制响应式排版

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

CSS中的非线性插值


Sha*_*tel 5

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

@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;
    };
}
Run Code Online (Sandbox Code Playgroud)