css--全屏布局

本文详细总结了全屏布局的两种常见方案——定位与Flex布局,包括其结构、实现方式、兼容性、性能及自适应能力。通过对比分析,帮助开发者选择最适合项目需求的布局方案。

之前写了几个居中布局的例子,同时也提到了对于页面的全屏布局。这里详细总结两种常见的全屏布局的案例,当然,实际上还有像Grid这样的方案,但是因为目前还不稳定,只是作为W3C的一个草案,兼容性自然就差一些,这里没有作深入的探讨。

相信这样的页面布局,我们在很多后台系统上会经常用到:图片描述
用代码表示为这样的结构:

<div class="parent">
    <div class="top"></div>
    <div class="left"></div>
    <div class="right"></div>
    <div class="bottom"></div>
</div>

通常这种结构,我们使用比较多的是定位的方案,除此之外,还有一种Flex方案。

Position

html,body,.parent{height:100%;overflow:hidden;}
.top{position:absolute;top:0;left:0;right:0;height:100px;}
.left{position:absolute;left:0;top:100px;bottom:50px;width:200px;}
.right{position:absolute;left:200px;right:0;top:100px;bottom:50px;}
.bottom{position:absoulte;left:0;right:0;bottom:0;height:50px;}

当需要right的部分随内容自适应,并且滚动条出现在该区域的话,可以在right中嵌套inner,

<div calss="right">
    <div class="inner">
    </div>
</div>

对inner设置个最小高度,并且为right部分增加

.right .inner{min-height:1000px;}
.right{overflow:auto;}

position的这种方案除了ie6外,兼容性非常好,并且对于ie6也有hack技术,比如 ie6下的hack

Flex

<div class="parent">
    <div class="top"></div>
    <div class="middle">
        <div class="left"></div>
        <div class="right"></div>
    </div>
    <div class="bottom"></div>
</div>

在left,和right外层包了一层middle。

.parent{display:flex;flex-direction:column;}//列方向进行布局
.top{height:100px;}
.bottom{height:50px;}
.middle{flex:1;}//占据剩余区域

中间部分:

.middle{flex:1;display:flex;} //作为一个容器,这里默认的,flex-direction:row
.left{width:200px;}
.right{flex:1;}

对于right中如果加滚动条的话,做法同前。
flex的兼容性,对ie9以下不太好,并且flex本身性能不是很好,在手机上尤其如此。

定高定宽的部分换成定百分比

如果对于上例中的定高,定宽的部分,即px换成%,top的10%相对于body。这种情形的话,上面讲的两种方案同样能够实现。代码中的px替换成%即可。

定宽后者定高的部分换成根据内容自适应

考虑如下三种方案

  • Position

  • Flex

  • Grid

首先,定位方案肯定是不合适的,因为px的设置就违背了根据内容自适应的思想。
另外,Grid就像开头将的,用的比较少。
重点考虑Flex方案。

.parent{display:flex;flex-direction:column;}//列方向进行布局
.middle{flex:1;display:flex;}//占据剩余区域
.right{flex:1;}

核心思想就是不对top,bottom,left部分设置具体的百分比。

对比总结

从兼容性,性能,自适应方面考虑,


          兼容性   性能       自适应
Position   好      好       部分自适应
Flex       较差   手机尤其   可自适应
Grid       差     较好      可适应
在非全屏模式下使用 `web-view` 组件时,通常需要根据具体需求调整其布局和样式,同时确保其与小程序其他功能的兼容性。以下是实现 `web-view` 非全屏模式的关键方法和技术要点: ### 1. 设置 `web-view` 的样式布局 在非全屏模式下,`web-view` 可以嵌入到页面的局部区域中,而不是占据整个屏幕。可以通过 CSS 或动态设置 `web-view` 的样式来控制其位置和大小。例如: ```html <template> <view class="container"> <web-view :src="href" style="width: 100%; height: 300px;"></web-view> </view> </template> ``` 通过这种方式,`web-view` 将仅占据页面的特定部分,而不是全屏显示[^1]。 ### 2. 动态调整 `web-view` 的位置和尺寸 在某些场景下,可能需要根据设备状态栏高度或页面布局动态调整 `web-view` 的位置和高度。可以通过调用 `plus.navigator.getStatusbarHeight()` 获取状态栏高度,并结合 `uni.getSystemInfoSync().windowHeight` 获取窗口高度,从而动态设置 `web-view` 的样式属性: ```javascript onLoad() { var currentWebview = this.$scope.$getAppWebview(); // 获取当前web-view setTimeout(function() { var wv = currentWebview.children()[0]; wv.setStyle({ top: plus.navigator.getStatusbarHeight(), // 设置web-view距离顶部的距离 height: uni.getSystemInfoSync().windowHeight - plus.navigator.getStatusbarHeight(), // 设置web-view的高度 scalable: false // 设置web-view的页面是否可以缩放 }); }, 1000); // 延迟执行以确保页面加载完成 } ``` 此方法确保 `web-view` 的布局能够适配不同设备的屏幕尺寸,同时避免全屏显示[^1]。 ### 3. 处理 `web-view` 与小程序的交互 在非全屏模式下,`web-view` 可能需要与小程序进行交互,例如通过 JSAPI 调用小程序的功能(如扫码、支付等)。为了确保交互的正常进行,需要注意以下几点: - **添加 `id` 属性**:为 `web-view` 标签添加 `id` 属性,以确保小程序与 H5 页面之间的通信正常。 - **调试工具的使用**:在开发过程中,可能会遇到 `web-view` 加载异常或通信失败的问题。可以通过重启 IDE、使用真机调试或生成预览码在手机上进行测试[^3]。 ### 4. 避免 `web-view` 的缓存问题 如果 `web-view` 页面被设置为 Tab 页面,其加载的业务域名网站可能会被缓存。为了避免不必要的缓存问题,可以在页面加载时通过动态参数传递时间戳或随机字符串,以确保每次加载的页面都是最新的: ```html <web-view :src="href + '?timestamp=' + new Date().getTime()"></web-view> ``` 此方法可以有效避免因缓存导致的页面内容不更新问题[^2]。 ### 5. 优化 `web-view` 的性能 由于 `web-view` 是嵌入的网页组件,其性能可能不如小程序原生组件。为了优化性能,可以采取以下措施: - **减少 `web-view` 的加载内容**:尽量减少网页的复杂度和加载资源,以提升页面加载速度。 - **合理使用 `scalable` 属性**:将 `scalable` 设置为 `false`,以避免用户缩放页面带来的性能损耗[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值