CSS clip:rect矩形剪裁功能

CSS中有一個屬性叫做clip,為修剪,剪裁之意。配合其屬性關鍵字rect可以實現元素的矩形裁剪效果。此屬性安安穩穩地存在于CSS2.1中,且使用上基本上沒有類似于max-height/display:table-cell等瀏覽器的兼容性問題。

根據Dreamweaver的自動提示,clip有如下可用屬性關鍵字:

clip屬性支持的關鍵字 張鑫旭-鑫空間-鑫生活

就順序上而言,top → right → bottom → left,在CSS中是統一相承的,就像是margin的四個值的順序,border-width等等的四個值順序——從頭頂上開始,順時針旋轉的說~~不過這里的四個值是不可以縮寫的。

其中top right bottom left表示各個位置的屬性值,就像是width:200px;中的200px,所以,我們會有類似下面的使用:

rect(30px 200px 200px 20px)

那這里的top right bottom left究竟指什么的?我們該如何理解呢?

其實是這樣的,top right bottom left分別指最終剪裁可見區域的上邊,右邊,下邊與左邊。而所有的數值都表示位置,且是相對于原始元素的左上角而言的。于是

rect(30px 200px 200px 20px)

表示的含義就是:最終剪裁的矩形的上邊距離原始元素的上邊緣30像素;剪裁矩形的右邊緣距離原元素左邊緣的距離是200像素;剪裁矩形的下邊緣距離原元素頂部的距離為200像素;剪裁矩形的左邊緣距離原元素左邊緣的距離時20像素。

上面的表述又長有啰嗦又難以理解,你可以這樣想象:饑餓N天的你突然面前出現了塊香噴噴的大大的300厘米*300厘米方形手抓餅,你拔出自己隨著攜帶的鋒利的日本刀,在距離頂部30厘米的地方咔嚓一刀,然后在距離左邊200厘米的地方咔嚓一刀,然后又以迅雷不及掩耳的速度在距離頂部200厘米和距離20厘米的地方咔嚓一刀。啪啪四刀留下的中間的那塊就是剪裁的內容了。所以,您可以將top right bottom left理解為在這些位置拿大刀咔咔修剪。

或者理解為在photoshop中為大背景建四個方向的參考線,如下圖(300像素*300像素)所示:

clip:rect值示意與photoshop參考線 張鑫旭-鑫空間-鑫生活

所謂“一圖勝千言,千言不敵一實例”。為了更加直觀的理解clip:rect后面四個值的含義,我專門做了個demo頁面。您可以狠狠地點擊這里:CSS clip:rect幾個值含義示意demo

在demo頁面中,我已經將4個值分離出來了,您任意修改其中的一個值,頁面上就會出現半透明的黑色層示意這部分內容是將會被剪裁掉的。例如,我們修改第一個值為30,如下圖:

修改第一個值為30像素

失去焦點后就會看到圖片上出現了改值對應的剪裁作用區域:

上邊緣30像素半透明

類似的,我們修改各個框框的值為30 200 200 20,這時,圖片上的效果就是:

四邊應用剪裁數值后的效果

其中圖片中未被黑色半透明層覆蓋的區域就是最后的剪裁區域,您可以點擊下面的“剪裁”按鈕確認剪裁,結果就如下圖所示:

最后的修剪效果圖

您也可以修改其他值做測試的。如果最后圖片全部被半透明層覆蓋,那么圖片最后會被剪裁到一點不剩。

最后有必要說明下:clip:rect矩形剪裁只能作用于position:absolute的元素上

三、clip:rect矩形剪裁的一些應用介紹

1. 可用性隱藏
根據上面對top right bottom left的釋義,如果left >= right或者bottom <= top,則元素會被完全裁掉而不可見,即“隱藏”。通過這種方式隱藏的元素是可以被屏幕閱讀器等輔助設備識別的,從而提高了頁面的可用性。

例如:

clip: rect(1px 1px 1px 1px); /*left = right, bottom = top*/

