作一封郵件和制作web頁面還是有很大不同的。當不同的瀏覽器都在不斷向標準靠近的同時,大多數郵件客戶端卻止步不前,甚至有一些是在退步的。在2007年,Microsoft 將 Outlook 的渲染引擎從 IE 轉換成 Word的渲染方式,而一些基于web的郵件客戶端,像Gmail和Hotmail,則增加了一些怪異的模式,還有Lotus Notes的一些技巧。
根據我的經驗來看,我們解決這些問題的關鍵是要關注下面三件事情。首先,保持簡單,你的郵件設計的越復雜,你的郵件在某個受歡迎的、不支持標準的客戶端上“抽風”的可能性就越大。其次,你需要將你的編碼技巧退步十年,這通常意味著我們要使用嵌套的表格,將CSS寫成內聯的形式等。最后,你需要對你的設計進行規律性的測試。
因為諸如Gmail和Outlook 2007 無法支持浮動(float)、外邊距(margin)、內填充(padding),你需要使用表格來作為你的郵件的框架。雖然表格嵌套的方法被廣泛支持,但是在對單元格的寬度、外邊距和內填充的處理方法并不一致。為了達到最優的效果,當制作表格結構時,請記住下面的技巧。
1、為每個單元格設置寬度,而不是表格
當你把表格寬度、td 寬度、td的填充和CSS的填充寫到一封郵件時,你看到的結果可能是每個郵件客戶端它們看上去都不一樣。最可靠的方法是我們將為表格的每個單元格(th,td)設置寬度,而不是表格(table)本身。如下:
永遠別指望郵件客戶端能夠計算出你沒有指定寬度的單元格的寬度。它絕對不會。同時也要避免使用基于百分比的寬度,像 Outlook 2007 這樣的客戶端從來不考慮這種寬度方式,特別是這些嵌套的表格。像素級視覺,如果你想對每個單元格做填充,可以使用表單的單元格填屬性或者用CSS的內填充,但是不要這兩種一起使用。
2、嵌套迷思
表格的嵌套相對于設置左右浮動和外邊距(margin)或者表單單元格填充的方法更加穩固。如果你能使用這種表格嵌套的方法達到相同的效果,這將會給你在那些蹩腳的(buggier)郵件終端上面獲得最好的結果。
3、使用一個容器表單來設置 body 背景色彩
很多郵件客戶端會忽略掉在CSS中或者<body>標簽中設置的背景色。針對這種情況,將你的整封郵件用一個寬度為100%的表單包起來,并且為其設置背景色。如下:
你可以使用同樣的方案在背景圖片的設置上,需要記住的是某些郵件客戶端是不支持背景圖片的,這樣你就需要設置一個背景顏色作為備份方案。
4、在單元格中避免使用多余的空格(whitespace)
盡最大可能,避免<td>標簽中出現空格。某些郵件客戶端(Yahoo!或者Hotmail)可能會在某些場景下,對單元格的上面或者下面增加額外的填充,把你的設計破壞掉。
當某些郵件設計師盡他們最大的努力去避免使用CSS時,他們又會去依賴夢魘般的<font>標簽,但實際情況是很多的CSS屬性是被大部分郵件客戶端支持的。請查看下面的跨郵件終端的綜合CSS支持列表list of CSS support,從中你也能發現一些安全的屬性和一些應該被避免使用的屬性。
1、將css寫成內聯(inline)的樣式
Gmail就是這方面的罪魁禍首。CSS被從<head>和<body>中剝離,我們別無選擇的會將樣式寫成內聯的形式。一個好消息是你可以完全自動化的完成轉化。像Premailer提供意見點擊的方式完成這一過程。我強烈建議你將此步驟作為你構建活動的最后一步,你就能感受到這個CSS的所有益處。
2、避免使用字體的簡寫和十六進制計數法
一部分郵箱客戶端會放棄對簡寫的css字體屬性的解析。比如,絕對不要將你的字體樣式設置成下面的樣子。如下:
相反,我們應該寫成下面的形式:
談到字體這個話題,我最近也在不同的郵件客戶端測試引用字體(@font-face)。結果是凄涼的,這些瀏覽器安全的字體在郵件中使用還是遙遙無期。
當我們用CSS來聲明顏色屬性時,有些郵件客戶端并不支持簡寫的16進制的顏色值,比如 color:#f60; 我們需要將其補充完整 color:#ff6600;。為了達到最優的效果,我們需要使用常規寫法。
像前面提到的單元格的間距,段落的間距也無法做到所有客戶端的一致。我看到過設計師使用兩個<br>或者用DIV寫上內聯(inline)的外邊距(margin)樣式彌補這個短板,但是我最近的測試顯示大多數情況下對段落的支持都還是比充足的(有一段時間 Yahoo! 根本不支持段落標簽)。
最好的實踐方法是對每個段落通過內聯(inline)的方法設置外邊距(margin),像下面這樣:
再次提示,在你構建郵件的時候通過在head標簽中增加樣式,然后通過Premailer將他們轉化成每個段落的內聯樣式。
如果你的設計對高度是很敏感的或者需要像素級別的完美,我強烈建議你不要將所有的段落寫到一起,而是將文本的格式化工作放到表單的單元格中來做。你可能會需要使用到表單的嵌套或者單元格填充(cellpadding)/CSS 來達到期望的樣子。下面就是一個例子:
某些郵件客戶端將會用他們的默認樣式覆蓋你的鏈接色,你可以通過兩部來防止其發生。第一,針對每一個鏈接設置一個內聯的(inline)的顏色:
接下來,增加一個冗余的 span 標簽在 a 標簽中。
也許這些方案看上去比較過激,如果這個顏色對你的設計很重要,這個多余的 span 標簽是你達到一致表現的最好解決方案。
很重要的一件需要牢記在心中的關于圖片的事情是你的訂閱者可能看不到你的圖片。如果你有這方面的準備,你就會保持你的內容簡單,并且重要的內容不通過圖片的形式來展示。
在這個思想的指導下,在使用HTML郵件的過程中,下面有一些基本的要領需要牢記:
1、避免占位圖片
雖然使用占位圖片和嵌套表格的方式在10年前很流行,許多郵件客戶端已經將其排除作為一種可靠的技術。很多客戶端會使用一個相同尺寸的空占位來替換圖片,另外一些會將所有的圖片移除。大多數郵件客戶端會給圖片賦予默認的圖片區塊,這將導致訂閱者的第一感覺很差。堅持將單元格賦予固定的寬度,讓其在沒有圖片的時候版式不會亂掉。
2、將圖片定義尺寸
如果你沒有給每個圖片設置尺寸,當圖片沒有被下載時,有些客戶端會自己發明一個他們自己的尺寸,你的版式就亂掉了。同時,確保你的所有圖片在被用到郵件中前,都被賦予了正確的尺寸。某些客戶端會忽略你代碼中設置的尺寸,而去使用真實的圖片尺寸。
3、避免使用 PNG 圖片
Lotus Notes 6 和 7 并不支持 8位(8-bit)和24位(24-bit)的 PNG 圖片,所以需要使用GIF或者JPG格式的圖片,即使這會增加而外的圖片大小。
4、為背景圖片提供備份的顏色
Outlook 2007 不支持背景圖片(aside from this hack to get full page background images working)。如果你想在你的設計中使用背景圖像,提供一個背景色作為備份支持方案。這樣就能同時解決圖片被屏蔽和Outlook 2007的問題。
5、不要忘記標注替代文本(alt text)
缺少標準的支持意味著郵件客戶端對語義化和訪問性良好的HTML郵件的破壞性是很大的。即使這樣,從圖片可能被屏蔽角度看,提供替代文本也是很重要的。這樣即使圖片在默認狀態下被限制,大多數郵件客戶端也能顯示提供的文本來替代。另外還需要技術的是某些客戶端,比如 Outlook 2007, Hotmail 和 Apple Mail 在圖片被屏蔽的時候,并不提供替代文本(alt text).
6、針對 Hotmail 使用顯示hack
令人費解的是,Windows Live Hotmail 對每個圖片增加了幾個像素的填充。一個變通的方案就是使用下面的顯示屬性來解決這個問題。
這樣就能移除掉Hotmail的填充值,但是你也可能會給其它客戶端埋下隱患。
7、避免使用浮動屬性(float)
Outlook 2007 和早期版本的 Notes 并不支持浮動屬性(float)。在郵件中我們可以使用對齊屬性在針對圖像標簽做到浮動圖片的目的。
如果你在 Yahoo!的郵件中發現圖片的怪異表現,增加 align="top" 可能能夠解決你遇到的問題。
由于缺少 Javascript 或者其他對象標簽(object tag)的支持,視頻郵件最大的程度就是gif動畫(如果你認為那是視頻的話)。盡管如此,我最近做的一些關于用html5 videio 標簽的測試結果,還是讓人感覺不錯。
HTML 5的標簽目前在一部分郵件終端是無法運行的,包括 Apple Mail,Entourage 2008, MobileMe 和 iPhone.作為如果視頻不被支持的補救方法,你可以提供穩定的備選內容,比如gif 動畫或者一個可以點擊到瀏覽器播放視頻的圖片。
當然,你是否需要將視頻添加到你的郵件里面,那就是另外一個議題了,如果你的答案是肯定的,你可以使用這些代碼案例。
移動端有機胺的情況近期顯得比較雜亂了,隨著iPhone,Android的發明和Palm和RIM的改進,認為移動端電子郵件終端不重要的年代一去不復返了。
為了給移動端訂閱用戶良好的體現,我們在編碼的過程中也有幾個關鍵點需要牢記心中。
1、保持寬度小于600像素
受限于郵件客戶端的視窗,這條規則來移動視窗到來之前的年代就很重要。事實上,iphone 的視窗是320像素,Droid是480像素,Blackberry大概360像素。堅持最大600像素寬的設計,能夠讓你的郵件縮小到上面提到的設備上面依然可讀。這個尺寸在桌面端和web端的預覽效果也很好。
2、注意文本尺寸的自動調整
作為一個好的特性,基于webkit郵件客戶端(比如 iPhone, Pre 和 Android) 能夠自動調整文本的大小來提高閱讀性。如果你的測試結果表明這項特點給你帶來的好處是破外了你的設計,你可以通過下面的屬性禁用:
雖然近幾年郵件客戶端對標準的支持并沒有取得長足的進步,但是某些郵件客戶端的改變卻從未停止(有好有壞),基于 web 的客戶端,如 Yahoo!、hotmail 和 Gmail 在這方面乏善可陳。我看到過無數次可行的設計方案被停止支持,沒有任何解釋。
基于這個原因,你也要對你的郵件設計保持規律的測試。我發現每個月進行一些快速的測試的小技巧,特別基于web的客戶端。好的消息是經過幾次設計和測試,你將會從這些雜亂無章中找到規律。一些潛在的陷阱將變的可以預計,一個對郵箱友好的設計模型也會在你心中成型。
本文參考“新浪UED”:創建堅如磐石的HTML郵件
的朋友T圣誕前幾天找到我,問是否能幫忙制作一個圣誕賀卡郵件發送給客戶。
我趕緊在腦海中遍歷一遍如何制作賀卡郵件,發現沒有答案,于是趕腳去谷歌了一下,竟然意外發現了個大寶藏。
傳統的郵件
與國外客戶打交道,避免不了郵件的往來,尤其是節假日,可能要發一點祝賀等郵件,祝賀一下圣誕快樂或者新年快樂的,普通的郵件可能就是一段文字的祝福,或者直接在郵件客戶端插入一張圖片。
不過你有沒有想過把郵件做的更好看一點呢?像下圖這樣:
如果你也想做成這樣的郵件,那么這篇文章你就不要錯過了,接下來就跟著我一步一步如何制作一個這樣的郵件吧!
如何制作漂亮的郵件
漂亮的郵件不僅在排版布局上吸引用戶的點擊,而且還能體現你的與眾不同,增加你的品牌記憶。
我訂閱了很多國外的博客郵件,其中印象最深刻的就是Shopify的郵件
這是shopify日常的博文郵件,幾乎每天都在推送,相對于其他普通的郵件的話,我更愿意看這種郵件中的文章。
這種郵件呢有個專業術語,叫HTML郵件,那什么是HTML呢?
HTML是Hyper Text Markup Language的簡寫,翻譯成中文就是超文本語言,通俗來說就是能讓圖片、文字和視頻排版好看的語言,通常它長這個樣子:
第一次看有可能密集恐懼癥會發作!
難道做一個漂亮的郵件必須要接觸這些天書似的HTML嗎?
當然不用,這里我找到了完全避免手工制作HTML郵件的方法,那就是可視化編輯制作HTML郵件。
可視化編輯看到字面意思我們就知道,只需拖拽編輯。
我們只用拖拽對應的元素到編輯器中即可實現想要的效果,比如要插入圖片,拖一張圖片元素進來,要添加一個按鈕,拖一個按鈕元素進來。
可視化編輯是未來制作網頁和郵件的大趨勢,這種方法只要你會移動鼠標就能制作內容的方法,當然能極大的提高你的辦公效率。
那么有什么工具能夠可視化編輯HTML郵件呢?不著急,打起精神來,接下來我將帶領你一步一步的實操。
如何尋找好用的在線工具
當我想找新的使用工具的時候,會使用英文去谷歌搜索,因為國外的郵件使用場景畢竟會更多一點,選擇的余地也會更多一點。
不過在搜索的時候我遇到了一個難敵,可視化編輯的英文是什么?
沒關系,我們使用最簡單描述法,我們要找的是郵件編輯器,郵件編輯器英文我會,就是email builder,ok,那就在谷歌里面輸入入best email builder的時候,不著急回車,我們查看下拉框看看有沒有什么驚喜,果然找到了一個核心關鍵詞best drag and drop email builder-最好的拖拽郵件編輯器,這個詞和可視化郵件編輯器的意思基本一致了,搜之。
通過這個搜索方法我們能快速定位自己想要找的工具,先輸入簡單的描述單詞,然后在下拉框中尋找更詳細的描述,因為谷歌會在下拉框中推送全球人民最關心的問題!
通過上面的方法我們找到了一大堆的郵件編輯工具,以下是我搜集到的網址,當然你也可以試試,也許能找到更多驚喜:
?beefree.io/bee-free?stripo.email/templates?freeemaileditor.com?mosaico.io?chamaileon.io?litmus.com/email-builder
經過多輪篩選測試,我選擇了beefree.io來制作HTML郵件。
最好用的在線HTML郵件編輯器
beefree.io/templates/ 的官網告訴我,它們目前有200+個郵件模板,當我看到這些模板時,口水都流了一地,而當我知道大部分都不用注冊免費使用的時候,趕緊點開一個郵件查看起來:
制作郵件賀卡的主題是圣誕節,所以我選擇了一個相關的主題,點開看之:
##編輯郵件 這款圣誕主題的郵件里面有個bling bling的彩燈,看起來節日氣氛就不錯,就選它了,初步分析素材,我需要準備5張圖片,包括:
?logo一張?主產品一張?其他產品三張
上圖的第3部分我暫時不需要,就刪除了,那么剩下的主要就是圖片與文案的準備了,先來看看圖片如何設置。
首先我來替換一下主產品圖,由于主產品圖片要一張PNG,PNG格式的圖片背景必須是透明色,所以我要扣一下圖。
這時我選擇在線摳圖工具remove.bg,只需上傳一張圖片即可完成摳圖,建議純色底摳圖更干凈。
嗯,摳的完美!
回到beefree,在左邊點擊選中主圖,然后右側出現的Change image點擊一下:
然后點擊一個文件夾進入,接著點擊Upload,即可上傳剛才摳好的圖片,最后點擊圖片insert即可。
點擊植入之后可以在右側調整圖片大小,位置,都是很方便的,drag&drop 很NICE!
特別注意,圖片下面的alertnate text一定要填寫,這個部分當圖片無法加載出來時,alertnate text會告訴用戶該圖片講的是什么
這一欄屬于自我介紹或者公司介紹部分,暫時不需要直接刪除
然后依次把剩下的幾張產品圖片上傳,修改標題添加按鈕鏈接等操作
然后把其他的社交鏈接都加上
這里要特別注意,由于我們使用的是免費操作,我們只能下載zip壓縮包到本地
如果你已經購買付費版,那么無需接下來的操作,付費版可以直接轉化為html或者導入mailchimp edm系統中直接發送郵件。
beefree的價格是月15美金,價格適中,長期制作的話建議購買付費版。
免費版的額外操作
由于沒有使用付費套餐,我們只能下載一個壓縮包,在解壓之后可以看到兩個文件:
我們點擊這個.html結尾的文件,即可在瀏覽器中看到我們的郵件主體了:
但是這個郵件只能在自己的電腦上看到,該如何將弄到郵件里面去呢?
接著操作!以下手法比較hacker,請仔細操作。
壓縮文件夾中的圖片
想要把文件弄到在線的郵件里面,首先我們要做的就是把圖片上傳到在線。想了半天,圖片應該放到在線哪里呢?我總結了一下,你可以把圖片上傳到:
?網站后臺媒體庫?mailchimp媒體庫?其他圖床
那么我就示范一下圖片上傳到自己的網站后臺吧,不過在上傳圖片之前我建議大家將圖片進行無損壓縮一下。
電腦本地的圖片都在image文件夾中
這里的圖片格式有gif/jpg/png,jpg和png我們可以使用tinypng.com進行無損壓縮
gif圖片比較特殊,是一種動態圖片,我們也可以使用另外一個在線工具壓縮:https://www.iloveimg.com/zh-cn/compress-image/compress-gif 不過gif壓縮可能會導致較小的gif變成png,請額外注意一下。
壓縮圖片是為了郵件加載速度更快一點
然后我們整理一下壓縮過后的圖片,千萬注意,圖片名稱不要更改。
將圖片上傳至我們的網站后臺,這里以wordpress網站演示:
然后打開圖片,復制一下圖片的鏈接:
圖片鏈接格式一般是:
https://keentalking.com/wp-content/uploads/2020/01/Excavator1.jpg
我們刪除后面的圖片名稱,只保留前面的部分,后面要用到:
https://keentalking.com/wp-content/uploads/2020/01/
使用subline text批量替換圖片鏈接
這里用到的最好一個工具是subline text,官網是sublimetext.com/3,這是一款代碼編輯工具,我們利用它來批量替換HTML文件中的圖片鏈接。
首先下載subline text,官網下載的有個人免費版,安裝好之后打開html文件:
然后用快捷鍵ctrl+f或者command+f
1.打開查找2.下方搜索框內輸入"images/"3.點擊find All
這時候你會發現所有包含"images/"的選項全部選中了:
接著按一下鍵盤上的左方向鍵,選中的文字變成了光標,然后按幾下鍵盤的右方向鍵,移動光標到"images/"后面,點擊Delete鍵,向前全部刪除"images/" 。說起來比較復雜,但做起來很簡單,請看動圖操作演示
最后一步,粘貼我們之前的鏈接
https://keentalking.com/wp-content/uploads/2020/01/
我們發現所有的圖片鏈接都換成了自己的官網圖片鏈接
點擊快捷鍵ctrl+s或command+s保存。
驗證圖片是否替換成功
我們驗證一下這些圖片是否都替換成功了。
這里我推薦使用qq郵箱來檢測一下。
打開qq郵箱,寫信創建一個空白郵件,然后點擊“格式”,出現的工具欄中點擊""
全選subline text中的所有代碼:
并粘貼到qq郵箱空白郵件處,粘貼完畢點擊返回可視化編輯:
出現完整的HTML即表示成功!
接下來發送給自己的工作郵箱,然后轉發給用戶等等都是輕車熟路啦!或者你可以直接把代碼放入mailchimp等EDM發信系統也是可以的。
(來源:理清外貿)
以上內容屬作者個人觀點,不代表雨果網立場!本文經原作者獨家授權供稿,轉載需經雨果網授權同意。
上雨果網搜索“跨境資料庫”,領取歐美/東南亞各國市場商機、各大平臺熱銷品報告、跨境電商營銷白皮書!
在JavaScript中發布/訂閱模式非常常見,并且在工作方式上與觀察者模式非常相似,除了在觀察者模式中,觀察者是直接由其主題通知的,而在發布者/訂閱者中,訂閱者是通過渠道通知的 位于發布者和訂閱者之間的來回傳遞消息。
當我們實現它時,我們將需要一個發布者,一個訂閱者,以及一個存儲從訂閱者那里注冊的回調函數的對象。
下面我們將在代碼中實現發布者/訂閱者。
首先我們定義一個變量用于存儲回調函數:
const subscribers = {}
接下來,我們將定義subscribe用于將回調添加到的方法subscribers:
function subscribe(eventName, callback) {
if (!Array.isArray(subscribers[eventName])) {
subscribers[eventName] = []
}
subscribers[eventName].push(callback)
}
這里發生的是,在嘗試為事件名稱注冊回調偵聽器之前,它會檢查存儲中的eventName屬性subscribers是否已經是array。如果不是,則假定這將是第一個注冊的回調,subscribers[eventName]并將其初始化為數組。然后,將回調函數添加到數組中。
當publish事件觸發時,它會帶兩個參數:
function publish(eventName, ...args) {
if (!Array.isArray(subscribers[eventName])) {
return false
}
subscribers[eventName].forEach(callback => {
callback.apply(this, args)
})
}
在發布事件時,會先檢查事件是否被注冊過,如果沒有,則返回。然后我們通過遍歷subscribers[eventName]中的回調函數,并將data(這里的data為args數組)作為回調參數來執行這它。
根據上述代碼描述,我們有了以下訂閱者:
subscribe('data', (...args) => {
console.log(...args)
})
并且在將來的某個時間里通過publish調用該方法:
publish('data', {
type: 'update',
data: {
value: 1000
}
})
這就是發布者/訂閱者模式的工作方式!我們實現了subscribe和publish函數以及一個儲存回調函數的全局變量`subscribers。subscribe用于注冊事件以及回調函數,publish用于觸發所有已注冊回調的方法。
不過還有一個問題。在真實的應用程序中,如果我們訂閱許多回調,我們可能會遭受永無止境的內存泄漏。因此,我們最后需要的是一種在不再需要訂閱的回調時將其刪除的方法。
通常有兩種方案來取消訂閱:
這里我們采用方案2來實現取消訂閱,更改訂閱部分代碼為:
function subscribe(eventName, callback) {
if (!Array.isArray(subscribers[eventName])) {
subscribers[eventName] = []
}
const index = subscribers[eventName].length
subscribers[eventName].push(callback)
return () => {
subscribers[eventName].splice(index, 1)
}
}
在該示例中,我們在添加subscriber之前獲取subscribers的長度,然后通過splice方法來刪除我們要查找的項目索引。
這樣,當我們需要取消調用時,只需要執行訂閱時的返回函數即可.
const unsubscribe = subscribe('data', (...args) => {
console.log('Received data:', ...args)
})
// 取消訂閱
unsubscribe()
在Vue中,我們可以通過event Hub更方便更簡單的實現發布訂閱模式。
import Vue from 'vue'
const eventHub = new Vue()
const topic = {
publish(eventName, ...args) {
eventHub.$emit(eventName, ...args)
},
subscribe(eventName, listener) {
eventHub.$on(eventName, listener)
},
off(eventName) {
eventHub.$off(eventName)
}
}
export default topic
本文中的所有代碼都已經上傳到github。 地址: JavaScript中的發布/訂閱模式
及時獲取更新,了解更多動態,請關注 https://www.gogoing.site
如果你覺得這篇文章對你有幫助,歡迎關注微信公眾號-前端學堂,更多精彩文章等著你!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。