如何保持容器(div)固定宽高比

简介: 在前端界面中播放视频和图片的时候,为了保持其内容不变形,就需要保持容器的固定宽高比

概述

在播放视频和图片的时候,为了保持其内容不变形,就需要保持容器的固定宽高比

实现方法

1、使用新 css 属性 aspect-ratio

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>aspect-radio</title>
    <link rel="stylesheet" href="/main.css">
    <style>
        .wrap {
    
            width: 80vw;
            aspect-ratio: 16/9;
            background-color: brown;
        }
    </style>
</head>
<body>
    <div class="wrap"></div>
</body>
</html>

2、使用 css 函数 calc 计算方法

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>aspect-radio</title>
    <link rel="stylesheet" href="/main.css">
    <style>
        .wrap {
    
            width: 80vw;
            background-color: blue;
            height: calc(80vw / 16 * 9);
        }
    </style>
</head>
<body>
    <div class="wrap"></div>
</body>
</html>

此方式需要浏览器支持 calccalc 函数的支持还不错

3、使用js动态计算

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>aspect-radio</title>
    <link rel="stylesheet" href="/main.css">
    <style>
        .wrap {
    
            width: 80vw;
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="wrap"></div>
</body>
<script>
    const resize = () => {
    
        const wrapJs = document.querySelector('.wrap-js');
        const wrapJsStyle = getComputedStyle(wrapJs);
        const wrapJsWidth = wrapJsStyle['width'];
        const height = parseFloat(wrapJsWidth) / 16 * 9;
        wrapJs.style.height = `${
      height}px`;
    }
    window.addEventListener('resize', () => {
    
        requestAnimationFrame(resize);
    })
    resize() // 给元素设置初始高度,建议使用css设置
</script>
</html>

此方式兼容性最好,如果需要兼容低版本浏览器可以使用js的方式

源码地址

传送门-Github

有过有其它更好的方式欢迎留言/提pr。

相关文章
|
4月前
|
JavaScript 前端开发 容器
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
vue组件封装——固定宽高比的容器(2种方法:纯CSS实现 + JS实现)
189 2
|
4月前
|
JavaScript 容器
vue 限制在指定容器内可拖拽的div
vue 限制在指定容器内可拖拽的div
36 0
|
运维 前端开发 容器
一文剖析HTML块和内联元素以及DIV容器,运维开发必备前端技能,基本功强化训练。
一文剖析HTML块和内联元素以及DIV容器,运维开发必备前端技能,基本功强化训练。
116 0
|
容器
echarts如何让图表占满整个div容器
echarts如何让图表占满整个div容器
1551 0
echarts如何让图表占满整个div容器
|
容器 前端开发
div中的内容超过容器宽度的问题
问题描述:     排名    参赛选手    月收益    月收益率 在一个div中横向放置了4个inline-block,宽度为百分比,加起来总共是100%。当其中一个inline-block的文字内容超过元素本身的宽度时,发现其他3个inline-block位置会发生改变,但是如果这个inline-block的内容如果为数字或者一整个连续的英文字符串,其他3个inline-block的位置不会发生改变,不过如果这个inline-block的内容为英文段落(单词之间有空格)并且内容超过元素本身的宽度时,其他3个inline-block的位置还是会发生改变。
1335 0
|
JavaScript 前端开发 容器
|
前端开发 容器
css体验优化之图片容器设置宽高比
需求 我们在做web页面的时候,经常会有一些图片列表,例如下图的视频列表以及表情列表:        需求要求: 1. 列表是responsive的,在不同宽度的浏览器下面,图片要自适应容器宽度 2.
1345 0
|
容器
让字体在div容器中垂直居中
1. 只显示一行数据的话: 给容器设置height和line-height,并使两个值相等,再加上over-flow:hidden .test{   height:40px;   line-height:40px;   overflow:hidden; }优点:1.
1084 0