clip: rect(10px 10px 10px 100px); /*left > right*/

clip: rect(100px 10px 10px 10px); /*bottom < top*/

等,正所謂小手抖一抖,剪裁有木有。//zxx:上面幾個值的效果您可以去part2部分所提供的demo頁面做測試滴。

2. img標簽下的CSS Sprite定位
為了節約圖片資源,我們經常會把小圖片整合到一張圖片上,稱為圖片合并技術,國外稱為CSS Sprite,含“精靈”之意。然后利用元素區域外background內容不可見的特性配合background-position定位實現圖片的精確顯示。

就連萬萬不能沒有的錢都不是萬能的,顯然,background-position下的CSS Sprite定位也不可能適用于各種情況。例如,有時我們希望Sprite圖片可以延遲滾動加載,或者是可以很輕松的右鍵圖片另存為...或者是某些特殊的background-position屬性不起作用的情況。

例如,眾所周知的,IE6瀏覽器不支持Alpha透明通道的png圖片(會有藍藍的背景),例如下圖所示:
IE6不支持32位png圖片示意 張鑫旭-鑫空間-鑫生活

我們可以使用filter濾鏡修復這一問題。然而,如果該png圖片以background-image的形式濾鏡透明化的話是不支持background-position定位的,也就是,我們不可能在IE6下使用background屬性實現png圖片的Sprite定位。此時,要想實現IE6下png圖片的Sprite定位只能在頁面上完成,使用img標簽,而非background-image屬性。

然后,img標簽下的圖片是不會像background-image一樣元素區域外部分自動隱藏,所以,我們需要借助某些手段對齊進行裁剪,此時clip:rect就派上用場了。

您可以狠狠地點擊這里:clip:rect下png圖片Sprite定位demo

demo頁面中的沙發png圖片完整顯示如下:
png sprite圖片原圖 張鑫旭-鑫空間-鑫生活

如果您手頭上的瀏覽器為IE6瀏覽器,則打開demo頁面會看到如下效果:
IE6下demo截圖 張鑫旭-鑫空間-鑫生活

可以看到鼠標移上去后是有Sprite定位切換實現的hover效果:
IE6下png圖片hover 張鑫旭-鑫空間-鑫生活

可以看到為應用透明濾鏡的情況下,使用img標簽配合clip:rect輕松實現了Sprite圖片的hover切換效果。這在background屬性中也能實現,OK,現在點擊下面的“IE6 png透明按鈕”,應用AlphaImageLoader透明濾鏡,然后再鼠標經過,結果也是可以實現hover效果的,見下圖:
應用filter濾鏡后的IE6下hover效果 張鑫旭-鑫空間-鑫生活

CSS代碼如下:

.clip_a{display:block; width:128px; height:128px;}
.clip_a img{border:0; position:absolute; clip:rect(0 128px 128px 0);}
.clip_a:hover{border:0;}
.clip_a:hover img{margin-top:-128px; clip:rect(128px 128px 256px 0);}

由此可見,CSS Sprite的定位不僅僅可以使用background屬性,在頁面上使用img標簽,配合clip:rect剪裁也是可以輕松實現定位效果的。

3. 圖片剪裁的預覽效果
關于圖像剪裁,很早前我曾翻譯過一個名為Jcrop的jQuery插件,文章名為“jQuery照片圖像剪裁插件Jcrop中文翻譯詳解”,其中有個demo是含有剪裁預覽效果的,您可以輕輕地點擊這里訪問。

里面的剪裁預覽采用margin定位,有著較為復雜的計算。
圖片預覽之margin定位 張鑫旭-鑫空間-鑫生活

實際上,像剪裁預覽效果顯示用剪裁屬性來實現是最合適的了。于是,自己利用自己先前寫的原生態的“圖片旋轉+剪裁js插件”中的zxx.crop_rotation.js寫了個圖片剪裁預覽效果demo。

您可以狠狠地點擊這里:clip:rect圖片剪裁效果demo

