html5 getComputedStyle + resize 实现动态宽高度等比响应式页面设计

序:通常我们只能控制div的宽度 而不能控制高度,在响应式页面里 如果要这个div是正方形那么必须的用媒体查询在不同的分辨率下写死款高度 今天突发奇想研究了个 用百分比来动态控制div的高度让其与宽度相同 成为一个正方形 甚至任何你想要比例

一,背景:目前移动端大多数图片或视频列表页面的显示,列出几个

可以看出这几个页面都有一个共同点 都有图片 双列 列表单个模块的高度相同  我演技劜他们的源码 都是讲图片设置为固定高度 然后将li撑开 li的宽度设置为50% 然后floatleft 然后用媒体查询使之响应

二 探索

于是我在想 怎么能先设置好li的宽高度 不由图片来控制呢 但是这就存在个问题 我们只能用百分比来设置宽度 高度还是要写死 这依然没有意义 还是要用到媒体查询写好多代码

于是我想到了一个getComputedStyle 这个属性 他是通过后期计算得出页面上某个元素的样式 那么 这样 我们就可以 先设置好宽度 比如50% 然后通过getComputedStyle 获取这个宽度 然后赋值给这个元素的高度

这就成了一个正方形。下来实战一把

三 实战

我们的目的是:双列居中显示正方形 且跟随分辨率大小或浏览器大小等比缩放

1.搭个html框架

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no, minimal-ui" />
    <meta content="yes"name="apple-mobile-web-app-capable"/>
    <meta content="black"name="apple-mobile-web-app-status-bar-style"/>
    <meta name="format-detection"content="telphone=no"/>
    <link rel="stylesheet" href="css/style.css">
    <title>html5 getComputedStyle + resize 实现动态宽高度等比响应式页面设计</title>
</head>
 <body>
  <div class="test">
    <ul>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
        <li></li>
    </ul>
  </div>

 <scirpt src="js/zepto.js"></script></body>
</html>

2. css

*{ margin: 0; padding: 0;}
.test{ width: 100%; }
ul{ width:96%; margin: auto;}
ul:after{ content: "."; visibility: hidden; height: 0; clear: both; display: block;}
ul li{ width: 49%;  margin-top: 10px; background: rgb(230,34,57); list-style: none;}
ul li:nth-child(even){ float: left;}
ul li:nth-child(odd){ float: right;}

css 让li的奇数左浮动 偶数右浮动 达到居中的效果 这样可以不用使用margin 因为margin可能会不准 等分最好的方式是flex 但我们这里只考虑双列所以不用flex

3.js

先我们要写一个获取计算后的样式的函数

function getComStyle(elem, style) {
    var node = document.getElementsByTagName(elem)[0];
    var theStyle;

    if (window.getComputedStyle) { //如果window有getComputedStyle这个属性
        var styleObj = window.getComputedStyle(node, null); //第二个参数是获取伪元素的样式 设置null就是不获取 styleObj是一个包含各种样式属性的对象
        theStyle = styleObj.getPropertyValue(style); //getPropertyValue获取元素css指定的属性值
    } else { //ie
        theStyle = node.currentStyle;
    }
    return theStyle;
}

这里的两个参数分别代表 想要获取样式元素 style是你想要获取的样式 比如我们此刻想获取的是width

接下来我们写主函数设置

$(function(){
    var width = getComStyle("li", "width");
    $(".test ul li").height(width);

})

效果perfect 我们没有设置li的高度 但是现在 他已经有高度了 li成了一个正方形

但是 出了一个问题 当我把改变浏览器的宽度时 他的高度并没有响应

这不是我想要的结果 仔细想 因为当浏览器的宽度改变了 必须要有监听才能使之做出响应的改变 于是想到了 resize 这个函数是当window窗口发生改变时触发

$(window).resize(function(){
    var width = getComStyle("li", "width");
     $(".test ul li").height(width);

})

这下好了 浏览器的宽度改变时 我们依然可以获取宽度 并赋值给高度

四  发散

既然我们可以让他成为正方形当然也可以让他成为长方形 或者任何我们想要的方形 于是我们再写一个可以控制高度的函数

function controlH(width,n,ele){
    newW=parseInt(width.replace("px",""));
    var height=newW*n;
    $(ele).height(height);
}

这三个参数分别为 获取元素的宽度, 想要设置高度为宽的倍数 ,元素

完整的js

 var i = 0;
//主函数
 $(function() {
     var width = getComStyle("li", "width");
     $(".test ul li").height(width);
     controlH(width, 0.8, "li");
 })

//窗口改变时触发
 $(window).resize(function() {
     var width = getComStyle("li", "width");
     i++
     controlH(width, 0.8, "li");
     console.log(i);
 })

//获取元素宽度
 function getComStyle(elem, style) {
     var node = document.getElementsByTagName(elem)[0];
     var theStyle;
     if (window.getComputedStyle) {
         var styleObj = window.getComputedStyle(node, null);
         theStyle = styleObj.getPropertyValue(style);
     } else { //ie
         theStyle = node.currentStyle;
     }
     return theStyle;
 }

//设置元素高度
 function controlH(width, n, ele) {
     newW = parseInt(width.replace("px", ""));
     var height = newW * n;
     $(ele).height(height);
 }
controlH(width, 0.8, "li")情况下的页面显示

controlH(width, 1, "li") 页面显示

