在视口单位中声明字体大小可以产生非常有趣的结果,但它也伴随着挑战。CSS 中没有min-font-size
或max-font-size
属性,因此文本变得太小或太大的极端情况难以处理。
此 Sass 混合宏使用媒体查询来定义字体的最小和最大尺寸(以像素为单位)。它还支持一个可选参数,作为不支持视口单位的浏览器的后备方案。
例如,以下是如何将字体定义为5vw
,并将其限制在35px
和150px
之间(对于不支持的浏览器,后备方案为50px
)
@include responsive-font(5vw, 35px, 150px, 50px);
这是完整的混合宏
///
/// Viewport sized typography with minimum and maximum values
///
/// @author Eduardo Boucas (@eduardoboucas)
///
/// @param {Number} $responsive - Viewport-based size
/// @param {Number} $min - Minimum font size (px)
/// @param {Number} $max - Maximum font size (px)
/// (optional)
/// @param {Number} $fallback - Fallback for viewport-
/// based units (optional)
///
/// @example scss - 5vw font size (with 50px fallback),
/// minumum of 35px and maximum of 150px
/// @include responsive-font(5vw, 35px, 150px, 50px);
///
@mixin responsive-font($responsive, $min, $max: false, $fallback: false) {
$responsive-unitless: $responsive / ($responsive - $responsive + 1);
$dimension: if(unit($responsive) == 'vh', 'height', 'width');
$min-breakpoint: $min / $responsive-unitless * 100;
@media (max-#{$dimension}: #{$min-breakpoint}) {
font-size: $min;
}
@if $max {
$max-breakpoint: $max / $responsive-unitless * 100;
@media (min-#{$dimension}: #{$max-breakpoint}) {
font-size: $max;
}
}
@if $fallback {
font-size: $fallback;
}
font-size: $responsive;
}
演示
查看 Eduardo Bouças 在 CodePen 上的笔 具有最小和最大尺寸的视口大小的字体(@eduardoboucas)。
当您想要后备方案但没有最大尺寸时,您将如何编写@include?
嗨,Tom,
您可以将
false
传递给最大尺寸参数。例如
希望这有帮助!
完美,谢谢 Eduardo Bouças
我正在尝试在一个项目中使用它。在我的基本移动宽度样式中,vw 单位的字体大小被我未定义的 max-width:1000px 断点处的 px 字体大小覆盖。在浏览器窗口宽度超过 1000px 之前,我没有看到 vw 单位的字体大小起作用。发生了什么事?
我基本上理解发生了什么,但是如何在小于 1000px 宽度的宽度下获得此混合宏的好处?
嗨,我调整了你的
mixin
以使用vmin
工作,以便字体可以水平和垂直响应。这意味着在非常宽但非常短的宽屏笔记本电脑上,字体会缩小以节省空间。http://codepen.io/dahliacreative/pen/GNqaer
我还为像 margin 和 padding 这样的单位做了一个,它的作用方式相同。
http://codepen.io/dahliacreative/pen/RoRmxW
希望其他人发现它们有用,并随时提出改进建议,我相信它们可以做得更好!
媒体查询是产生最小字体大小效果的原因。您设置的最小尺寸越高,该媒体查询的宽度就越高。
如果您希望 vw 单位始终生效,则根本不需要此混合宏。只需将字体大小设置为使用这些单位。
这有道理吗?
好的,我明白了。谢谢。
嗨,我调整了你的
mixin
以使用vmin
工作,以便字体可以水平和垂直响应。这意味着在非常宽但非常短的宽屏笔记本电脑上,字体会缩小以节省空间。http://codepen.io/dahliacreative/pen/GNqaer
我还为像 margin 和 padding 这样的单位做了一个,它的作用方式相同。
http://codepen.io/dahliacreative/pen/RoRmxW
希望其他人发现它们有用,并随时提出改进建议,我相信它们可以做得更好!
在工作中,我们正在探索此逻辑的潜在用途。作为此探索的一部分,我们意识到给定的一组最小/流体/最大尺寸的“流体”部分对于每个组合将是不同的。我想直观地表示每组尺寸将如何重叠,以便我们可以对流体部分及其重叠进行明智的调整,以获得最佳体验,因此我制作了以下 CodePen。希望它对阅读本文的其他人有所帮助。
http://codepen.io/aaronbarker/full/zZroxL/
在 w3 html 草案中有一个 font-min/max-size https://drafts.csswg.org/css-fonts-4/#font-min-max-size-prop
如何将类型比例(例如大二度类型比例)与这种方法结合起来?