demo頁面中的旋轉可以直接當空氣,移動,拖動示意區域,就會在右側看到對應的剪裁預覽效果:

剪裁demo效果預覽圖


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/247570.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/247570.shtml
英文地址,請注明出處:http://en.pswp.cn/news/247570.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

CSS隱藏元素的十四種方法

通過設置width:0或者height:0隱藏一個元素&#xff0c;文字隱藏可以設置color為背景色或transparent&#xff0c;但內容還在&#xff0c;所以用font-size:0&#xff1b; 將元素的opacity設置為0&#xff0c;元素本身還在&#xff0c;只是看不見&#xff1b; 通過絕對定位將元…

jquery.lazyload.js詳解

簡介lazyload.js用于長頁面圖片的延遲加載&#xff0c;視口外的圖片會在窗口滾動到它的位置時再進行加載&#xff0c;這是與預加載相反的。優點&#xff1a;它可以提高頁面加載速度&#xff1b;在某些情況清晰它也可以幫助減少服務器負載。安裝bower安裝&#xff1a;$ bower in…

Spring Boot Cache使用與整合

參考&#xff1a; 史上最全的Spring Boot Cache使用與整合Spring Cache擴展&#xff1a;注解失效時間主動刷新緩存 項目地址使用本地Caffeine緩存 引入依賴包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starte…

vue-cli的打包配置文件

轉載原文: 詳解 vue-cli 的打包配置文件代碼&#xff08;給大家寫寫注釋&#xff09;. 一、vue-cli都做了什么 1、build/dev-server.js 文件 項目node的啟動文件&#xff0c;這里面做了webpack配置和node操作&#xff0c; 2、build/webpack.base.conf.js webpack基本配置文件…

Node.js 部署免費/自動續訂 HTTPS

統計了使用 Chrome 瀏覽器&#xff0c;訪問的站點統計中&#xff0c;HTTPS 使用率的增長情況&#xff1a;而在今年 2 月份&#xff0c;Chrome 團隊也宣布&#xff0c;將在 2018 年 7 月份發布的 Chrome 68 中&#xff0c;將沒有部署 HTTPS 的網站標記為 "不安全"。簡…

GSON 循環引用的對象轉為 JSON 造成棧溢出

對象轉 JSON 可能引發棧溢出的異常&#xff0c;一般是因為對象中的循環引用引起不斷遞歸。 常見的作法就是&#xff1a; 換一種 JSON 的序列化工具&#xff0c;比如 fastjson 默認支持消除對同一對象循環引用transient 修飾屬性顯式排除對象的某些屬性1. java對象引用成環說明 …

一些雜七雜八的前端知識1

一、this指向 this是函數運行時自動生成的一個內部對象&#xff0c;只能在函數內部使用 1. 指向全局變量 純粹的函數調用 2. 作為對象方法的調用 對象調用某個函數&#xff0c;這個函數里面所包含的this也就指向使用這個函數的對象了 3. 函數構造新對象時調用 new 4. a…

最新的vue webpack模板沒有dev-server.js文件,進行后臺數據模擬筆記

最新的vue里dev-server.js被替換成了webpack-dev-conf.js 在模擬后臺數據的時候直接在webpack-dev-conf.js文件中修改 第一步&#xff0c;在const portfinder require(‘portfinder’)后添加//第一步 const express require(express) const app express()//請求server var a…

20080331 - What is a PID, How is it useful when troubleshooting a system

PID Process Identifier, 是一個全局唯一的用來標識進程的整數。在多任務系統中&#xff0c;可用來診斷系統中發生錯誤的進程。 轉載于:https://www.cnblogs.com/likun/archive/2008/03/31/1130458.html

記一次el-input使用的坑

記一次el-input使用的坑 el-input使用不同與原生input&#xff0c;所以在vue中改變綁定的數據時需注意 <el-input v-model"form.schedule" input"validateNumber($event)" />要想在input時改變form.schedule的值來改變輸入框顯示的值&#xff0c;以…

