zoukankan      html  css  js  c++  java
  • 使用纯 CSS 实现响应式的图片显示效果

      有许多方法可以实现页面里图像的响应式显示(Responsive)。然而,我碰到的所有方案都使用了 JavaScript。这使我疑惑不用 JavaScript 实现图像响应是否可行。

      我提出了下面纯CSS的方案。

      它是如何工作的呢?

      我把<img>标签防止在<span>内。src属性将从服务器获得手机版本的图像。接着我还在<span>元素内部包含了一点CSS。

      什么??HTML文档中能嵌入了CSS?

      是的,只要你增加了scoped属性,这就在HTML5里就是非常有效的。在这个CSS里,我从某个断点开始用了@media查询把作为背景的高清图像添加到<span>里。 在下面这段代码里,我只添加了一个断点,然而你当然可以按你喜欢的增加许多。

      通过使用背景图像指示符,只有在需要的时候才会从服务器获取这个图像。也就是说,只有在media查询满足的时候才能获取到。<img>将确保<span>有正确的高宽比,这样<span>上的背景图像才能得到正确的现实。

      代码展示

      下面是可以运行的所有代码。

      HTML

      首先看HTML。

    1
    2
    3
    4
    5
    6
    <span class="magik-responsive-image" id="image-01">
    <style scoped>
    @media screen and (min- 701px){#image-01{background-image:url(http://dummyimage.com/1600x1200/dcdcdc/000/?text=hi-res);}}
    </style>
    </span>

      CSS 我们还需要对CSS最一点修改,以便在应当显示高清图像的时候隐藏低清晰度的图像。技巧是增加backgroud-size:100%;这使得在维护高宽比不变的情况下伸展背景。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    .magik-responsive-image {
    background-repeat: no-repeat;
    background-size: 100%;
    display: block;
    position: relative;
    }
     
    .magik-responsive-image img {
    max-width: 100%;
    }
     
    @media screen and (min-width: 701px) {
     
    .magik-responsive-image img{
    opacity: 0;
    }
    }

      好处

    • 没有JavaScript
    • 实现起来简单
    • 还可用于视频(我将在以后的博客文章中发表有关这方面的内容)

      缺点

    • 在桌面环境下,需要向服务器发送两个请求
    • <style>标签的scoped属性在主要的浏览器里仍然没有得到支持。正是由于这个原因,我们才需要增加一个id,不过在后端代码中增加这通常不是问题。

      演示

      看看 这个展示 。

      原文地址:pure-css-responsive-images-yes-javascript

      本文链接:http://www.cnblogs.com/oooweb/p/css-responsive-image-layout.html

  • 相关阅读:
    Maven导包失败三种解决方案-Could not transfer artifact
    MySQL远程登录赋权操作各命令的意思
    大数据技术与应用课堂测试01
    软件体系架构课堂测试01
    设计模式复习笔记23
    设计模式复习笔记22
    设计模式复习笔记21
    设计模式复习笔记20
    设计模式复习笔记19
    设计模式复习笔记18
  • 原文地址:https://www.cnblogs.com/oooweb/p/css-responsive-image-layout.html
Copyright © 2011-2022 走看看