html中img圖片截取顯示中間部分


HTML中img標簽只顯示圖片中心位置的方法

我之前在網上搜到其他的方法:

第一種:

用到css的clip:rect(top right bottom left);用法,需要配合position: absolute使用:如下

<img src="圖片地址" style="position: absolute;clip: rect(0px,250px,200px,50px);width: 300px;height: 200px">

注意:width和height是圖片的實際寬高比的等比例縮放大小,再用rect方法來設置圖片的剪切范圍。

第二種:

用img的background屬性:

<style type="text/css"> img { background-image: url(圖片地址);//設置背景圖片 background-repeat: no-repeat;//背景圖像將僅顯示一次。 background-attachment: scroll;// background-position: -50px 0px;//設置背景圖片的的偏移量,這個-50相當於背景整體向左偏移50,就可以顯示圖片的中心 background-size: 300px 200px;設置背景圖片的大小,相當於圖片實際寬高等比例餓縮放的 background-color: transparent;// width: 200px;// height: 200px;// } </style>

注意:background-size是圖片的實際寬高比的等比例縮放大小,並且由於用的不是img的src屬性,所以不能使用onerror以及onload方法,另外當圖片沒有src時,會出現一個灰色邊框和一個圖片icon:
在這里插入圖片描述
解決辦法:
css里添加一句:

img[src=""],img:not([src]){ opacity:0; }

但以上兩種方法都需要知道圖片的寬高比,然而需求的條件是:1.圖片大小不確定 2.圖片節點是動態生成的 3.要做圖片加載錯誤的處理

所以方法三:

在div中包含img,用div的overflow: hidden;來控制,用起來比較靈活

html代碼:

<div class="img"> <img src="....." onerror="this.src=assets/pro-ping.png;" onload=imgOnload(this) /> </div>;

或者js動態加載節點:

js代碼:

if(data.cover) { cover = ' <div class="img">' + ' <img src="' + data.cover + '" οnerrοr="this.src=assets/pro-ping.png;" οnlοad=imgOnload(this) />' + ' </div>'; }

css:

//外層容器要限制一下寬高和超出隱藏 .img { margin-bottom: 0.32rem; height: 3.5rem; border-radius: 0.16rem; background: #636363; overflow: hidden; }

js代碼:

function imgOnload(e) { var wid = e.parentNode.offsetWidth;//父容器限制高度 var hei = e.parentNode.offsetHeight;//父容器限制寬度 var realWidth = e.width; //儲存圖片實際寬度 var realHeight = e.height; //儲存圖片實際高度 //獲取圖片寬高比 var realwh = e.width / e.height; if(realwh > wid/hei) { var w = ((hei / realHeight) * realWidth) + 'px'; var h = hei + 'px'; var l = '-' + ((hei / realHeight) * realWidth - wid) / 2 + 'px'; e.style.width = w; //等比縮放寬度 e.style.height = h; //跟div高度一致 e.style.left = l; //設置圖片相對自己位置偏移為img標簽的寬度-高度的一半 e.style.position = 'relative'; } else { var w = wid +'px'; var h = ((wid / realWidth) * realHeight) + 'px'; var t = '-' + ((wid / realWidth) * realHeight - hei) / 2 + 'px'; e.style.width = w; //等比縮放寬度 e.style.height = h; //跟div高度一致 e.style.top = t; //設置圖片相對自己位置偏移為img標簽的寬度-高度的一半 e.style.position = 'relative'; } }

效果
原圖:
在這里插入圖片描述
效果:
在這里插入圖片描述
需要注意的是,由於我使用的是rem,當頁面大小變化時,圖片父節點已經加載完畢,大小已控制,此時圖片的寬高就會是頁面大小改變前的寬高,顯示的圖片的位置會有問題,刷新即可解決,或者做一個頁面大小變化時的處理即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM