纯css实现视频容器动态尺寸并且固定长宽比

1. 使用场景

PC端播放视频容器一般要求是16:9,同时支持多路视频同时播放,可选多种窗格22 、33 、1*1等等。。。就是要实现宽度变化,高度跟着变化,并且保证长宽比为16:9,或者其他比例,看项目需求。

纯css实现原理

  1. 设置外层容器。开启flex布局,使内部元素动态占满容器,注意开启换行
  2. 设置内部元素宽度,根据不同的窗格数量,设定不同的百分比宽度,让其占满容器
  3. 使用一张图片,其长宽比为16:9,尺寸可以为1920*1080,将其放入每个内部元素,并设置img的宽度为100%,注意不要设置高度,这样图片的宽度总是占满内部元素的宽度,为了保证图片的比例不变,图片的高度会自动变化。然后图片的高度会撑开每个内部元素。从而实现每个内部元素的动态尺寸且固定长宽比;比例由图片本身尺寸控制;
  4. 在每个内部元素(放图片的同级)中设置一个元素,开启定位,让其覆盖在图片上。这里放你的业务组件
  5. 扩展性: 可以让这个图片做成加载中的样式,在业务组件没加载完成之前显示。业务组件加载之后覆盖图片。完美,这样就不用去判断加载中的显示与隐藏,简单实用。

直接上代码(当前组件中没有的class为全局公共class,开发者自己一看就懂)

<template>
  <div class="video-box">
    <div v-for="(e, i) in windowNum" :key="i" :class="['video-item', 'video-' + windowNum]">
      <img :src="tcimg" alt="">
      <div class="video-view">
        视频内容
      </div>
    </div>
    <div>
      <p class="flex flex-row-start" style="margin-top:20px">
        视频规格: <span class="gg-1" @click="changeNum(1)"></span> <span class="gg-1 gg-4" @click="changeNum(4)"></span
        ><span class="gg-1 gg-9" @click="changeNum(9)"></span>
      </p>
    </div>
  </div>
</template>
<script>
export default {
  name: 'SmartthingsWebVideogroup',
  props: {
    winList: {
      type: Array,
      required: true
    }
  },
  watch: {
    winList(n, l) {
      console.log(n, '最新的')
    }
  },
  data() {
    return {
      windowNum: 1,
      tcimg: require('@/assets/images/16-9.png')
    }
  },

  mounted() {
    console.log(this.winList)
  },

  methods: {
    changeNum(val) {
      this.windowNum = val
    }
  }
}
</script>

<style lang="less" scoped>
.video-box {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  flex-wrap: wrap;
  .video-item {
    position: relative;
    margin-top: 10px;
    img{
      width: 100%;
    }
    .video-view{
      position: absolute;
      top: 0;
      left: 0;
      bottom: 0;
      right: 0;
      background: #ccc;
    }
  }
  .video-1 {
    width: 100%;
  }
  .video-4 {
    width: calc(50% - 5px);
  }
  .video-9 {
    width: calc(33.33% - 6px);
  }
}
</style>

效果图

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

CSS中设置`<img>`标签的尺寸非常简单,你可以通过调整其宽度 (`width`) 和高度 (`height`) 属性来控制图片大小。以下是详细说明: ### 常见方法: 1. **固定值 (像素)** 使用具体的数值(如 `px` 单位),指定图像的确切宽高。 ```css img { width: 200px; /* 宽度设为200像素 */ height: 150px; /* 高度设为150像素 */ } ``` 2. **百分比** 百分比单位会基于包含块的尺寸动态计算。这通常用于响应式设计。 ```css img { width: 50%; /* 图片宽度为其容器宽度的一半 */ height: auto; /* 自动保持原始比例 */ } ``` - 如果只设置了其中一个属性而将另一个设为 `auto`,浏览器会自动按原图的比例缩放。 3. **最大限制** 可以利用 `max-width` 或者 `max-height` 来防止图片超出某个范围。 ```css img { max-width: 100%; height: auto; } ``` 这样能保证图片不会溢出它的父元素,并且仍维持原有长宽比。 4. **使用vw/vh等视窗相对长度单位** 根据视口大小调整图像尺寸。 ```css img { width: 50vw; /* 视口宽度一半 */ height: 25vh; /* 视口高度四分之一 */ } ``` ### 注意事项: - 设置了其中之一(`width` or `height`) 并保留另一项为 `auto` 能够很好地维护原来的纵横比率。 - 直接修改HTML内的`width`和`height`属性也能改变图片显示大小,不过更推荐用CSS统一管理样式。 #### 示例代码片段: ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>示例</title> <style> .example-img{ width: 200px; height: auto; } </style> </head> <body> <img src="sample.jpg" alt="示例图片" class="example-img"> </body> </html> ``` 在这个例子中,无论实际图片有多大,它都会被渲染成宽度200像素并自动适应相应的高度以保留比例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Destiny辰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值