有許多方法可以實(shí)現(xiàn)web頁(yè)面里圖像的應(yīng)答。然而,我碰到的所有方案都使用了JavaScript。這使我疑惑不用JavaScript實(shí)現(xiàn)圖像響應(yīng)是否可行。
我提出了下面純CSS的方案。
它是如何工作的呢?
我把<img>標(biāo)簽防止在<span>內(nèi)。src屬性將從服務(wù)器獲得手機(jī)版本的圖像。接著我還在<span>元素內(nèi)部包含了一點(diǎn)CSS。
什么??HTML文檔中能嵌入了CSS?
是的,只要你增加了scoped屬性,這就在HTML5里就是非常有效的。在這個(gè)CSS里,我從某個(gè)斷點(diǎn)開始用了@media查詢把作為背景的高清圖像添加到<span>里。 在下面這段代碼里,我只添加了一個(gè)斷點(diǎn),然而你當(dāng)然可以按你喜歡的增加許多。
通過(guò)使用背景圖像指示符,只有在需要的時(shí)候才會(huì)從服務(wù)器獲取這個(gè)圖像。也就是說(shuō),只有在media查詢滿足的時(shí)候才能獲取到。<img>將確保<span>有正確的高寬比,這樣<span>上的背景圖像才能得到正確的現(xiàn)實(shí)。
代碼展示
下面是可以運(yùn)行的所有代碼。
HTML
首先看HTML。
<span class="magik-responsive-image" id="image-01">
<img src="http://dummyimage.com/200x150/cdcdcd/000/?text=lo-res" alt="TODO">
<style scoped>
@media screen and (min-width: 701px){#image-01{background-image:url(http://dummyimage.com/1600x1200/dcdcdc/000/?text=hi-res);}}
</style>
</span>
CSS 我們還需要對(duì)CSS最一點(diǎn)修改,以便在應(yīng)當(dāng)顯示高清圖像的時(shí)候隱藏低清晰度的圖像。技巧是增加backgroud-size:100%;這使得在維護(hù)高寬比不變的情況下伸展背景。
.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;
}
}
好處
- 沒(méi)有JavaScript
- 實(shí)現(xiàn)起來(lái)簡(jiǎn)單
- 還可用于視頻(我將在以后的博客文章中發(fā)表有關(guān)這方面的內(nèi)容)
缺點(diǎn)
- 在桌面環(huán)境下,需要向服務(wù)器發(fā)送兩個(gè)請(qǐng)求
- <style>標(biāo)簽的scoped睡醒在主要的瀏覽器里仍然沒(méi)有得到支持。正是由于這個(gè)原因,我們才需要增加一個(gè)id,不過(guò)在后端代碼中增加這通常不是問(wèn)題。
演示
看看 這個(gè)展示 。
原文地址:pure-css-responsive-images-yes-javascript
哈爾濱品用軟件有限公司致力于為哈爾濱的中小企業(yè)制作大氣、美觀的優(yōu)秀網(wǎng)站,并且能夠搭建符合百度排名規(guī)范的網(wǎng)站基底,使您的網(wǎng)站無(wú)需額外費(fèi)用,即可穩(wěn)步提升排名至首頁(yè)。歡迎體驗(yàn)最佳的哈爾濱網(wǎng)站建設(shè)。