使用pm2啟動Node和Vue項目教程

安裝pm2 $ npm install -g pm2 命令行全局安裝pm2 將pm2加入到命令中去?1234ln -s /usr/local/src/node-v8.9.1-linux-x64/bin/pm2 /usr/local/bin/pm2ln -s /usr/local/src/node-v8.9.1-linux-x64/bin/pm2-dev /usr/local/bin/pm2-devln -s /usr/local/src/node-v8.9.1-lin…

對正則的研究

視頻鏈接地址&#xff08;視頻格式可按需增刪&#xff09; /^https?:\/\/.*?(swf|avi|flv|mpg|rm|mov|wav|asf|3gp|mkv|rmvb|mp4)$/i 圖片鏈接地址&#xff08;圖片格式可按需增刪&#xff09; /^https?:\/\/.*?(gif|png|jpg|jpeg|webp|svg|psd|bmp|tif)$/i 24小時制時間&a…

MVVM原理還你

眾所周知當下是MVVM盛行的時代&#xff0c;從早期的Angular到現在的React和Vue&#xff0c;再從最初的三分天下到現在的兩虎相爭。 無疑不給我們的開發帶來了一種前所未有的新體驗&#xff0c;告別了操作DOM的思維&#xff0c;換上了數據驅動頁面的思想&#xff0c;果然時代的進…

poj1316

1&#xff0e;鏈接地址 https://vjudge.net/problem/POJ-1316 2&#xff0e;問題描述 In 1949 the Indian mathematician D.R. Kaprekar discovered a class of numbers called self-numbers. For any positive integer n, define d(n) to be n plus the sum of the digits of …

CSS頁面布局解決方案大全

前端布局非常重要的一環就是頁面框架的搭建&#xff0c;也是最基礎的一環。在頁面框架的搭建之中&#xff0c;又有居中布局、多列布局以及全局布局&#xff0c;今天我們就來總結總結前端干貨中的CSS布局。 居中布局 水平居中 1&#xff09;使用inline-blocktext-align&#xff…

AES加密算法的學習筆記

AES簡介高級加密標準(AES,Advanced Encryption Standard)為最常見的對稱加密算法(微信小程序加密傳輸就是用這個加密算法的)。 對稱加密算法也就是加密和解密用相同的密鑰&#xff0c;具體的加密流程如下圖&#xff1a; 下面簡單介紹下各個部分的作用與意義&#xff1a; 明文P沒…

為什么要用setTimeout模擬setInterval ?

setInterval有兩個缺點&#xff1a; 使用setInterval時&#xff0c;某些間隔會被跳過&#xff1b;可能多個定時器會連續執行&#xff1b;在前一個定時器執行完前&#xff0c;不會向隊列插入新的定時器&#xff08;解決缺點一&#xff09;保證定時器間隔&#xff08;解決缺點二&…

前端 crypto-js aes 加解密

背景 前段時間公司做項目&#xff0c;該項目涉及到的敏感數據比較多&#xff0c;經過的一波討論之后&#xff0c;決定前后端進行接口加密處理&#xff0c;采用的是 AES BASE64 算法加密~ 網上關于 AES 對稱加密的算法介紹看上一篇&#xff01; 具體實現 其實搞懂了是怎么一回事…

對排序算法的研究

算法是什么&#xff1f;、 算法&#xff08;Algorithm&#xff09; 代表著用系統的方法描述解決問題的策略機制&#xff0c;可以通過一定規范的 輸入&#xff0c;在有限時間內獲得所需要的 輸出。 一個算法的好壞是通過 時間復雜度 與 空間復雜度 來衡量的。 簡單來說&#xff…

js實用算法

判斷文本是否為回文 定義&#xff1a;如果將一個文本翻轉過來&#xff0c;能和原文本完全相等&#xff0c;那么就可以稱之為“回文”。 方法一&#xff08;字符串、數組內置方法&#xff09;123456789101112131415/** 判斷文字是否為回文* param {string|number} val 需要判斷的…