设置div高度等于动态宽度

博客探讨如何在响应式设计中使3个div平分屏幕宽度并保持高度与宽度一致。通过设置百分比宽度实现响应式布局,利用CSS或JavaScript动态设置高度,介绍CSS padding-top比例设置和背景图片方法。同时提出解决div与img间padding问题的思路,并提供了demo源码链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中有时候会遇到这个问题:一行有3个div,希望这3个div平分屏幕宽度,并且高度等于宽度。
第一个问题:平分屏幕宽度
可以对div设置百分比宽度,而不是直接用px宽度,这里用到了响应式设计的思想,可以参考这篇文章:自适应网页设计(Responsive Web Design)
第二个问题:动态设置高度和宽度一致
有两种方法,一种是用js动态设置,一种是直接用CSS设置
先看下html代码

<ul>
    <li class="container">
        <div class="dummy">
        </div>
        <div class="element">
            some text
        </div>
    </li>
    <li class="container">
        <div class="dummy">
        </div>
        <div class="element">
            some text
        </div>
    </li>
    <li class="container">
        <div class="dummy">
        </div>
        <div class="element">
            some text
        </div>
    </li>
</ul>

公用的CSS

ul,li{
            list-style: none;
        }
        * {
            margin: 0;
            padding: 0;
            outline: 0
        }
        body {
            margin: 0;
            padding: 0;
            -webkit-appearance: none;
            font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
            font-size: 16px;
        }
        ul{
            margin:10px;
        }
        .container {
            display: inline-block;
            position: relative;
            width: 32%;
            text-align: center;
        }

用js动态设置

var cw = $('.dummy').width();
$('.dummy').css({'height':cw+'px'});
$(window).resize(function() {
        var cw = $('.dummy').width();
        $('.dummy').css({'height':cw+'px'});
});   

用CSS设置

 .dummy {
            padding-top: 100%; /* 1:1 aspect ratio */
            width: 100%;
            background: #333333;
        }

CSS设置padding-top的原理:Use CSS to Specify the Aspect Ratio of a Fluid Element

/———————————————————
然后尝试对图片设置高度等于动态宽度
js方法很简单,跟上面的方法基本相同

<ul>
    <li class="container">
        <img src="images/test_1.jpg"/>
        <div class="element">
            some text
        </div>
    </li>
    <li class="container">
        <img src="images/test_2.jpg"/>
        <div class="element">
            some text
        </div>
    </li>
    <li class="container">
        <img src="images/test_3.jpg"/>
        <div class="element">
            some text
        </div>
    </li>
</ul>
.container {
            display: inline-block;
            position: relative;
            width: 32%;
            text-align: center;
        }
        .container img{
            width: 100%;
            height:100%;
        }
var cw = $('.dummy').width();
$('.dummy').css({'height':cw+'px'});
$(window).resize(function() {
        var cw = $('.dummy').width();
        $('.dummy').css({'height':cw+'px'});
});

CSS方法

<ul>
    <li class="container">
        <div class="dummy">
        </div>
        <div class="element">
            some text
        </div>
    </li>
    <li class="container">
        <div class="dummy">
        </div>
        <div class="element">
            some text
        </div>
    </li>
    <li class="container">
        <div class="dummy">
        </div>
        <div class="element">
            some text
        </div>
    </li>
</ul>
.container {
            display: inline-block;
            position: relative;
            width: 32%;
            text-align: center;
        }
.dummy{
            padding-top: 100%; /* 1:1 aspect ratio */
            width: 100%;
            background:url(images/test_3.jpg) no-repeat;
            -webkit-background-size: 100%;
            background-size: 100%;
        }       

通过设置background可以实现。
div包含img的方法没有试验成功,以后继续尝试
/————————————-
还有一个问题,怎么设置div和img之间的padding,又能保证div宽度是屏幕宽度的三分之一?

demo地址:https://github.com/cc1218/height-equal-to-dynamic-width

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值