基于rem的css响应流体html字体大小

uxhixvfz  于 2022-12-27  发布在  其他
关注(0)|答案(2)|浏览(145)

我想基于rems实现css-tricks中的例子,这是我目前为止得到的结果,但是缩放并没有按预期工作,字体大小只增加了很小的量,这是什么错误?

html {
  font-size: 1rem;
}
@media screen and (min-width: 320px) {
  html {
    font-size: calc(1rem + 2 * ((100vw - 20rem) / 680));
  }
}
@media screen and (min-width: 1000px) {
  html {
    font-size: 3rem;
  }
}

我假设2 * ((100vw - 20rem) / 680)返回一个px值,如果这是真的,我怎么把它改为返回rem呢?
编辑以添加一些说明:我想使用rem而不是px,因为这允许用户覆盖浏览器中的默认字体大小。
术语2 * ((100vw - 20rem) / 680)介于02之间(1 rem等于正常字体大小的16px)。这就是我想要实现的。我想要font-size: 1rem + [0, 2]rem介于320和1000px之间的视口宽度。一个基于视口宽度的线性增加rem函数。
这是一个link to a sandbox example
编辑二:我想我想达到的效果是不可能的,如果用户把默认字体大小增加50%,我想缩放比例也增加50%:font-size: 1rem + [0, 2 * 1.5]rem.
当前的问题是2 * ((100vw - 20rem) / 680))部分需要基于rem,这是不可能的,因为CSS中没有办法剥离单元,如果我可以剥离单元,我可以这样做:x1米10英寸1x

shyt4zoc

shyt4zoc1#

如果你想要一个响应的字体大小,那么你也可以使用视图宽度,不需要使用calc或rem。
只需更改此选项,以便您可以试用:

HTML {
  font-size: 5vw;
}

视图宽度从0到100,这样您就可以知道需要使用多少空间。
编辑:我个人还没有找到如何在两个轴上缩放,但在大多数情况下,X轴就足够了。

4zcjmb1e

4zcjmb1e2#

下面是我从Creating a Fluid Type Scale with CSS Clamp获得的一个流畅字体解决方案
经过一些调整后,我得到了下面的Sass代码来生成clamp函数。

/*
   From https://www.aleksandrhovhannisyan.com/blog/fluid-type-scale-with-css-clamp/
   Generates the css clamp function.  
   Focused on font-size, but may be used for margins and padding

   Usage:  
      clamped(min-size-px, max-size-px, min-browser-width-px, max-browser-width-px)
      font-size: clamped(26px, 36px, 600px, 1200px);    
      font-size: clamped(26px, 36px);      //using width default values
Output:
    font-size: clamp(1.63rem, 1.11vw + 1.28rem, 2.25rem);

*/

@use "sass:math";
@use "sass:map";

// Default min-mix browser width values for clamped function
$default-min-bp: 500px;           
$default-max-bp: 1400px;           

// Convert pixels to rems.
@function to-rems($px) {
  $rems: math.div($px, 16px) * 1rem;
  @return $rems;
}

//round a to number of decimal places.
@function rnd($number, $places: 0) {
  $n: 1;
  @if $places > 0 {
    @for $i from 1 through $places {
      $n: $n * 10;
    }
  }
  @return math.div(math.round($number * $n), $n);
}

// Generate css for clamp
@function clamped($min-px, $max-px, $min-bp: $default-min-bp, $max-bp: $default-max-bp) {
  $slope: math.div($max-px - $min-px, $max-bp - $min-bp);
  $slope-vw: rnd($slope * 100, 2);
  $intercept-rems: rnd(to-rems($min-px - $slope * $min-bp), 2);
  $min-rems: rnd(to-rems($min-px), 2);
  $max-rems: rnd(to-rems($max-px), 2);
  @return clamp(#{$min-rems}, #{$slope-vw}vw + #{$intercept-rems}, #{$max-rems});
}

相关问题