HTML5+rem页面 布局适配方法

本文展示了移动端网页的HTML结构与CSS样式实现,包括视频播放、字体适配、响应式布局以及内容展示的细节。通过设置不同屏幕宽度下的CSS断点,实现了不同设备上的良好视觉体验。同时,页面包含多个列表项,每个项由图片、文字描述和操作按钮组成,适合用于内容展示型应用。

示例

<html>
  <meta charset="UTF-8">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
<meta content="width=device-width,initial-scale=1,user-scalable=no" name="viewport" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-touch-fullscreen" content="yes" />
<meta name="format-detection" content="telephone=no,address=no" />
<meta name="apple-mobile-web-app-status-bar-style" content="white" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
    <head>
        <script src="vue.js"></script>
        <style type="text/css">
          video{
            width: 100%;
            object-fit:fill;
            }
            @media screen and ( min-width: 320px){html{font-size:50px}}
            @media screen and ( min-width: 360px){html{font-size:56.25px}}
            @media screen and ( min-width: 375px){html{font-size:58.59375px}}
            @media screen and ( min-width: 384px){html{font-size:60px}}
            @media screen and ( min-width: 400px){html{font-size:62.5px}}
            @media screen and ( min-width: 414px){html{font-size:64.6875px}}
            @media screen and ( min-width: 424px){html{font-size:66.25px}}
            @media screen and ( min-width: 480px){html{font-size:75px}}
            @media screen and ( min-width: 540px){html{font-size:84.375px}}
            @media screen and ( min-width: 640px){html{font-size:100px}}
            .container {
              width: 100%;
              font-size: 0.28rem;
            }
            .nav {
              /* height: 4rem;
              background-color: #ccc; */
            }
            .mian {
              background-color: #ccc;
               
            }
            ul {
              list-style-type: none;
              margin: 0;
              padding: 0;
              width: 6.2rem;
            }
            ul li {
             width: 3.1rem;
             float: left;
             padding: 0.2rem;
             box-sizing: border-box;
            }
            .img {
              display: inline-block;
              width: 100%;
            }
            img {
              width: 100%;
              
            }
            .text {
              height: 0.8rem;
              border: 1rpx solid #6db33f;
              display: -webkit-box;
              overflow: hidden;/*超出部分隐藏*/
              text-overflow:ellipsis;/* 超出部分显示省略号 */
              white-space: normal;/*规定段落中的文本不进行换行 */
              word-wrap: break-word;
              -webkit-line-clamp:2;
              -webkit-box-orient: vertical;
            }
            .mes {
              display:flex ;
              justify-content:space-between;
              padding: 1%;
            }
            .left {

            }
            .right {

            }
        </style>
    </head>
    <body>
        <div class="container">
          <div class="header">
            <!-- <video controls>
              <source src="https://vd2.bdstatic.com/mda-mdbn24h7nsti4cpf/hd/mda-mdbn24h7nsti4cpf.mp4?v_from_s=hkapp-haokan-nanjing&auth_key=1628215057-0-0-9b3e5778602391384cf1b93c2822dd79&bcevod_channel=searchbox_feed&pd=1&pt=3&abtest=3000186_2" type="video/mp4"></source>
            </video> -->
          </div>
          <div class="nav">
          </div>
          <div class="mian">
             <ul>
               <li>
                 <div class="img"> 
                   <img src="../error.png" alt="" srcset="">
                   <div class="icon"></div>
                  </div>
                  <div class="text">我是内容我是内容我是内容我是内容我是内容我是内容</div>
                  <div class="mes">
                    <div class="left">11111</div>
                    <div class="right">按钮</div>
                  </div>
               </li>
               <li>
                 <div class="img"> 
                   <img src="../error.png" alt="" srcset="">
                   <div class="icon"></div>
                  </div>
                  <div class="text">我是内容</div>
                  <div class="mes">
                    <div class="left">11111</div>
                    <div class="right">按钮</div>
                  </div>
               </li>
               <li>
                <div class="img"> 
                  <img src="../error.png" alt="" srcset="">
                  <div class="icon"></div>
                 </div>
                 <div class="text">我是内容</div>
                 <div class="mes">
                   <div class="left">11111</div>
                   <div class="right">按钮</div>
                 </div>
              </li>
              <li>
                <div class="img"> 
                  <img src="../error.png" alt="" srcset="">
                  <div class="icon"></div>
                 </div>
                 <div class="text">我是内容</div>
                 <div class="mes">
                   <div class="left">11111</div>
                   <div class="right">按钮</div>
                 </div>
              </li>
             </ul>
          </div>
        </div>
        <script>
          
        </script>
    </body>
</html>

效果

在这里插入图片描述

