视口单位( Viewport units )初探

视口单位( Viewport units )初探
起因

最近在写的一个仿网易云的webapp中有一个nav组件。其中nav-item需要宽度自适应屏幕的1/4.其中nav-icon需设置圆形。问题在于:宽度不确定,需要设置高度与宽度相同,且icon-font的font-size需随nav-item的宽度变化。首先想到的是css3的calc() 或者设置高为0,让padding撑起高的方案来实现。但是并不能解决font-size需随nav-item的宽度变化。后面了解到了视口单位( Viewport units )

Viewport 视口

在业界,极为推崇的一种理论是 Peter-Paul Koch (江湖人称“PPK大神”)提出的关于视口的解释——在桌面端,视口指的是在桌面端,指的是浏览器的可视区域;而在移动端较为复杂,它涉及到三个视口:分别是 Layout Viewport(布局视口)、 Visual Viewport(视觉视口)、Ideal Viewport。而视口单位中的“视口”,在桌面端,毫无疑问指的就是浏览器的可视区域;但是在移动端,它指的则是三个 Viewport 中的 Layout Viewport 。

Viewport units 视口单位

视口单位主要包括以下4个:

  • vw : 1vw 等于视口宽度的1%
  • vh : 1vh 等于视口高度的1%
  • vmin : 选取 vw 和 vh 中最小的那个
  • vmax : 选取 vw 和 vh 中最大的那个

使用vw设置宽高相同,已经iconfont的font-size自适应。就有了下面的nav组件代码。

<div class="nav">
    <div class="nav-item">
    	<i class="nav-icon iconfont icon-icon--"></i>
    	<span class="nav-text">私人FM</span>
    </div>
    <div class="nav-item">
    	<i class="nav-icon iconfont icon-calendar_icon"></i>
    	<span class="nav-text">每日推荐</span>
    </div>
    <div class="nav-item">
    	<i class="nav-icon iconfont icon-icon-"></i>
    	<span class="nav-text">歌单</span>
    </div>
    <div class="nav-item">
    	<i class="nav-icon iconfont icon-paixingbang"></i>
    	<span class="nav-text">排行榜</span>
    </div>
</div>
复制代码
.nav {
        width: 100%;
        height: 12vh;
        display: flex;
        .nav-item {
            flex: 1;
            height: 100%;
            .nav-icon {
                margin: 1vh 4vw;
                width: 17vw;
                height: 17vw;
                display: inline-block;
                border-radius: 50%;
                background: @color-theme;
                text-align: center;
                vertical-align: middle;
                color: @color-text-lm;
                font-size: 9vw;
            }
            .nav-text {
                display: inline-block;
                width: 100%;
                font-size: @font-size-small;
                color: @color-text-g;
                text-align: center;
            }    
            
        }
    }
复制代码

转载于:https://juejin.im/post/5c85f2ade51d4557a74b91e6

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值