在现代用户界面(UI)设计中,动态字体(Dynamic Type)是指能够根据用户偏好或设备显示特性自动调整大小的字体。这种设计策略旨在提高界面的可访问性和用户体验,尤其对视力不同的用户而言,能够提供更好的阅读和交互体验。

Untitled

动态字体原理和实现方式

动态字体的工作原理是通过监听系统级别的字体大小设置,并根据这些设置动态调整应用程序中的字体大小。例如,用户可以在设备设置中选择他们偏好的字体大小,应用程序会根据这些设置自动调整界面中的字体大小。动态字体在iOS、Android和Web上各有不同的实现方法。以下是各平台的具体实现方法:

1. iOS

在iOS上,可以使用 Dynamic Type 来实现动态字体。

  1. 支持 Dynamic Type 断点式:在应用中使用支持动态字体的字体样式,如.body.headline等。
label.font = UIFont.preferredFont(forTextStyle: .body)
label.adjustsFontForContentSizeCategory = true
  1. 响应用户的字体大小设置:确保应用支持用户在系统设置中调整字体大小。应用会自动根据用户的设置调整字体。
  2. 自定义字体大小:如果使用自定义字体,可以使用 UIFontMetrics 来调整字体大小。

2. Android

  1. Material 3 断点式:在Android上,可以使用 md3 里面的 style 属性和 sp(scale-independent pixels)单位来实现动态字体。
style="@style/TextAppearance.Material3.Body1"
app:autoSizeMinTextSize="12sp"
app:autoSizeMaxTextSize="112sp"

3. Web

在Web上,可以使用CSS来实现动态字体。

  1. 使用相对单位 连续式:在CSS中使用相对单位(如emrem)定义字体大小。更多相对单位可以参考。

    相对单位的应用:em, rem, vw, vh, pt, sp

    h1 {
        font-size: 2rem; /* 等于根元素字体大小的2倍,即32px */
    }
    
  2. 媒体查询 断点式:使用CSS媒体查询根据屏幕大小调整字体大小。

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

动态字体的设计方案

1. 连续式(Continuous)动态字体调整

连续式动态字体调整通过用户交互(如滑动条)来连续调整字体大小。字体大小会平滑地变化,提供即时的视觉反馈。