首页 > 其他分享 >CSS3 实现16:9大屏居中显示

CSS3 实现16:9大屏居中显示

时间:2024-03-29 17:24:01浏览次数:25  
标签:CSS3 const 16 -- 缩放 height width 大屏

大屏项目中,一般需要在不同分辨率上显示居中显示大屏内容,且不出现滚动条。实际展示大屏的硬件设备比例不一,为了兼容,并且不出现UI被拉伸的情况,发现可以使用CSS3的transfrom-scale属性,并配合CSS变量实现。
其中transfrom-scale用在大屏绘制最外层盒子上,盒子内的样式按照UI给出的16:9的比例绘制。
效果图:

代码展示最外层盒子的缩放样式及比例计算:
style

<style>
  :root {
    --transformScale: 1;
    --positionWidth: 1920px;
    --positionHeight: 1080px;
  }

  * {
    margin: 0;
    padding: 0;
  }

  .container {
    display: flex;
    align-items: center;
    justify-content: center;
    overflow: hidden;
    height: 100vh;
    width: 100vw;
  }

  .position {
    width: var(--positionWidth);
    height: var(--positionHeight);
  }

  .box {
    height: 1080px;
    width: 1920px;
    background-color: aquamarine;
    transform: scale(var(--transformScale));
    transform-origin: 0% 0%;
  }
</style>

html

<!-- 为了获取屏幕宽高添加的元素 -->
<div class="container">
  <!-- 为了定位添加的元素 -->
  <div class="position">
    <div class="box"></div>
  </div>
</div>

script

<script>
  // 全局缩放比基础宽
  const width = 1920;
  // 全局缩放比基础高
  const height = 1080;
  // 宽高比
  const ratio = 16 / 9;

  const getBaseScale = () => {
    const element = document.getElementsByClassName("container")[0];
    // 获取可视区域的宽度
    const w = element.clientWidth;
    // 获取可视区域的高
    const h = element.clientHeight;
    // 根据宽高计算比例
    let s = 1;
    if (w / h >= ratio) {
      // 设备左右留白 以高度为基础计算缩放比
      s = h / height;
    } else {
      s = w / width;
    }

    const pw = s * 1920 + "px";
    const ph = s * 1080 + "px";

    // 赋值
    document
      .getElementsByTagName("body")[0]
      .style.setProperty("--transformScale", s);
    document
      .getElementsByTagName("body")[0]
      .style.setProperty("--positionWidth", pw);
    document
      .getElementsByTagName("body")[0]
      .style.setProperty("--positionHeight", ph);
  };

  // 窗口变化
  onresize = getBaseScale;

  // 加载
  onl oad = getBaseScale;
</script>

标签:CSS3,const,16,--,缩放,height,width,大屏
From: https://www.cnblogs.com/wttt123/p/18104247

相关文章

  • 转: ltrace 是如何工作的(2016)
    http://arthurchiao.art/blog/how-does-ltrace-work-zh/strace 是一个系统调用,也是一个信号跟踪器(signaltracer),主要用于跟踪系统调用,打印系统调用的参数、返回值、时间戳等很多信息。也可以跟踪和打印进程收到的信号。在前一篇文章strace是如何工作的 中介绍过, strace ......
  • HTML5 和 CSS3 提高
    一、HTML5的新特性HTML5的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。声明:1.新特性增加了很多,但是我们专注于开发......
  • CF1634D Finding Zero
    原题链接每日一题系列。在做过CF1762DGCDQueries后发现这个题跟那个trick一模一样,所以切了,尽管做那道的时候没有想出来。每次任意选出四个数\(a,b,c,d\),规定\(a\leqb\leqc\leqd\)。考虑询问这四个数中所有组合。然后仅保留可能为\(0\)的位置,剩下的删掉。\(f(a,b......
  • P8162 [JOI 2022 Final] 让我们赢得选举
    P8162[JOI2022Final]让我们赢得选举贪心+dp题目要求最小耗时,可以考虑贪心和dp。先考虑贪心。首先,假如我们此时有\(b\)个州得到了选票和协作者,那么下一次演讲一定是\(b\)个协作者和自己一起去同一个州演讲,时间为\(\frac{a_i/b_i}{b+1}\),这样我们的时间一定不会浪费掉。......
  • 除自身以外数组的乘积 - LeetCode 热题 16
    大家好!我是曾续缘......
  • java 16进制转换为ASCII
    /***16进制转换为ASCII**@parambytes源数据*@paramoffset偏移量*@paramlength数据长度*@return{@linkString}*/publicStringconvertHexToAscii(byte[]bytes,intoffset,intlength){StringBuilders......
  • DotNetty客户端获取未编码的16进制数据
    publicoverridevoidChannelRead(IChannelHandlerContextcontext,objectmessage){varbuffer=messageasIByteBuffer;Console.WriteLine($"收到消息{buffer}");if(buffer!=null){//这里可以处理接收到的数据byte[]b......
  • 016、秋登兰山寄张五
    016、秋登兰山寄张五唐●孟浩然北山白云里,隐者自怡悦。相望试登高,心随雁飞灭。愁因薄暮起,兴是清秋发。时见归村人,沙平渡头歇。天边树若荠,江畔洲如月。何当载酒来,共醉重阳节。 【现代诗意译】秋天登兰山寄情张五 你隐居在北山的白云深处,享受着悠然快乐的生活。我登......
  • 【SQL】1661. 每台机器的进程平均运行时间 (四种写法;自连接;case when;窗口函数lead();)
    前述Sql窗口分析函数【lead、lag详解】Hive分析函数lead、lag实例应用lag:用于统计窗口内往上第n行值lead:用于统计窗口内往下第n行值lead(列名,1,0)over(partitionby分组列orderby排序列rowsbetween开始位置precedingand结束位置following)lag和lead......
  • 题解:CF1623B Game on Ranges
    题意理解(建议先自己把原题描述看一遍再来看我的理解)有一个集合,这个集合的元素是区间,一开始集合里只有一个元素就是\([1,n]\)的区间,对这个集合我们可以选择其中的一个元素(区间),然后在区间内选一个数d,以\([l,d-1]\)和\([d+1,r]\)这两个区间替换掉我们选择的这个区间(\(l\)和......