Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
Pure.css是一組小型的自適應(yīng)CSS模塊,可以在每個Web項目中使用。Pure以Normalize.css為基礎(chǔ),并提供native HTML元素以及最常見的UI組件的布局和樣式,考慮到移動設(shè)備,Pure具有開箱即用的響應(yīng)能力,因此元素在所有屏幕尺寸上都看起來不錯。
<link rel="stylesheet" href="./pure-min.css" />
PS:Normalize.css使瀏覽器更一致地渲染所有元素,并符合現(xiàn)代標(biāo)準(zhǔn)。它只針對需要規(guī)范化的樣式。
https://github.com/pure-css/pure
通過使用Grid,Menu等,可以輕松創(chuàng)建適用于所有屏幕尺寸的精美響應(yīng)式布局。
Pure的設(shè)計目標(biāo)是可以在每個Web項目中使用它
與其他框架不同,Pure的設(shè)計不受限制,最小且扁平。添加新的CSS規(guī)則比覆蓋現(xiàn)有規(guī)則要容易得多。通過添加幾行CSS,可以自定義Pure的外觀以與你的Web項目一起使用。
以下創(chuàng)建默認(rèn)的內(nèi)聯(lián)表單,將pure-form類名添加到任何<form>元素。如下
<form class="pure-form"> <fieldset> <legend>A compact inline form</legend> <input type="email" placeholder="Email"> <input type="password" placeholder="Password"> <label for="remember"> <input id="remember" type="checkbox"> Remember me </label> <button type="submit" class="pure-button pure-button-primary">Sign in</button> </fieldset> </form>
還有其他常見類型表單,本文不過多介紹
要設(shè)置HTML表的樣式,請?zhí)砑?strong class="highlight-text">pure-table類名。此類為表元素添加了填充和邊框,并強(qiáng)調(diào)了標(biāo)題。
默認(rèn)情況下,菜單是垂直的。
要創(chuàng)建水平菜單,請?zhí)砑?strong class="highlight-text">pure-menu-horizontal類名稱。
本文只介紹了部分有關(guān)于Pure的內(nèi)容,詳細(xì)的介紹可以Github以及官方提供的詳細(xì)內(nèi)容和使用指南!
之前的文章中,我們討論了圖片的尺寸自適應(yīng)、裁切與縮放、壓縮、動態(tài)webp等技術(shù)。這些技術(shù)都是對單張圖片的處理,而在實際項目中,我們往往需要處理大量的圖片。本文將討論如何高效批量優(yōu)化圖片,并介紹一些圖片加載技巧。
圖片預(yù)加載(Preloading Images)是一種提前加載即將使用的圖片資源的技術(shù)。通過在頁面加載時就將未來可能用到的圖片資源進(jìn)行預(yù)加載,可以在用戶真正需要這些圖片時,減少等待時間,提升用戶體驗。
HTML中的預(yù)加載
在HTML中,可以通過<link>標(biāo)簽的rel屬性來實現(xiàn)圖片預(yù)加載。例如,我們可以在頁面的`<head>`標(biāo)簽中添加如下代碼:
<link rel="preload" href="image.jpg" as="image" fetchpriority="high">
該 <link> 標(biāo)簽用于預(yù)加載一個圖片資源。讓我們逐個解釋其中的屬性及其作用:
當(dāng)前<link>標(biāo)簽的用途是預(yù)加載資源。preload告訴瀏覽器提前加載指定的資源(在這里是圖片),以便在后續(xù)使用時能夠更快地提供資源。這有助于提高頁面的加載性能,尤其是在資源密集型的網(wǎng)站上。
指定要預(yù)加載的資源的URL。href屬性是一個URL,指向需要預(yù)加載的資源。在這個例子中,image.jpg是要預(yù)加載的圖片的路徑。
指定預(yù)加載資源的類型。as屬性告訴瀏覽器預(yù)加載資源的類型,以便正確地處理和優(yōu)化加載過程。在這個例子中,as="image"明確了資源是一個圖片。這對于瀏覽器優(yōu)化資源加載順序和優(yōu)先級非常重要。
指定預(yù)加載資源的獲取優(yōu)先級。fetchpriority屬性是一個新的屬性,用于指示瀏覽器在預(yù)加載資源時的優(yōu)先級。在這個例子中,fetchpriority="high"告訴瀏覽器這是一個高優(yōu)先級的資源,應(yīng)該盡快加載。這在需要確保關(guān)鍵資源(如首屏圖片)快速加載時非常有用。
CSS中的預(yù)加載
在CSS中,可以通過background-image屬性來實現(xiàn)圖片預(yù)加載。例如,我們可以在CSS文件中添加如下代碼:
.preload {
background-image: url('image.jpg');
}
這段CSS代碼定義了一個`.preload`類,其中包含了一個 background-image 屬性,指定了要預(yù)加載的圖片資源的URL。在頁面加載時,瀏覽器會提前加載這個圖片資源,以便在后續(xù)使用時能夠更快地提供資源。
JavaScript中的預(yù)加載
在JavaScript中,可以通過Image對象來實現(xiàn)圖片預(yù)加載。例如,我們可以在JavaScript代碼中添加如下代碼:
var img = new Image();
img.src = 'image.jpg';
這段JavaScript代碼創(chuàng)建了一個新的Image對象,并設(shè)置了src屬性為要預(yù)加載的圖片資源的URL。當(dāng)這段代碼執(zhí)行時,瀏覽器會開始加載這個圖片資源,以便在后續(xù)使用時能夠更快地提供資源。
二、圖片懶加載
圖片懶加載(Lazy Loading Images)是一種延遲加載圖片資源的技術(shù)。通過在頁面加載時只加載可見區(qū)域內(nèi)的圖片資源,可以減少頁面的加載時間,提升用戶體驗。
img loading屬性
在HTML中,可以通過loading屬性來實現(xiàn)圖片懶加載。例如,我們可以在<img>標(biāo)簽中添加如下代碼:
<img src="image.jpg" loading="lazy" alt="Image">
loading屬性是一個新的屬性,用于指定圖片的加載方式。它有三個可能的值:
Intersection Observer API
在JavaScript中,可以通過Intersection Observer API來實現(xiàn)圖片懶加載。Intersection Observer API是一種用于監(jiān)視元素與視口交叉狀態(tài)的API,可以用于實現(xiàn)懶加載、無限滾動等功能。
例如,我們可以在JavaScript代碼中添加如下代碼:
// 創(chuàng)建一個IntersectionObserver實例
const intersectionObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
// 當(dāng)元素與視窗交叉時執(zhí)行的操作
const img = entry.target; // entry.target是交叉的元素
// 假設(shè)data-src屬性包含了圖片的路徑
img.src = img.dataset.src;
intersectionObserver.unobserve(img); // 停止觀察該元素
}
});
});
// 為所有需要滾動加載的元素(例如圖片)設(shè)置觀察
document.querySelectorAll('img[data-src]').forEach((img) => {
intersectionObserver.observe(img);
});
這段JavaScript代碼創(chuàng)建了一個IntersectionObserver實例,并為所有帶有data-src屬性的圖片元素設(shè)置了觀察。當(dāng)圖片元素與視口交叉時,會加載圖片資源,并停止觀察該元素。
Scroll事件
在JavaScript中,也可以通過監(jiān)聽scroll事件來實現(xiàn)圖片懶加載。例如,我們可以在JavaScript代碼中添加如下代碼:
// 獲取所有帶有data-src屬性的圖片元素
const lazyImages = document.querySelectorAll('img[data-src]');
// 懶加載函數(shù)
function lazyLoad() {
lazyImages.forEach((img) => {
if (img.offsetTop < window.innerHeight + window.pageYOffset + 200) {
img.src = img.dataset.src;
img.removeAttribute('data-src');
}
});
// 更新 lazyImages,排除已加載的圖片
lazyImages = document.querySelectorAll('img[data-src]');
// 如果所有的圖片都已經(jīng)加載,則移除事件監(jiān)聽器
if (lazyImages.length === 0) {
document.removeEventListener('scroll', lazyLoad);
}
}
// 監(jiān)聽scroll事件
document.addEventListener('scroll', lazyLoad);
// 初始檢查一次,以便在頁面加載時懶加載位于視窗中的圖片
lazyLoad();
這段JavaScript代碼監(jiān)聽了scroll事件,并在圖片元素進(jìn)入視口時加載圖片資源。當(dāng)圖片進(jìn)入視口時,會加載圖片資源,并移除data-src屬性。
結(jié)合多種方法來實現(xiàn)圖片懶加載
在實際項目中,我們可以結(jié)合多種方法來實現(xiàn)圖片懶加載,以便在不同瀏覽器和環(huán)境下提供最佳的用戶體驗。例如,我們可以先檢查瀏覽器是否支持loading屬性,如果支持,則使用`loading`屬性實現(xiàn)圖片懶加載;如果不支持,則檢查瀏覽器是否支持Intersection Observer API,如果支持,則使用Intersection Observer API實現(xiàn)圖片懶加載;如果不支持,則使用scroll事件實現(xiàn)圖片懶加載。
下面是一個示例代碼,演示了如何結(jié)合多種方法來實現(xiàn)圖片懶加載:
html
<body>
<img src="placeholder.jpg" data-src="image1.jpg" alt="Description 1">
<img src="placeholder.jpg" data-src="image2.jpg" alt="Description 2">
<img src="placeholder.jpg" data-src="image3.jpg" alt="Description 3">
<!-- 更多 img -->
<script src="lazyload.js"></script>
</body>
javascript
const lazyImages = document.querySelectorAll('img[data-src]');
// 判斷瀏覽器是否支持 loading 屬性
if('loading' in HTMLImageElement.prototype) {
lazyImages.forEach(img => {
img.src = img.dataset.src;
});
} else if('IntersectionObserver' in window) {
// 使用Intersection Observer API實現(xiàn)懶加載
const intersectionObserver = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
const img = entry.target;
img.src = img.dataset.src;
intersectionObserver.unobserve(img);
}
});
});
lazyImages.forEach((img) => {
intersectionObserver.observe(img);
});
} else {
// 使用scroll事件實現(xiàn)懶加載
let lazyImages = document.querySelectorAll('img[data-src]');
function lazyLoad() {
lazyImages.forEach((img) => {
if (img.offsetTop < window.innerHeight + window.pageYOffset + 200) {
img.src = img.dataset.src;
img.removeAttribute('data-src');
}
});
lazyImages = document.querySelectorAll('img[data-src]');
if (lazyImages.length === 0) {
document.removeEventListener('scroll', lazyLoad);
}
}
document.addEventListener('scroll', lazyLoad);
lazyLoad();
}
三、漸進(jìn)式圖片加載
圖片漸進(jìn)式加載(Progressive Image Loading)是一種逐步加載圖片資源的技術(shù)。通過在圖片加載過程中逐步顯示模糊的低分辨率圖片,可以提升用戶體驗,減少等待時間。這種技術(shù)不僅適用于優(yōu)化頁面性能,還可以為用戶提供視覺上的反饋,使頁面顯得更加流暢。
漸進(jìn)式 JPEG
漸進(jìn)式 JPEG (Progressive JPEG) 是一種通過逐步顯示圖片的技術(shù),漸進(jìn)式 JPEG 與標(biāo)準(zhǔn)的 JPEG 圖片區(qū)別在于,漸進(jìn)式 JPEG 圖片在加載時會逐步顯示圖片的分辨率,而不是一次性顯示完整的圖片。這種逐步加載的方式可以提升用戶體驗,減少等待時間。漸進(jìn)式 JPEG 圖片最初會顯示的是一張模糊的低分辨率圖片,隨著數(shù)據(jù)的不斷加載,圖片的分辨率會逐步提高,直至達(dá)到全分辨率。這種方法特別適合需要加載大圖的場景。
許多圖像編輯工具和壓縮工具都支持將圖片保存為漸進(jìn)式 JPEG。在實際項目中,例如,在 Photoshop 中保存圖片時,可以勾選“漸進(jìn)式”選項。也可以使用命令行工具如ImageMagick(https://imagemagick.org/index.php)來生成漸進(jìn)式 JPEG:
1convert input.jpg -interlace Plane output.jpg
需要注意的是漸進(jìn)式 JPEG 圖片的文件大小通常會比標(biāo)準(zhǔn)的 JPEG 圖片稍大,因為漸進(jìn)式 JPEG 圖片包含了更多的數(shù)據(jù),用于逐步顯示圖片的分辨率,但是這種額外的數(shù)據(jù)可以提升用戶體驗。因此,在選擇使用漸進(jìn)式 JPEG 圖片時,需要權(quán)衡圖片質(zhì)量和文件大小之間的關(guān)系。
占位圖技術(shù)
占位圖技術(shù)(Placeholder Image)通常使用一個非常小的、模糊的低分辨率圖像作為占位符,在高分辨率圖像加載完成之前先顯示出來。這種方法通過減少初始加載時間和網(wǎng)絡(luò)請求,可以顯著提升頁面的首屏加載速度。
占位圖實現(xiàn)原理很簡單,只需要在頁面中插入一個占位圖像,然后在高分辨率圖像加載完成后替換為真實圖像即可。
代碼示例:
html:
<img src="https://fs.autohome.com.cn/energyspace_views/image_demo/compress_before.png?format=webp&dis_rule=20x0_q50_" data-src="https://fs.autohome.com.cn/energyspace_views/image_demo/compress_before.png?format=webp&dis_rule=400x0_q90_" alt="Description">
javascript:
document.addEventListener('DOMContentLoaded', function() {
const lazyImages = document.querySelectorAll('img[data-src]');
lazyImages.forEach(img => {
const placeholder = new Image();
placeholder.src = img.src;
placeholder.onload = () => {
img.src = img.dataset.src;
};
});
});
img src 屬性中的圖片是一個模糊的小圖,data-src 屬性中的圖片是高分辨率圖像。在頁面加載時,先顯示模糊的小圖,待高分辨率圖像加載完成后再替換。
使用占位圖技術(shù)可以有效減少頁面的加載時間,提升用戶體驗。同時,占位圖技術(shù)也可以結(jié)合圖片懶加載技術(shù)一起使用,進(jìn)一步提升頁面性能。
四、Base64 編碼
在 Web 開發(fā)中,將圖片轉(zhuǎn)換為 Base64 編碼是一種優(yōu)化頁面加載速度的方法,但需要權(quán)衡其優(yōu)缺點。一般來說,適用于 Base64 編碼的圖片大小取決于幾個因素,包括頁面的總體加載時間、HTTP 請求的數(shù)量以及文件大小。
Base64 編碼的優(yōu)點
Base64 編碼的缺點
適合轉(zhuǎn)為 Base64 的圖片大小一般為 1KB 到 10KB 的圖片:通常,文件大小在 1KB 到 10KB 之間的圖片是轉(zhuǎn)為 Base64 編碼的最佳選擇。這樣的圖片往往是小圖標(biāo)、按鈕、背景圖案等。對于這些小圖片,Base64 編碼可以顯著減少 HTTP 請求的數(shù)量,從而提升頁面加載速度。
在實際Web項目開發(fā)中,使用 Webpack或 Vite 將小圖片自動轉(zhuǎn)換為 Base64 編碼是一個常見的優(yōu)化方法。這種自動化的處理可以簡化開發(fā)流程,并確保在構(gòu)建過程中優(yōu)化資源。
webpack 配置示例:
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
loader: 'url-loader',
options: {
limit: 10240, // 10KB
},
},
],
},
],
},
};
Vite 配置示例:
import { defineConfig } from 'vite';
export default defineConfig({
build: {
assetsInlineLimit: 10240, // 10KB
},
});
在以上配置中,limit 或 assetsInlineLimit 選項指定了圖片轉(zhuǎn)為 Base64 編碼的閾值,超過這個閾值的圖片將被單獨打包為文件,而小于這個閾值的圖片將被轉(zhuǎn)為 Base64 編碼。
五、結(jié)語
通過結(jié)合多種圖片加載與優(yōu)化技術(shù),可以提升頁面性能,提供更好的用戶體驗。預(yù)加載、懶加載、漸進(jìn)式加載等技術(shù)在不同場景下有著不同的優(yōu)勢,通過合理地選擇和組合這些技術(shù),可以有效地優(yōu)化圖片加載過程。
在實際項目中,建議根據(jù)項目的具體需求,選擇合適的技術(shù)和工具進(jìn)行圖片優(yōu)化和加載。希望本文所介紹的技術(shù)和示例代碼能夠幫助您更好地實現(xiàn)圖片批量處理與加載優(yōu)化,提升網(wǎng)頁的加載速度和用戶體驗。
WEB 圖片優(yōu)化的相關(guān)文章到此結(jié)束,希望對你有所幫助。如果有任何問題或建議,歡迎在評論區(qū)留言,謝謝!
作者:之家-梁家瑋
來源-微信公眾號:之家前端共享流
出處:https://mp.weixin.qq.com/s/bhxtIED32lJP7PY9g28GNA
頁美工培訓(xùn)機(jī)構(gòu)教你用讓背景圖片拉伸填充的css屬性,比如一個容器(body,div,span)中設(shè)定一個背景。這個背景的長寬值在css2.1之前是不能被修改的。
所以實際的結(jié)果是只能重復(fù)顯示,所以出現(xiàn)了repeat,repeat-x,repeat-y,no-repeat這些屬性。就是用來
控制背景圖片的顯示的。所以一般用作背景圖片的有2類:
1.是一整張大圖,尺寸和區(qū)域大小剛好吻合
2.一個很小的條狀圖,通過repeat后,形成一個很規(guī)則的大圖背景。
但是css3出現(xiàn)以后,這個情況被改善了。background-size 屬性可以讓我們之前的希望成真。
而且這個屬性在firefox,chrome,以及ie9上都可以使用。
具體使用方法如下:(上海網(wǎng)頁美工設(shè)計培訓(xùn))
背景圖尺寸(數(shù)值表示方式):
#background-size{
background-size:200px 100px;
}
*請認(rèn)真填寫需求信息,我們會在24小時內(nèi)與您取得聯(lián)系。