首页 > 其他分享 >div元素自适应屏幕大小

div元素自适应屏幕大小

时间:2023-06-07 16:37:57浏览次数:47  
标签:style const 缩放 screen 元素 适应 div 屏幕

简单介绍一下实现方式(结尾处有代码) 1.首先创建一个根元素,将这个跟元素宽高设置为100%,当然,用100vw、100vh也可以,并且将根元素设置为相对定位。 2.再创建我们要实现自适应大小的元素,自适应元素我们要给固定的宽高。可以按照常见的屏幕分辨率赋值,1920*1080或者2560*1440。(注:至于为什么要写死,因为自适应是通过css的scale实现的) 3.自适应元素的定位要设置成绝对定位。(为了让自适应元素始终在根元素中水平、垂直都保持居中状态) 4.在js代码中,首先获取根元素与自适应元素的高比例,和宽比例,我们将按照这个比例缩放自适应元素。再获取到根元素自身的宽高比例,已经自适应元素的宽高比例,因为我们要根据他们各自的比例来决定我们最终使用高比例缩放还是宽比例缩放。 5.当自适应元素开始缩放时,要记得设置这个css属性:ransform-origin = 0px 0px; 6.因为我们使用了绝对定位的方式让自适应元素居中,随着根元素的改变,我们的margin值也要动态改变。所以在JS中需要计算出margin值。

效果图:

 

 

 

<!DOCTYPE html>
<html lang="en">

<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>Document</title>
    <style>
        .screen-wrapper {
            height: 100vh;
            width: 100vw;
            overflow: hidden;
            position: relative;
            background-color: #000;
        }

        .screen {
            height: 1440px;
            width: 2560px;
            background-image: url('./wallpaper.jpg');
            background-size: 100% 100%;
            position: absolute;
            left: 50%;
            top: 50%;
        }

        .main {
            height: 200px;
            margin: 200px;
        }

        .title1 {
            font-size: 28px;
            color: #fff;
        }
    </style>
</head>

<body>
    <div id="screen-wrapper" class="screen-wrapper">
        <div id="screen" class="screen">
            <div class="main">
                <span class="title1">人言落日是天涯,望极天涯不见家。</span>
            </div>
        </div>
    </div>

    <script>
        const container = document.getElementById("screen-wrapper");
        const screen = document.getElementById("screen");
        const mainH = screen.offsetHeight;
        const mainW = screen.offsetWidth;

        resetScreen();

        window.addEventListener("resize", function (event) {
            resetScreen();
        })

        function resetScreen() {
            const cw = container.offsetWidth;
            const ch = container.offsetHeight;

            const cB = ch / cw;
            const mainB = mainH / mainW;

            const scaleW = (cw / mainW).toFixed(3);
            const scaleH = (ch / mainH).toFixed(3);

            //容器的高宽比 大于 展示元素的高宽比时,按照宽度缩放
            if (cB > mainB) {
                screen.style.marginLeft = `-${(mainW * scaleW) / 2}px`;
                screen.style.marginTop = `-${(mainH * scaleW) / 2}px`;
                screen.style.transform = `scale(${scaleW})`;
            } else { //容器的高宽比 小于 展示元素的高宽比时,按照高度缩放
                screen.style.marginLeft = `-${(mainW * scaleH) / 2}px`;
                screen.style.marginTop = `-${(mainH * scaleH) / 2}px`;
                screen.style.transform = `scale(${scaleH})`;
            }
            screen.style.transformOrigin = `0px 0px`;
        }
    </script>
</body>

</html>
View Code

标签:style,const,缩放,screen,元素,适应,div,屏幕
From: https://www.cnblogs.com/powerworld/p/17452623.html

相关文章

  • ACM-CodeForces-#685(Div.2)
    A.SubtractorDivide#include<iostream>usingnamespacestd;intmain(){ intT,n; cin>>T; while(T--) { cin>>n; if(n<=3) n--; else n=2+(n&1); cout<<n<<endl; } return0;}B.Non-SubstringSubsequence#in......
  • 打卡第一天| 704. 二分查找 27. 移除元素
    第N遍做这个题 这题也写过很多次了还是有点费劲。需要回忆。用时14min。 ......
  • 自定义上传图片,动态拼接html元素,node插入/替换指定位置旧元素
    <!DOCTYPEhtml><head>  <metaname="viewport"    content="width=device-width,initial-scale=0.5,maximum-scale=1.0,minimum-scale=0.5,user-scalable=yes">  <title>上传图片</title></head><bo......
  • 代码随想录算法训练营第十三天|● 239. 滑动窗口最大值 ● 347.前 K 个高频元素 ● 总
    239.滑动窗口最大值力扣题目链接(opensnewwindow)给定一个数组nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?提示:1<......
  • 不能在foreach 循环中添加或删除元素
    迭代器在遍历map的时候,会先拿到modCount存起来然后遍历,在遍历的时候会判断当前modCount的值与我第一次进来存的值是否一样,不一样就报错如果在循环中添加或删除元素,是直接调用集合的add,remove方法【导致了modCount增加或减少】,但这些方法不会修改迭代实例中的expectedModCount,导......
  • 215. 数组中的第K个最大元素
    给定整数数组nums和整数k,请返回数组中第k个最大的元素。请注意,你需要找的是数组排序后的第k个最大的元素,而不是第k个不同的元素。你必须设计并实现时间复杂度为O(n)的算法解决此问题。 示例1:输入:[3,2,1,5,6,4],k=2输出:5示例 2:输入:[3,2,3,1,2,4,5,5......
  • 通过adb命令获取页面activity所有元素
    /***获取设备当前页面activity控件元素信息*@paramiDevice安卓设备信息*@return*/privateJSONArraygetDevicePageResource(IDeviceiDevice){longstartTime=System.currentTimeMillis();Stringcmd="adb-s"+......
  • 手机屏幕PPI
    PPI:PixelsPerInch缩写,表示每英寸对角线上所拥有的像素(pixel)数目PPI达到一定数值时,人眼就分辨不出颗粒感了。PPI=(X2+Y2)1/2/Z   X代表水平方向的pixel个数,Y代表竖直方向pixel的个数,Z代表屏幕的尺寸,通过量测可得到一般当屏幕的尺寸规格已经定好了,PPI大小就受限于像素工......
  • python+uiautomator2+atx,未开启底部导航栏会存在元素不一致
    如果在同一个安卓手机上,一个应用程序开启了底部导航栏而另一个未开启,在UI自动化测试中,这可能会导致元素在两个应用程序之间的定位方式有所不同。因为不同的应用程序可能会使用不同的布局和元素渲染方式。如果在未开启导航栏的应用程序中无法找到元素,则需要确保您的locator与该应......
  • 503. 下一个更大元素 II
    503.下一个更大元素II题目算法设计:单调栈 题目 算法设计:单调栈前置知识:单调栈原理,请猛击:496.下一个更大元素I和496.下一个更大元素I这题相同,唯一变化是数组变成了循环数组。比如输入[1,2,1],循环数组应该返回[2,-1,2],而不是[2,-1,-1],因为拥有了环形属性,最后一......