CSS min-width/max-width和min-height/max-height二三事

🌙
手机阅读
本文目录结构

min-width / max-widthmin-height / max-height

min-width/max-width

它们是具有边界行为的属性,在做自适应页面时候会大量使用

.container {
    min-width: 1200px;
    max-width: 1400px;
}

上面的CSS就是指定宽度所属范围;

一些论坛图片都是用户上传产生的,因此尺寸会有大有小,为了避免图片在移动端展示过大影响体验,常常会有下面的 max-width 限制:

img {
    max-width: 100%;
    height: auto!important;
}

height:auto 是必需的,否则,如果原始图片有设定 height,max-width 生效的时候,图片就会被水平压缩。强制 height 为 auto 可以确保宽度不超出的同时使图片保持原来的比 例。

但这样也会有体验上的问题,那就是在加载时图片占据高度会从 0 变成计算高度,图文会有明显的瀑布式下落。

与众不同的初始值

width/height 的默认值是 auto,而 min-width/max-width 和 min-heigh/max-height 的初始值则要复杂些。

  • max-width和max-height的初始值是none
  • min-width/min-height 的初始值是 0
    • 作者推出浏览器实际实现的是 auto(未亲自验证)

(1)min-wdith/height 值为 auto 合法。

<body style="min-width:auto;">

结果所有浏览器下:

document.body.style.minWidth; // 结果是 auto

说明 min-*支持 auto 值,同样,如果是 max-width:auto,结果则是’’,进一步证明min-width/height 值为 auto 合法。

(2)数值变化无动画。

下面这么写没有动画;

.box {
    transition: min-height .3s;
}
.box:hover {
    min-height: 300px;
}

下面这么写是有动画的

.box {
    min-height: 0;
    transition: min-height .3s;
}
.box:hover {
    min-height: 300px;
}

权重超越!important ; min权重超越max权重

1.权重超越!important

指的是max-width 会覆盖width,

<img src="1.jpg" style="width:480px!important;">
img { max-width: 256px; }

实际为 256px。会覆盖掉style、!important

2.min权重超越max权重

.container {
    min-width: 1400px;
    max-width: 1200px;
}

小宽度居然比最大宽度设置得还大,min-width 生效,max-width 被忽略,于是,.container 元素表现为至少 1400 像素宽。(注意不是“后来居上”规则)

任意高度元素的展开收起动画技术

写未知高度的图片的展开和收起(传统实现可以使用 jQuery 的 slideUp()/slideDown()方法)

CSS写法如下

.element {
    max-height: 0;
    overflow: hidden;
    transition: max-height .25s;
}
.element.active {
    max-height: 666px; /* 一个足够大的最大高度值 */
}

其中展开后的 max-height 值,我们只需要设定为保证比展开内容高度大的值就可以,因为max-height 值比 height 计算值大的时候,元素的高度就是 height 属性的计算高度,

如果 max-height 值太大,在收起的时候可能会有“效果延迟”的问题,比方说,我们展开的元素高度是 100 像素,而 max-height 是 1000 像素,动画时间是 250 ms,假设我们动画函数是线性的,则前 225 ms 我们是看不到收起效果的,

因为max-height 从 1000 像素到 100 像素变化这段时间,元素不会有区域被隐藏,会给人动画延迟 225 ms 的感觉,

建议 max-height 使用足够安全的最小值,这样,收起时即使有延迟,也会因为时间很短,很难被用户察觉,并不会影响体验。

AXIHE / 精选资源

浏览全部教程

面试题

学习网站

前端培训
自己甄别

前端书籍

关于朱安邦

我叫 朱安邦,阿西河的站长,在杭州。

以前是一名平面设计师,后来开始接接触前端开发,主要研究前端技术中的JS方向。

业余时间我喜欢分享和交流自己的技术,欢迎大家关注我的 Bilibili

关注我: Github / 知乎

于2021年离开前端领域,目前重心放在研究区块链上面了

我叫朱安邦,阿西河的站长

目前在杭州从事区块链周边的开发工作,机械专业,以前从事平面设计工作。

2014年底脱产在老家自学6个月的前端技术,自学期间几乎从未出过家门,最终找到了满意的前端工作。更多>

于2021年离开前端领域,目前从事区块链方面工作了