css宽度百分比高度跟宽度一样,CSS 宽度为百分比时,设置元素高度等于其宽度(正方形)...

两种实现方法:

css

padding-top padding-bottom ,主要知识点是: padding-top、padding-bottom百分比值是相对包含块的宽度来算的。

大漠老师这个答案妙啊

70376d87d71e

效果预览

body {

width: 100%;

font-size: 0;

text-align: center;

}

div {

display: inline-block;

width: 20%;

background: green;

font-size: 12px;

position: relative;

vertical-align: middle;

}

div:nth-child(2n) {

background: orange;

}

div:before {

content: "";

display: inline-block;

padding-bottom: 100%;

width: .1px;

vertical-align: middle;

}

span {

display: inline-block;

vertical-align: middle;

font-size: 4em;

color: #fff;

}

1
2
3
4
5
6
7
8
9
10

当然,可以把用 flex 替代 inline-block。使用 flex 又有点新的问题,我用 flex 时指定了容器的高度,然后 flex-item 的高度就自己膨胀了,,,最后我给 flex-item 一个 margin: auto解决的,也不知道这样对不对。。

其实还可以用 vw 来实现,width 和 height 都用 vw 作为单位。不过这一般适合在移动端使用。还看到有通过 calc 计算宽度来实现的 height: calc(width);,但是兼容很差?骚断腿,chrome 都无效。可能是根本不行吧。。

js 。

一行代码解决:

$(document).ready(function(){

$('#box1').css('height',$('#box1').css('width'));

})

看起来很简洁又易懂是吧,可还是 css 实现比较好。

通过 js 改变元素的 height 需要在页面渲染完成之后先获取元素的 width,再更改 height,对性能的消耗比较大。

上面是通过 jQuery 来实现的。我想用原生的 js 来实现,可遇到不少问题。

原生 js 如何获取和设置元素的样式?

someElementObject.style?然后我就发现 someElementObject.style.width 为空。

为什么为空啊?找答案时发现一条扎心的老回复。

70376d87d71e

14年前的扎心回复

其实 style 只是内联样式。

那如何获得实时的 style 呢?最后发现好像只能通过 Window.getComputedStyle()。用法:

let style = window.getComputedStyle(element, [pseudoElt]);

然后设置内联样式 height 为当前 width:

item.style.height = window.getComputedStyle(item, null).width;

就行了。

可如果你改变屏幕大小,还是会出问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值