CSS实现宽高成比例缩放

用js实现一个宽度自适应,高度随着宽度变化而变化的矩形,相信大家肯定都会。无非是js获取一下元素宽度,然后再计算出相应比例的高度,然后赋给元素,但如果要求只用CSS实现呢。

html代码如下,

<div class=‘container‘>
    <div class=‘dummy‘></div>
    <div class=‘content‘>content</div>
</div>

css代码如下,

.container{
    background-color: silver;
    width:100%;
    position:relative;
    display: inline-block;
}
.dummy{
    margin-top: 100%;
}
.content{
    position:absolute;
    left:0;
    right:0;
    top:0;
    bottom: 0;
}

效果http://jsfiddle.net/Doing93/9oLqyqha/

接下来分析一下,究竟是如何实现的。首先容器container块内包含了两个div,一个是dummy,这个纯粹是为了实现缩放效果加的,另一个content里面放的是我们真正想要展现的内容。其实原理也很简单,大家都知道div是块元素,它默认就是占一行,宽度本来就是自适应的,所以我们需要做的是让它的高度能随宽度改变。在不使用js的前提下,靠的就是前面提到的dummy那个块来实现,dummy只设置了一个css属性,margin-top:100%,相信大家都反应过来了。因为容器宽度已经在那儿了,通过dummy块的margin-top来把整个的高度撑得和宽度一样,当容器宽度改变时,dummy的位置也会改变,进而容器高度就跟着发生了变化。

但是,还是会有个问题——外部容器发生了高度塌陷。而”高度塌陷“这个词大家肯定都不是第一次听到,大家肯定都处理过因为子元素浮动导致父元素高度塌陷,所以这里采用的方法也是类似清除浮动的方法,设置父元素display:inline-block或overflow:hidden。这里说个题外话,不知道大家在使用这两种方法清除浮动的时候有没有过疑问,为什么给父元素这样设置之后就能把父元素高度撑起来呢,准确的原理解释起来有点复杂。可以简单的理解为,当子元素脱离文档流时,父元素不知道子元素的存在,所以导致高度塌陷。当设置父元素为display:inline-block或者overflow:hidden时,迫使父元素去检查自己内部有哪些子元素,而这时候就发现了之前absolute定位的子元素,所以高度就撑开了。

这里给dummy块设置margin-top:100%,出来的是个可自适应缩放的正方形,如果需要长方形只需要更改此值即可,比如需要4:3的长方形,则应设为margin-top:75%。

时间: 2024-11-10 01:26:55

CSS实现宽高成比例缩放的相关文章

html学习之CSS控制宽高背景

该笔记为自学html设计笔记,所有知识点为自己整理,如有疑问请浏览十八哥php教程,教程链接,点击这里. 知识梳理:1.html中的<head>和<body>分别为文本网页的头部和主体部分,其中head主要是定义html的类型和属性,比如title是标题部分,meta是机器搜索时的索引:body是html呈现的主体部分,是浏览网页可以看到得那一部分. 2.CSS 的引入方式 ①外部链接一个CSS文件,我们在HTML头部分标明:<link href="css/my.c

css 布局之定位 相对/绝对/成比例缩放

给body添加 overflow: hidden; 可以将页面所有的 滚动条隐藏,但必须要给body 设置一个高度 overflow: hidden; height:864px; 父元素必须要设置 position:relative 必须设置 width 与 height 且不能用百分比 父层如果是图片,要使用  background: url(bg.jpg) no-repeat; 子元素必须设置 position: absolute; 必须设置 width 与 height 定位使用 top

前端之css(宽高)设置小技巧

一.css宽高自适应: 1.宽度自适应: 元素宽度设为100%(块状元素的默认宽度为100%) 注:应用在通栏效果中 2.高度自适应: height:auto;或者不设置高度 3.最小,最大高度,最小,最大宽度: a)最小高度 min-height:value; IE6不识别min-height属性,解决方案如下: 方案一:min-height:100px; _height:100px; 方案二:min-height:100px; height:auto!important; height:10

web前端入门到实战:CSS不定宽高的垂直水平居中,9 种方式总汇

垂直居中,在 CSS 中是一个老生常谈的问题,面试的时候也会时常被提及.所以,今天我们就来聊聊 9 种不同的居中方法. 有常见的 flex.transform.absolute 等等.也有 CSS3 的网格布局.还有伪元素的方法,是的,你没有看错,::after 和 ::before 也可以实现居中. 1.flex 大家的第一反应,可能就是 flex 了.因为它的写法够简单直观,兼容性也没什么问题.是手机端居中方式的首选. <div class="wrapper flex-center&q

css未知宽高的盒子div居中的多种方法

不知道盒子大小.宽高时,如何让盒子上下左右居中? 应用场景:比如上传图片时,并不知道图片的大小,但要求图片显示在某盒子的正中央. 方法1:让4周的拉力均匀-常用 <!-- Author: XiaoWen Create a file: 2017-01-13 13:46:47 Last modified: 2017-01-13 14:05:04 Start to work: Finish the work: Other information: --> <!DOCTYPE html>

CSS未知宽高元素水平垂直居中

方法一 思路:显示设置父元素为:table,子元素为:cell-table,这样就可以使用vertical-align: center,实现水平居中优点:父元素(parent)可以动态的改变高度(table元素的特性)缺点:IE8以下不支持 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>未知宽高元素水平垂直居中&l

css设置容器宽高保持比例

html: <div class = "father"> <div class = "daughter"></div> </div> css: .father { width: 100%; } .daughter { width: 20%; height: 0; padding-top: 20%; background: black; } 主要知识:上下边距的百分比数值是以父元素宽度作为参照的.

等比例缩放生成缩略图

    ///    /// 等比例缩放生成缩略图    ///    /// 源图路径(物理路径)    /// 缩略图宽度    /// 缩略图高度(依缩略图宽度等比例计算所得)    public void MakeThumbnail(String originalImagePath, Int32 width, Int32 height)    {        //获取原始图片        using (System.Drawing.Image originalImage = Syst

鼠标拖拉按比例缩放的JavaScript

利用JS写的一个拖拉缩放框,可以设置按比例缩入.像PS软件一样的裁切区域,代码可要费的劲看哦,要不然看不懂的. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml&q