用css怎么实现实现宽高比


当前第2页 返回上一页

具体的CSS代码如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

.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一样大小:

1

2

3

4

5

6

7

.aspectration > * {

    position: absolute;

    left: 0;

    top: 0;

    width: 100%;

    height: 100%;

}

padding & calc()

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

1

2

3

.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()函数的结合是一种完美的结合。

1

2

3

.aspectration[style*="--aspect-ratio"] {

    padding-top: calc(100% / (var(--aspect-ratio)));

}

padding & 伪元素

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

.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

1

2

3

4

.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按比例合并单元格。

1

2

3

4

5

6

7

8

9

10

.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怎么实现实现宽高比的详细内容,更多文章请关注木庄网络博客

返回前面的内容

相关阅读 >>

css如何设置行间距和字间距

css中的margin是什么意思

css如何实现网页背景动态渐变效果

css如何显示文字的上标和下标

css如何解决不同浏览器下文本兼容的问题

css怎么设置字体白色描边

深入浅析css中的z-index

css怎么使字体更加紧凑

css如何改变鼠标样式

图片之间的间隔css怎么设置

更多相关阅读请进入《css》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...