如何仅用内联CSS模拟混合宽度的max-width媒体规则?
如何仅用内联CSS模拟混合宽度的max-width媒体规则?
嘿,这种只能用内联样式的限制真的很磨人,不过咱们可以用CSS的min()、max()和calc()组合出一个「伪媒体查询」的效果,完全不需要脚本或者<style>标签。
核心思路是用视口单位vw和一个「开关」值来区分两种视口场景:
- 当视口宽度≤900px时,让div强制取100%宽度
- 当视口宽度>900px时,自动切换到33%视口宽,同时保证最小宽度不低于290px
直接把你的浮动div的内联样式改成下面这样就行:
<div style="float: right; width: min(100%, max(33vw, calc(290px + (900px - 100vw) * 999))); box-sizing: border-box;">Some multiline<br>content</div>
我给你拆解下每个部分的作用:
(900px - 100vw) * 999:这是关键的「开关」。当视口≤900px时,这个值是正数,加上290px会得到一个远大于100%视口宽的数;当视口>900px时,这个值是超大负数,加上290px后会变成一个远小于33vw的数。max(33vw, calc(290px + (900px - 100vw) * 999)):视口较小时,max会取那个超大的数;视口变大后,max会自动切换为33vw(因为另一个值是负数)。min(100%, ...):把上面的结果和100%视口宽取最小值,这样视口小的时候就会自动取100%宽,视口大的时候就取33vw。box-sizing: border-box:确保div的内边距、边框不会额外撑开宽度,让计算的宽度完全符合预期。
你可以自己测试下:把浏览器窗口拉窄到900px以下,div会占满整个父容器;拉到900px以上,div会变成33%的视口宽,而且就算视口再缩小回900px以下,又会自动变回100%宽,完全匹配你的需求~




