首页前端开发CSS用css怎么实现实现宽高比

用css怎么实现实现宽高比

时间2024-01-28 08:07:03发布访客分类CSS浏览330
导读:收集整理的这篇文章主要介绍了用css怎么实现实现宽高比,觉得挺不错的,现在分享给大家,也给大家做个参考。实现方法:1、利用padding属性和“%”单位;2、利用padding和calc( 属性;3、利用padding属性和CSS变量;4、...
收集整理的这篇文章主要介绍了用css怎么实现实现宽高比,觉得挺不错的,现在分享给大家,也给大家做个参考。

实现方法:1、利用padding属性和“%”单位;2、利用padding和calc()属性;3、利用padding属性和CSS变量;4、利用padding属性和伪元素;5、直接利用视窗单位“vw”;6、使用视窗单位配合CSS Grid布局。

本教程操作环境:windows7系统、CSS3& & HTML5版、Dell G3电脑。

长宽比故事

长宽比在影视制作中又被称之为宽高比,指的是一个视频的宽度除以它的高度所得到的比例,通常表示为@H_512_20@x:y或x×y,其中的冒号和叉号表示中文的“比”之意。目前,在电影工业中最常被使用的是anamorphic比例(即2.39:1)。传统的4:3仍然被使用于现今的许多电视画面上,而它成功的后继规格16:9则被用于高清晰度电视或数字电视上。常见的比例:

有关于长宽比更多的介绍可以阅读Wiki上的AsPEct ration一文。

HTML结构

使用CSS实现容器长宽比,常见的HTML模板结构有两种:

div class="aspectration" data-ratio="16:9">
        div class="content">
    /div>
    /div>
    

另外一种结构是:

div class="aspectration" data-ratio="16:9">
    /div>
    

具体使用的时候,根据自己使用场景采用不同的结构。

CSS实现长宽比例方案

前面也提到过了,使用CSS实现长宽比方案有多种,下面简单的罗列一下这些方案。不过每种方案都不会详细介绍,因为代码非常简单,看一眼代码就能明白其中原理。

垂直方向的padding

这是最早提出的一种实现方案,主要借助的原理是利用padding-top或者padding-bottom的百分比值,实现容器长宽比。在CSS中padding-toppadding-bottom的百分比值是根据容器的width来计算的。如此一来就很好的实现了容器的长宽比。采用这种方法,需要把容器的height设置为0。而容器内容的所有元素都需要采用posITion:absolute,不然子元素内容都将被padding挤出容器(造成内容溢出)。

比如我们容器的长宽比是16:9,那么根据计算:100% * 9 / 16可以得到56.25%。如果你希望的是4:3,那么对应的就是100% * 3 / 4

具体的CSS代码如下:

.aspectration {
        position: relative;
     /*因为容器所有子元素需要绝对定位*/    height: 0;
     /*容器高度是由padding来控制,盒模型原理告诉你一切*/    width: 100%;
 }
.aspectration[data-ratio="16:9"] {
        padding-top: 56.25%;
}
.aspectration[data-ratio="4:3"]{
        padding-top: 75%;
}
    

通过通配符*选择器,让其子元素的宽高和容器.aspectration一样大小:

.aspectration >
 * {
        position: absolute;
        left: 0;
        top: 0;
        width: 100%;
        height: 100%;
}
    

padding & calc()

这个方案采用的是paddingcalc()配合在一起使用。其实原理和第一个方案是一样的。只不过在第一个方案中,我们每次都需要对padding的值计算,如果使用calc()可以通过浏览器直接计算出padding的百分比值。

.aspectration[data-ratio="16:9"] {
        padding-top: calc(100% * 9 / 16);
}
    

padding & CSS变量

对于变量而言,以前是其他计算器语言和CSS处理器的特性,不过值得特性的是,现在也是CSS的特性。接下来的这个方案也是基于padding原理,只不过是借助于CSS变量特性,让前面的方案变得更为灵活一些。使用CSS的变量时,可以把HTML中data-ratio去掉了。换成style="--aspect-ratio:16/9",也可以是style="--aspect-ratio:1.4; "。同时也可以借助于第二个方案中的calc()。因为CSS的变量和calc()函数的结合是一种完美的结合。

.aspectration[style*="--aspect-ratio"] {
        padding-top: calc(100% / (VAR(--aspect-ratio)));
}
    

padding & 伪元素

前面的方案都是在.aspectration元素上使用padding值。但在CSS中,还可以使用CSS的伪元素::before::after来撑开容器。

.aspectration {
        position: relative;
}
.aspectration:after {
        content: "";
        display: block;
        width: 1px;
        margin-left: -1px;
        background-color: orange;
}
.aspectration[data-ratio="16:9"]:after {
        padding-top: 56.25%;
}
.content {
        width: 100%;
        height: 100%;
        position: absolute;
        top: 0;
        left: 0;
}
    

视窗单位

CSS新特性中提供了一种新的单位vw。了解过这个单位的同学都知道,浏览器100vw表示的就是浏览器的视窗宽度(Viewport)。打个比方说,如果你的浏览器是1334px,那么对就的100vw = 1334px。这个时候也就是说1vw = 13.34px。这里的100vw也对应前面方案中的100%。这样我们就可以把前面的%单位换成vw的单位。打个比方说,16:9对应的就是100vw * 9 / 16 = 56.25vw。这个值可以用在padding-top或者padding-bottom中。但这里演示的不再是padding了,而是把这个值给height

.aspectration[data-ratio="16:9"] {
        width: 100vw;
        height: 56.25vw;
}
    

上面的示例中width的值是30vw,那么对应的height值就是30vw * 9 / 16 = 16.875vw

视窗单位 & CSS Grid

这是一个很有创意的解决方案,使用的都是CSS新特性:视窗单位和CSS Grid Layout。简单说一下其中的实现原理:将容器.aspectration通过display:grid声明为一个网格容器,并且利用repeat()将容器划分为横向比例,比如16,那么每一格的宽度对应的就是100vw * 9 / 16 = 6.25vw。同样使用grid-auto-rows,将其设置的值和横向的值一样。在子元素上通过grid-columngrid-row按比例合并单元格。

.aspectration {
        display: grid;
        grid-template-columns: repeat(16, 6.25vw);
        grid-auto-rows: 6.25vw;
}
.aspectration[data-ratio="16:9"] .content {
        grid-column: span 16;
        grid-row: span 9;
}
    

(学习视频分享:css视频教程)

以上就是用css怎么实现实现宽高比的详细内容,更多请关注其它相关文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

上一篇: css怎么去掉焦点框下一篇:css实现三角的原理猜你在找的CSS相关文章 css怎么控制按钮不可用2022-05-17css3中transform属性实现的4种功能2022-04-13纯CSS3实现div按照顺序出入效果2022-04-13CSS实现隐藏搜索框功能(动画正反向序列)2022-04-13使用CSS3实现按钮悬停闪烁动态特效代码2022-04-13CSS3 Tab动画实例之背景切换动态效果2022-04-13CSS实现两列布局的N种方法2022-04-13CSS 实现Chrome标签栏的技巧2022-04-13css实现两栏布局左侧固定宽右侧自适应的多种方法2022-04-13从QQtabBar看css命名规范BEM的详细介绍2022-04-13 其他相关热搜词更多phpjavapython程序员

若转载请注明出处: 用css怎么实现实现宽高比
本文地址: https://pptw.com/jishu/589379.html
css实现三角的原理 css3怎么将滚动条隐藏

游客 回复需填写必要信息