CSS响应式

除了常见的media、flex、grid外的其他css响应元素

1.min()函数

当我们想根据不同尺寸调整容器的边距时,首先想到的可能是媒体查询

javascript 复制代码
<style>
    .container{
        padding: 5em;
    }
    @media (max-width: 600px) {
        .container{
            padding: 2em;
        }
    } 
</style>
<div class="container">测试字体测试字体测试字体测试字体测试字体测试字体测试字体测试字体</div>

但有一个更好的方法,使用min()函数,,MDN解释为:min() CSS 方法允许你从逗号分隔符表达式中选择一个最小值作为 CSS 的属性值。

javascript 复制代码
// 其中这里的 8% 是基于 .container 的包含块的宽度。如果 .container 的包含块宽度是 1000px,那么 8% 就是 80px。
 .container{
     padding: min(5em,8%); 
  }

2.响应式字体单位rem

说起rem就会想起em,对于这两个单位MDN是这样解释的:

  • em 相对于本元素的字体大小,或者在用于 font-size 时相对于父元素的字体大小。rem 相对于根元素的字体大小。

根据布局的需求选择emremem适用于需要继承父元素尺寸的情况,rem适用于需要全局一致性的场景,一般选择rem的情况较多,使用根元素作为参考更容易计算。

3.clamp()

当我们希望字体能够根据不同屏幕大小同时进行缩放,可使用clamp函数。

MDN解释:clamp() 函数的作用是把一个值限制在一个上限和下限之间,当这个值超过最小值和最大值的范围时,在最小值和最大值之间选择一个值使用。它接收三个参数:最小值、首选值、最大值。

javascript 复制代码
<style>
    .container{
        font-size:clamp(1.8rem,10vw,5rem)
    }
</style>
<div class="container">测试字体测试字体测试字体测试字体测试字体测试字体测试字体测试字体</div>

代码中首选值为10vw,vw是相对于视口的单位,在屏幕缩放时根据视口的大小来进行选择字体的最大值5rem或最小值1.8rem,但是当通过鼠标滚轮进行缩放时,字体大小不变化。因此想要字体鼠标滚轮操作时也能放大缩小,则可考虑响应式的单位。

javascript 复制代码
.container{
        font-size:clamp(1.8rem,calc(7vw + 1rem),5rem)
    }

4.图片自适应img

MDN中对img属性的解释如下:

想要图片随着屏幕的缩放自适应,设置图片的max-weidth为100%,最大不能超出屏幕,高度自适应。

javascript 复制代码
img{
   max-width: 100%; 
   height: auto;
}
<img width="1400" height="1300" src="./menHu_fkpt1.png" alt="">

有时会有多张尺寸不同的图,在这种情况需要强制使用同一种尺寸,并且保持响应式。可添加aspect-ratio属性保持图片的纵横比,以及object-fit设置图片的适应方式。

javascript 复制代码
img{
   max-width: 100%; 
   height: auto;
   aspect-ratio: 9 / 16;
   object-fit: cover;
}

5.视口高度vh

------针对移动端。

当使用height:100vh时,元素会占据整个可视高度,在移动端手机上时,则会多出一部分,这是因为vh的视口包含了手机状态栏下方的信息区域,而当前区域被占据了,页面则出现了向下的滚动条,此时设为height:100dvh。

记录内容来源于其他视频博主,如有侵权请告知删除!

相关推荐
FogLetter几秒前
当JavaScript学会“分身术”:异步编程的进化简史
前端·javascript·面试
hunterandroid20 分钟前
[鸿蒙从零到一] HarmonyOS 分布式能力与设备协同实战:从发现设备到任务闭环
前端
lichenyang45336 分钟前
从图片创作到本地可复现的 AIGC 全栈闭环:AIGC Creative Studio 实践复盘
前端·后端
牧艺43 分钟前
别急着 Vibe Coding:AI 三小时写完需求后,我为什么宁愿多花一天
前端·agent·vibecoding
java1234_小锋44 分钟前
Vue3+Vite简介以及构建第一个HelloWorld实例
前端·javascript·vue.js·vite
前进的搬砖er1 小时前
1.cesium 的基础知识篇
前端
计算机魔术师1 小时前
在 M1 Max 上运行 2.8T 参数的 Kimi K3:Deltafin 项目实现 0.0687 token/s 推理
前端
黄林晴1 小时前
你敢信吗?同样是跨端,KMP 跟 RN 居然差这么多!
android·前端
windliang1 小时前
Claude Code 源码分析(四):Tool 工具系统-从 Schema 到真实执行
前端·ai编程·claude
10WTW011 小时前
Sprite-Motion-Lab:雪碧图动画编辑器
前端·css·雪碧图·spritemotionlab·10wtw01