css中关于fit-content尺寸的属性

css体系中的尺寸,明显的表现就是元素的width和height了,另外就是因为display:inline-block、float:left和position:absolute的设置,导致元素尺寸收缩,比如position:absolute的设置。如下图:
在这里插入图片描述
这个是div元素默认的尺寸,我们给div设置position:absolute后,div元素脱离当前的文档流:
在这里插入图片描述
如果是设置display:inline-block的时候,虽然div元素没有脱离文档流,但是同样会尺寸收缩:
在这里插入图片描述
元素尺寸接近于内容的尺寸。

还有一个属性white-space: nowrap,这是不允许元素内容换行,可能会导致内容溢出。

在css3中,这些比较模糊的概念都有了明确的定义,在尺寸属性中新增几个关键字:包括fit-content、fill-available、min-content和max-content。

一下内容分别解释这四个属性的区别以及用法:

fit-content

翻译过来就是合适的内容,那么width:fit-content,fit-content关键字和display:inline-block和position:absolute的效果一样的。这样我们可以使用display:inline-block或者是display:table实现尺寸收缩效果,并且兼容性更好。为什么还要单独新增fit-content关键字呢?

fit-content有两个有点:

  1. 保护了元素原始的diaplay计算值,比如li元素设置display:inline-blcck,那么前面的符号失效,::marker伪元素失效
  2. 让元素尺寸有个确定的值。有个典型的场景:绝对定位,水平垂直居中。如果决定定位的元素有明确的width和height,那么可以这样设置:

        .flex {
            border: 1px solid red;
            position: absolute;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            margin: auto;
            width: 300px;
            height: 300px;
        }

在这里插入图片描述
但是,很多时候定位元素是没有明确width和height的。虽然我们可以通过transform来完成居中效果:

        .flex {
            border: 1px solid red;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%,-50%);
        }

在这里插入图片描述
那要是有需求给这个元素的transform属性设置动效呢?代码如下:

        .flex {
            border: 1px solid red;
            position: absolute;
            top: 50%;
            left: 50%;
            transform: translate(-50%, -50%);
            animation: oo 3s;
        }

        @keyframes oo {
            from {
                transform: translateY(20px)
            }

            to {
                transform: translateY(0px);
            }
        }

虽然动画是生效的,但是效果并不是很完美。动画里面的transform属性会干扰transform的原始值,这就是体现fit-content真正价值的时候了:

        .flex {
            border: 1px solid red;
            width: fit-content;
            height: fit-content;
            margin: auto;
            position: absolute;
            top: 0;
            left: 0;
            right: 0;
            bottom: 0;
            animation: oo linear 20s;
        }

        @keyframes oo {
            from {
                transform: translateY(200px);
            }

            to {
                transform: translateY(0px);
            }
        } 

 转载于:https://blog.csdn.net/xuelian3015/article/details/126659273

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值