关于响应式的改变HTML元素高度(元素宽高绑定、保持宽高比)

使用百分比高度时的问题

在响应式布局中,往往会设置元素的百分比宽度,以适应视口大小的变化。在很多时候我们希望元素的宽高比不变,如果还是简单的将height写成百分比形式,往往渲染出来的结果是无论我们怎么改变窗口大小,height始终是min-height的值(看不见元素也是这个原因)。

原因

我们知道百分比高度和宽度的计算都是基于父元素高度的。我们溯源到最顶的父元素——html,它的宽度是基于视口宽度的,但是它的高度却是基于内容的,这也就是为什么想通过百分比高度来使高度也响应式改变往往不可行的原因。

方法一:使用padding

主要原理是padding的计算是基于父元素宽度的,我们以保持空div的height=width为例,可以像这样写:

        div {
            width: 60%;
            height: 0%;
            padding-top: 60%;
        }

当然如果用这种方式,你还得必须考虑内容所占的高度,所以一般不推荐这样写。

方法二:使用js

只要原理是在onresize事件中,通过clientWidth属性获取元素的可视宽度,并将其赋值给元素的height。有以下几种写法:

在body中:

<body class=" container" οnresize="new function() {
    var el=document.getElementById('div');
    el.style.height=el.clientWidth+'px';
 }">

注意: 1. clientWidth是没有单位的,需要加上px;2. 虽然大多数标签都有onresize事件,但是只有写在body的onresize中才有效

使用window.onresize

		window.onresize = function () {
            var el = document.getElementById('div');
            el.style.height = el.clientWidth + 'px';
        }

或者是jq的$(window).resize等等。

使用js最为灵活,推荐。

方法三:使用vh和vw

1vh就是视口高度的1%,1vw就是视口宽度的1%,使用这两个单位可以让元素宽高跟随视口大小变化,vh和vw是css3最有用的特性之一。最推荐使用这个方法。

方法四:使用定位

使用Fixed定位或Absolute定位,使元素脱离文档流,这种方法要求元素必须被定位,限制太多,不推荐。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值