controlH(width, 1.5, "li") 页面显示
时间: 2024-07-28 18:36:51

html5 getComputedStyle + resize 实现动态宽高度等比响应式页面设计的相关文章

html5/css3响应式页面开发总结

一,自适应和响应式的区别 自适应是一套模板适应所有终端,但每种设备上看到的版式是一样的,俗称宽度自适应. 响应式一套模板适应所有终端,但每种设备看到的版式可以是不一样的. 虽然响应式/自适应网页设计会带来兼容各种设备工作量大.代码累赘.加载时间长的缺点,但它们跨平台和终端,能"一次设计,普遍适用",可以根据屏幕分辨率自适应以及自动缩放图片.自动调整布局,它们不只是技术的实现,更多的是对于设计的全新思维模式. 很多网站的解决方法,是为不同的设备提供不同的网页,比如专门提供一个mobile

HTML5+CSS3的响应式网页设计:自动适应屏幕宽度

这几天都在修改博客上面的样式.本来用的是d83.0的模板.自己又修改了许多地方,其中自己修改的一些地方在手机里面显示的效果不是很理想,于是想改成自适应的效果.对CSS3不是特别的熟练,只能去网上找找案例看了.发现一个不错的文章.写的比较入门,也很仔细.所以拿过来分享给大家.如果还想看图片的响应式案例可以看我找的另外的一篇<分享一个非常有用的HTML5+CSS3响应式图片案例>. 移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈

html5 + css3 + jQuery + 响应式布局设计

1. [代码][HTML]代码     <!DOCTYPE html><html dir="ltr" lang="zh-CN"><head><meta charset="utf-8" /><title>html5 - 新增属性与技术总结 - by sole</title><meta name="keywords" content="html

【01】《响应式Web设计:HTML5和CSS3实战》

[01] (魔芋:已看完.) [01]<响应式Web设计:HTML5和CSS3实战>(非扫描版)(全).pdf 共246页. 2013年1月出版. 读后感:适合入门的书籍,对于响应式布局,用了一个例子来讲解.后半部分讲了一些CSS3的新属性.阴影,transform,transition等. [英]ben frain 著 王永强 译

响应式Web设计:HTML5和CSS3实战 第2版 (本&#183;弗莱恩) 中文pdf完整版

本书将当前Web 设计中热门的响应式设计技术与HTML5 和CSS3 结合起来,为读者全面深入地讲解了针对各种屏幕大小设计和开发现代网站的各种技术.书中不仅讨论了媒体查询.弹性布局.响应式图片,更将新的和有用的HTML5 和CSS3 技术一并讲解,是学习新Web 设计技术不可多得的佳作. - 理解响应式设计,以及为何它对现代Web设计如此重要 - 清晰.高效地编写富有语义的HTML5标记 - 使用CSS3媒体查询基于设备应用不同的样式,了解媒体查询的*进展 - 根据不同的屏幕大小.分辨率和使用环

html5/css3响应式页面的设计流程

第一步:确定需要兼容的设备类型.屏幕尺寸 通过用户研究,了解用户使用的设备分布情况,确定需要兼容的设备类型.屏幕尺寸. 设备类型:包括移动设备(手机.平板)和pc.对于移动设备,设计和实现的时候注意增加手势的功能. 屏幕尺寸:包括各种手机屏幕的尺寸(包括横向和竖向).各种平板的尺寸(包括横向和竖向).普通电脑屏幕和宽屏. 需要考虑的问题: 某个页面进行响应式设计时其适用的尺寸范围是哪些?比如,1688搜索结果页面,跨度可以从手机到宽屏,而1688首页,由于结构过于复杂,想直接迁移到手机上,不太现

Web移动端页面 --响应式和动态REM

鄙人最近才刚刚开始学习一些关于移动端的知识,还只是个小白,文中可能有许多理解错误,望指出,请多多见谅. 响应式 什么是响应式页面呢? 顾名思义响应式页面就是能做出响应的页面,它的页面效果不是定死的,会随着用户的改变而改变. 如何着手响应式有以下几个思考的方向 找一份设计图 使用Media Query 隐藏元素 添加meta viewport 明白手机端交互方式的区别 Media Query 是什么 Media query 翻译过来就是媒介查询,媒介就是我们查看这个网页的设备. 媒介查询源于CSS

浅谈移动端的自适应问题——响应式、rem/em、利用Js动态实现移动端自适应

随着3G的普及,越来越多的人使用手机上网.移动设备正超过桌面设备,成为访问互联网的最常见终端.于是,网页设计师不得不面对一个难题:如何才能在不同大小的设备上呈现同样的网页?本篇文章将讲述自适应网页设计的概念和方法,使网页开发人员维护同一个网页代码,即可使网站在多种设备上具有更好的阅读体验.本文详细介绍了自适应网页的实现方法,希望能给迷惑的你带来帮助. 一. 在HTML的头部加入meta标签 在HTML的头部,也就是head标签中增加meta标签,告诉浏览器网页宽度等于设备屏幕宽度,且不进行缩放,

html5/css3响应式布局介绍及设计流程

html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能.移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局的媒体查询media query兼容问题 html5/css3响应式布局介绍 html5/css3响应式布局介绍及设计流程,利用css3的media query媒体查询功能.移动终端一般都是对css3支持比较好的高级浏览器不需要考虑响应式布局的媒体查询media query兼容问题 一个普通的自适应显示的三栏网页,当你用不同的终端来查