<think>嗯,用户想知道如何用flexible.jsrem实现智能大屏的适配方案。首先,我需要回忆一下相关的知识。记得flexible.js是淘宝团队开发的库,主要用于移动端适配,但这里用户问的是大屏,可能是指PC端或者大屏幕设备,比如数据可视化的大屏。那需要确认一下flexible.js是否适用于大屏。根据提供的引用内容,引用2和引用3提到用flexible.jsrem适配大屏,特别是引用2提到设计稿是1920px,设置最小宽度1024px,结合媒体查询。所以看来这个方法是可以的。 接下来,我需要整理实现的步骤。首先,要引入flexible.js文件,可能需要在HTML中通过script标签引入。然后设置viewport的meta标签,不过flexible.js可能会自动处理这个。然后,确定设计稿的尺寸,比如用户案例中的1920px。根据引用3,原理是将设备分成10等份,所以html的font-size应该是设计稿宽度除以10,比如1920/10=192px。不过引用3中的例子是750px设计稿设置75px,所以这里同理。 然后,开发时使用rem单位,将设计稿中的px值转换为rem。比如一个元素宽度是100px,转换为rem就是100/192=0.5208rem。这时候需要工具来自动转换,比如VSCode的cssrem插件,可以设置基准font-size为192px,这样输入px时自动转rem。同时,可能需要设置媒体查询来限制最大和最小宽度,防止在大屏幕或小屏幕上显示不正常。比如引用2中提到最小宽度1024px,可能需要用媒体查询来调整html的font-size或者固定布局。 另外,要注意动态调整,当窗口大小变化时,flexible.js会监听resize事件,重新计算html的font-size。这样元素大小会根据窗口自动调整。不过对于大屏来说,可能需要保持比例,同时防止过小或过大,所以设置最大和最小宽度是必要的。 然后,最佳实践可能包括:使用Sass或Less来简化rem的计算,比如写一个函数自动转换;结合媒体查询处理极端情况;在flexible.js的基础上进行适当修改,比如禁止缩放,因为大屏可能不需要用户缩放;测试不同分辨率下的显示效果,确保布局的弹性。 可能遇到的问题包括字体大小不适应,图片或图表的自适应处理,以及第三方组件样式的调整。需要确保所有元素都使用相对单位,避免固定px。另外,flexible.js在PC端可能会根据dpr调整缩放,但大屏适配可能需要禁用缩放,保持1倍缩放,这可能需要在flexible.js中进行修改,比如设置dpr为1。 总结步骤应该是:1. 引入flexible.js;2. 设置viewport;3. 确定设计稿宽度,设置html字体大小;4. 开发时用rem单位,借助工具转换;5. 设置媒体查询约束尺寸;6. 处理动态调整和极端情况。 还需要注意引用中的内容,比如引用2提到安装cssrem插件,设置设计稿为1920px,最小宽度1024px,结合媒体查询。引用3提到将设备分10等份,设置html字体大小为设计稿宽度/10。这些都需要整合到回答中,并正确添加引用标识。比如在步骤中提到安装cssrem插件时引用引用2,原理部分引用引用3。 最后,生成相关问题,可能包括flexible.js的原理,如何结合Sass,如何处理动态缩放,或者与其他适配方案的对比。确保问题相关且能引导用户进一步探索。</think>### 如何使用 flexible.jsrem 实现智能大屏适配方案? #### 一、核心原理 1. **flexible.js 的作用** flexible.js 是淘宝团队开发的动态布局适配库,通过将屏幕宽度划分为 10 等份,动态设置 `html` 的 `font-size` 值,使页面元素基于 `rem` 单位实现弹性缩放[^3]。例如,设计稿为 1920px 时,`html` 的基准 `font-size` 为 1920/10=192px,元素尺寸为 `px值/192` rem。 2. **rem 单位的意义** `rem` 是相对于根元素(`html`)字体大小的单位。通过动态调整 `html` 的 `font-size`,所有基于 `rem` 的元素尺寸会按比例缩放,适配不同屏幕。 #### 二、实现步骤 1. **引入 flexible.js** 下载并引入 flexible.js(推荐 2.0 版本),通过 `<script>` 标签添加到 HTML 中: ```html <script src="flexible.js"></script> ``` 2. **设置视口与禁止缩放** 添加 `<meta>` 标签并禁用缩放(大屏通常不需要用户手动缩放): ```html <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"> ``` 3. **开发适配规则** - **设计稿基准**:假设设计稿宽度为 1920px,设置 `html` 的 `font-size` 为 192px(即 1920/10)。 - **单位转换**:开发时,元素的 `px` 值需转换为 `rem`(例如 100px → 100/192≈0.5208rem)。 - **工具辅助**:在 VSCode 中安装 `cssrem` 插件,设置基准值为 192px,自动完成 `px→rem` 转换[^2]。 4. **动态约束与极端情况处理** - **媒体查询限制范围**:设置最小/最大宽度,防止过度缩放: ```css @media screen and (max-width: 1024px) { html { font-size: 102.4px; } } @media screen and (min-width: 3840px) { html { font-size: 384px; } } ``` - **禁用高 DPR 缩放**:修改 flexible.js 源码,固定 `dpr=1`(大屏通常无需高倍缩放)。 #### 三、最佳实践 1. **结合 Sass/Less 简化计算** 使用预处理器函数自动转换 `px` 为 `rem`: ```scss @function px2rem($px) { @return ($px / 192) + rem; } .box { width: px2rem(200); // 输出 width: 1.0417rem; } ``` 2. **弹性布局与百分比** - 容器使用百分比宽度或 `flex` 布局。 - 图片/图表添加 `max-width: 100%` 防止溢出。 3. **测试与优化** - 使用 Chrome 设备模拟器测试不同分辨率。 - 对图表库(如 ECharts)单独配置响应式选项。 #### 四、常见问题 - **字体适配问题**:标题等固定尺寸元素可使用 `vw` 单位辅助适配。 - **第三方组件样式覆盖**:通过全局 CSS 重置组件的 `px` 单位为 `rem`。 - **性能优化**:对频繁触发的 `resize` 事件添加防抖逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值