原始transition組件和CSS
定義transition的最簡單方法是使用transition·或transition-group 組件。這需要為transition定義一個(gè)name`和一些CSS。
<template>
<div id="app">
<button v-on:click="show = !show">
Toggle
</button>
<transition name="fade">
<p v-if="show">hello</p>
</transition>
</div>
</template>
<script>
export default {
name: "App",
data() {
return {
show: true
};
}
};
</script>
<style>
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
</style>
圖片描述
看起來容易,對(duì)吧?然而,這種方法有一個(gè)問題。我們不能在另一個(gè)項(xiàng)目中真正重用這個(gè)transition。
封裝transition組件
如果我們將前面的邏輯封裝到一個(gè)組件中,并將其用作一個(gè)組件,結(jié)果會(huì)怎樣呢?
// FadeTransition.vue
<template>
<transition name="fade">
<slot></slot>
</transition>
</template>
<script>
export default {
};
</script>
<style>
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
</style>
// App.vue
<template>
<div id="app">
<button v-on:click="show = !show">
Toggle transition
</button>
<fade-transition>
<div v-if="show" class="box"></div>
</fade-transition>
</div>
</template>
<script>...</script>
<style>...</style>
圖片描述
通過在transition組件中提供一個(gè)slot,我們幾乎可以像使用基本transition組件一樣使用它。這比前面的例子稍微好一點(diǎn),但是如果我們想要傳遞其他特定于transition的prop,比如mode或者一些hook,該怎么辦呢
封裝的包裝器transition組件
幸運(yùn)的是,Vue 中有一個(gè)功能,使我們可以將用戶指定的所有額外props和監(jiān)聽器傳遞給我們的內(nèi)部標(biāo)簽/組件。 如果你還不知道,則可以通過$attrs訪問額外傳遞的 props,并將它們與v-bind結(jié)合使用以將它們綁定為props。 這同樣適用于通過$listeners進(jìn)行的事件,并通過v-on對(duì)其進(jìn)行應(yīng)用。
// FadeTransition.vue
<template>
<transition name="fade" v-bind="$attrs" v-on="$listeners">
<slot></slot>
</transition>
</template>
<script>
export default {};
</script>
<style>
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.3s;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
</style>
// App.vue
...
<fade-transition mode="out-in">
<div key="blue" v-if="show" class="box"></div>
<div key="red" v-else class="red-box"></div>
</fade-transition>
...
圖片描述
完整事例地址:https://codesandbox.io/s/yjl1...
現(xiàn)在,我們可以傳遞普通transition組件可以接受的任何事件和支持,這使得我們的組件更加可重用。但為什么不更進(jìn)一步,增加通過 prop 輕松定制持續(xù)時(shí)間的可能性。
顯式持續(xù)時(shí)間 prop
Vue 為transition組件提供了一個(gè)duration prop,然而,它是為更復(fù)雜的動(dòng)畫鏈接而設(shè)計(jì)的,它幫助 Vue 正確地將它們鏈接在一起。
在我們的案例中,我們真正需要的是通過組件prop控制CSS animation/transition。 我們可以通過不在CSS中指定顯式的CSS動(dòng)畫持續(xù)時(shí)間,而是將其作為樣式來實(shí)現(xiàn)。 我們可以借助transition hook來做到這一點(diǎn),該transition hook與組件生命周期 hook 非常相似,但是它們?cè)谶^渡所需元素之前和之后被調(diào)用。 讓我們看看效果如何。
// FadeTransition.vue
<template>
<transition name="fade"
enter-active-class="fadeIn"
leave-active-class="fadeOut"
v-bind="$attrs"
v-on="hooks">
<slot></slot>
</transition>
</template>
<script>
export default {
props: {
duration: {
type: Number,
default: 300
}
},
computed: {
hooks() {
return {
beforeEnter: this.setDuration,
afterEnter: this.cleanUpDuration,
beforeLeave: this.setDuration,
afterLeave: this.cleanUpDuration,
...this.$listeners
};
}
},
methods: {
setDuration(el) {
el.style.animationDuration = `${this.duration}ms`;
},
cleanUpDuration(el) {
el.style.animationDuration = "";
}
}
};
</script>
<style>
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.fadeIn {
animation-name: fadeIn;
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.fadeOut {
animation-name: fadeOut;
}
</style>
圖片描述
完整事例地址:https://codesandbox.io/s/j4qn...
現(xiàn)在,我們可以控制實(shí)際的可見過渡時(shí)間,這使我們可重用的過渡變得靈活且易于使用。 但是,如何過渡多個(gè)元素(如列表項(xiàng))呢?
Transition group 支持
你想到的最直接的方法可能是創(chuàng)建一個(gè)新組件,比如fade-transition-group,然后將當(dāng)前transition標(biāo)簽替換為transition-group標(biāo)簽,以實(shí)現(xiàn) group transition。如果我們可以在相同的組件中這樣做,并公開一個(gè)將切換到transition-group實(shí)現(xiàn)的group prop,那會(huì)怎么樣呢?幸運(yùn)的是,我們可以通過render函數(shù)或component和is屬性來實(shí)現(xiàn)這一點(diǎn)。
// FadeTransition.vue
<template>
<component :is="type"
:tag="tag"
enter-active-class="fadeIn"
leave-active-class="fadeOut"
move-class="fade-move"
v-bind="$attrs"
v-on="hooks">
<slot></slot>
</component>
</template>
<script>
export default {
props: {
duration: {
type: Number,
default: 300
},
group: {
type: Boolean,
default: false
},
tag: {
type: String,
default: "div"
}
},
computed: {
type() {
return this.group ? "transition-group" : "transition";
},
hooks() {
return {
beforeEnter: this.setDuration,
afterEnter: this.cleanUpDuration,
beforeLeave: this.setDuration,
afterLeave: this.cleanUpDuration,
leave: this.setAbsolutePosition,
...this.$listeners
};
}
},
methods: {
setDuration(el) {
el.style.animationDuration = `${this.duration}ms`;
},
cleanUpDuration(el) {
el.style.animationDuration = "";
},
setAbsolutePosition(el) {
if (this.group) {
el.style.position = "absolute";
}
}
}
};
</script>
<style>
@keyframes fadeIn {
from {
opacity: 0;
}
to {
opacity: 1;
}
}
.fadeIn {
animation-name: fadeIn;
}
@keyframes fadeOut {
from {
opacity: 1;
}
to {
opacity: 0;
}
}
.fadeOut {
animation-name: fadeOut;
}
.fade-move {
transition: transform 0.3s ease-out;
}
</style>
// App.vue
...
<div class="box-wrapper">
<fade-transition group :duration="300">
<div class="box"
v-for="(item, index) in list"
@click="remove(index)"
:key="item"
>
</div>
</fade-transition>
</div>
...
圖片描述
完整事例地址:https://codesandbox.io/s/pk9r...
文檔中介紹了一個(gè)帶有transition-group元素的警告。 我們基本上必須在元素離開時(shí)將每個(gè)項(xiàng)目的定位設(shè)置為absolute,以實(shí)現(xiàn)其他項(xiàng)目的平滑移動(dòng)動(dòng)畫。 我們也必須添加一個(gè)move-class并手動(dòng)指定過渡持續(xù)時(shí)間,因?yàn)闆]有用于移動(dòng)的 JS hook。我們將這些調(diào)整添加到我們的上一個(gè)示例中。
再做一些調(diào)整,通過在mixin中提取 JS 邏輯,我們可以將其應(yīng)用于輕松創(chuàng)建新的transition組件,只需將其放入下一個(gè)項(xiàng)目中即可。
Vue Transition
在此之前描述的所有內(nèi)容基本上都是這個(gè)小型 transition 集合所包含的內(nèi)容。它有 10 個(gè)封裝的transition組件,每個(gè)約1kb(縮小)。我認(rèn)為它非常方便,可以輕松地在不同的項(xiàng)目中使用。你可以試一試:)
總結(jié)
我們從一個(gè)基本的過渡示例開始,并最終通過可調(diào)整的持續(xù)時(shí)間和transition-group支持來創(chuàng)建可重用的過渡組件。 我們可以使用這些技巧根據(jù)并根據(jù)自身的需求創(chuàng)建自己的過渡組件。 希望讀者從本文中學(xué)到了一些知識(shí),并且可以幫助你們建立功能更好的過渡組件。
今日頭條作為資訊閱讀類產(chǎn)品,F(xiàn)eed流場景是資訊類產(chǎn)品的核心場景之一,關(guān)于Feed流的改版嘗試一直在進(jìn)行,針對(duì)本次優(yōu)化,多次在線上進(jìn)行驗(yàn)證后,得到一個(gè)滿意的結(jié)果,也將我們關(guān)于「頭條首頁改版」運(yùn)用到的設(shè)計(jì)方法進(jìn)行分享。
觀點(diǎn)-實(shí)驗(yàn)-規(guī)則
項(xiàng)目前期提出設(shè)計(jì)論點(diǎn),通過方案和實(shí)驗(yàn)去驗(yàn)證可行性,最后結(jié)合案例形成符合當(dāng)前場景的設(shè)計(jì)規(guī)則,這也是本次設(shè)計(jì)探索所運(yùn)用到的論證方法。
1. 什么是閱讀需求?
一組信息通過不同的字號(hào)反差組合來滿足不同場景下的文字閱讀需求,這稱之為閱讀需求,閱讀需求一般可以歸納為以下3種類型:快速定位型、瀏覽型、閱讀型。
△ 三種閱讀需求
2. 今日頭條首頁的閱讀需求是什么?
今日頭條Feed的閱讀需求,我們定義為快速定位型和瀏覽型之間。原因是在閱讀Feed時(shí),用戶有獲取標(biāo)題關(guān)鍵信息的強(qiáng)定位屬性,同時(shí)也有瀏覽feed信息的瀏覽訴求;從Feed閱讀習(xí)慣的分析,我們提到兩個(gè)關(guān)鍵詞,信息的定位和瀏覽,后面的探索也會(huì)圍繞這兩個(gè)關(guān)鍵詞展開。
△ 首頁的閱讀需求
1. 信噪比與界面
「信噪比」(Signal-to-Noise Ratio)原本是用在聲音和圖像領(lǐng)域的概念,指在聲音傳播過程中信號(hào)和噪音的比例。這個(gè)理論也可以運(yùn)用在頁面中,如果要將訊息完整地傳遞給使用者,可以選擇強(qiáng)化原有的訊息,或是降低多余的雜訊,來提高「信噪比」(Signal-to-Noise Ratio)以增加訊息成功被判讀的機(jī)率,也讓使用者能更輕松地閱讀資訊。
一組信息是否更好的兼容定位與瀏覽屬性,在于信息本身是否足夠強(qiáng)調(diào)與清晰;「信噪比」理論是幫助我們理解「信息清晰度」的存在。
簡而言之,「信噪比」理論通指有效信息和次級(jí)信息的比例,控制平衡這個(gè)比例,可以有利于信息完整的傳遞給用戶,也能更輕松的獲取資訊。
通過強(qiáng)化頁面內(nèi)的有效資訊,降低多余雜訊,從而提升頁面內(nèi)的「信噪比」,以達(dá)到提高有效資訊傳遞,幫助用戶能更輕松獲取資訊的目的?!感旁氡取估碚撌欠浅Mㄓ?、使用廣泛的指導(dǎo)理論,對(duì)信息流頁面設(shè)計(jì)有明確的指導(dǎo)作用;
△ 提升「信噪比」的目的
2. 視覺搜尋實(shí)驗(yàn)
△ 視覺搜尋實(shí)驗(yàn)
在視覺搜尋的實(shí)驗(yàn)里,讓受試者從許多個(gè)「X」里面挑出1個(gè)「O」,然后再讓他們從「┸」里面挑出一個(gè)「┼」。我們把所有的視覺元素稱作刺激總量,大部分的元素(「X」和「┸」)稱為干擾物,唯一不一樣的那個(gè)元素(上面例子的「O」和「┼」)稱為目標(biāo)物。而實(shí)驗(yàn)的目的,就是要檢測在干擾物增加和同等情況下,受試者會(huì)不會(huì)需要花費(fèi)更多時(shí)間才能找到目標(biāo)物。
當(dāng)我們的視覺系統(tǒng)在辨識(shí)影像時(shí),有一些影像的屬性很容易被大腦處理,我們的視覺系統(tǒng)可以很快過濾辨識(shí)這些基礎(chǔ)特征,讓我們的大腦分辨這些影像屬性更容易一些。因此我們涉及到大量信息的設(shè)計(jì)時(shí),如果能夠善用這些基本特征,便可以提高用戶的閱讀效率。
那么,什么樣的特征能夠幫助訊息更快,更有效的被用戶判讀和接收呢?在視覺搜尋實(shí)驗(yàn)中,有一些基礎(chǔ)特征很容易被我們的視覺系統(tǒng)所辨識(shí)出來,其中主要有4種不需注意力介入便能輕易分辨的基本特征:
△ 4種基礎(chǔ)特征
強(qiáng)化信息的基本特征是增強(qiáng)信息被判讀最有效的方式,我們可以根據(jù)場景和用戶訴求,選取最合理的方式來對(duì)信息進(jìn)行處理;這4個(gè)基礎(chǔ)特征,通過反差來增強(qiáng)核心信息的突出程度,輔助信息更好的傳遞給用戶。
通過「視覺搜尋實(shí)驗(yàn)」,我們可以得到兩點(diǎn)結(jié)論:
這兩點(diǎn)結(jié)論是對(duì)于」信噪比「理論的補(bǔ)充,處理好信息的」信噪比「關(guān)系,強(qiáng)化有效資訊,弱化次要雜訊,幫助用戶有效接收資訊,更輕松獲取資訊。
3. 首頁目標(biāo)的變化
資訊的生命周期中,包括了產(chǎn)生、傳遞、接收這三個(gè)重要的階段,而每個(gè)階段都有可能造成信息的損耗;
信息產(chǎn)生是源頭,這里的損耗在所難免,我們所要做的,是盡可能控制」傳遞「和」接受「階段的損耗;早期的頭條首頁承載大量信息,目的是為了讓用戶可以接受到更多信息,這時(shí)「效率」會(huì)是第一位。
但在承載大量信息的同時(shí),頁面信息過多,容易造成信息對(duì)比弱、布局密集,從而導(dǎo)致信息 」傳遞「 階段的損耗,同時(shí)用戶在」接受「信息時(shí),看到擁擠的信息布局,接受信息的」效率「被降低,被迫造成損耗。
為了更好的提升首頁閱讀效率,我們重新審視當(dāng)前的設(shè)計(jì)目標(biāo),通過對(duì)不同組合的空間調(diào)整,平衡展示效率以及閱讀識(shí)別性,控制「傳遞」和「接受」中不必要的信息損耗;將設(shè)計(jì)目標(biāo)從過去的「效率最大化」,調(diào)整為「有效,輕松的閱讀」
對(duì)于這個(gè)目標(biāo),我們結(jié)合之前抽離的」信噪比「理論,進(jìn)行更為細(xì)致的拆解,確保能落實(shí)到后續(xù)的設(shè)計(jì)方案中。
△ 設(shè)計(jì)目標(biāo)轉(zhuǎn)變
4. 回顧信噪比
「信噪比」理論可以平衡頁面內(nèi)有效信息和次級(jí)信息,在這樣理論的引導(dǎo)下,提供的方案其實(shí)更具備說服力。
和圖片噪點(diǎn)一樣,噪點(diǎn)越低,清晰度越高,映射到頁面也是如此,頁面內(nèi)的雜訊過多,影響到有效訊息的傳遞,我們需要做的,就是給頁面進(jìn)行「降噪」處理。
1. 文字的反差比
根據(jù)前期的」信噪比「論點(diǎn)和」視覺搜尋實(shí)驗(yàn)「,我們得出兩個(gè)核心觀點(diǎn):
兩個(gè)論點(diǎn)其實(shí)都提到了信息對(duì)比強(qiáng)弱對(duì)于用戶判讀的影響,由此可見,不同信息的反差關(guān)系,是增強(qiáng)信息傳遞,縮短用戶接受信息耗費(fèi)時(shí)間的關(guān)鍵指標(biāo)。
如果說「信噪比」是信息流優(yōu)化的理論依據(jù),那么「反差比」則是驗(yàn)證頁面信息反差關(guān)系的手段。
調(diào)整頁面內(nèi)文字反差,一般通過三種方式來提升或調(diào)整
△ 提升文字反差方式
讓我們來看首頁中Feed流的標(biāo)題字號(hào),我們通過 iOS 和 Android 的通用文字規(guī)范可以發(fā)現(xiàn),最小閱讀文字為12號(hào)字(10號(hào)字用在標(biāo)簽,9號(hào)字用在數(shù)字提醒,都不適合作為閱讀文字),Material design中正文內(nèi)容默認(rèn)字號(hào)為16px,iOS規(guī)范中則定義了7個(gè)正文字階(14、15、16、17、19、21、23),綜合多方因素,我們選取了16號(hào)字、17號(hào)字為主要驗(yàn)證目標(biāo).最后形成16/12 17/12這兩組組合來驗(yàn)證線上Feed信息流。
「信噪比」和「視覺搜索」理論中,多次提到增強(qiáng)元素反差比,用戶能越快獲取資訊;所以我們也嘗試了加粗字體和加大文字的實(shí)驗(yàn)嘗試,用于驗(yàn)證文字反差比的上限。
△ iOS/Android 通用文字
2. 反差比公式
為了更好的驗(yàn)證和觀察Feed流中的不同文字字號(hào)的反差關(guān)系范圍,我們提出了一個(gè)坐標(biāo)公式用于驗(yàn)證,可以直觀的觀察字號(hào),字色,字重三組信息間的關(guān)系。
Y軸代表字號(hào),X軸是不同灰階文字顏色,我們可以將Feed信息組合中的字號(hào)放入表格中,通過科學(xué)方法檢驗(yàn)反差范圍。
關(guān)于這套驗(yàn)證公式,是我們?yōu)榱蓑?yàn)證文字反差比所提出的檢驗(yàn)方法,通過不同實(shí)驗(yàn)組中字號(hào)的反差范圍來驗(yàn)證哪組更適合Feed場景,最后輸出成符合當(dāng)前場景的通用規(guī)則。
△ 文字/灰階反差比推導(dǎo)圖
最后,我們選擇4組方案進(jìn)行首頁反差比驗(yàn)證,同時(shí)將比字號(hào)放入坐標(biāo)軸中,可以看出以下文字的反差范圍
△ 在反差比范圍內(nèi),選取的四種字體組合
上面4個(gè)表格分別對(duì)應(yīng)4組反差比驗(yàn)證的字號(hào)組合,不同字號(hào)組合的反差比范圍,我們都可視化出來,以便于更好驗(yàn)證哪個(gè)信噪比范圍更合理;每組方案的反差比范圍都不一樣,我們會(huì)通過線上實(shí)驗(yàn),選取最適合當(dāng)前場景的反差比范圍,并形成適用于Feed的反差比規(guī)則。
這里也是驗(yàn)證首頁Feed反差比的上限和下限范圍,有時(shí)主體并不是反差越強(qiáng)越好,反差也是有閾值范圍,超過這個(gè)閾值范圍,會(huì)導(dǎo)致信息展示比例不協(xié)調(diào),用戶側(cè)也會(huì)起到反作用。
目前對(duì)于坐標(biāo)公式驗(yàn)證文字反差比的理論還處于實(shí)驗(yàn)理論階段,我們認(rèn)為對(duì)于字號(hào)和灰階之間,有合理的規(guī)則存在,單獨(dú)對(duì)于規(guī)則的抽離和梳理,還需要大量樣本去實(shí)驗(yàn)論證,后續(xù)有新的結(jié)論產(chǎn)出和模型迭代。
目前線上首頁存在以下問題:
為了解決這些問題,我們對(duì)于首頁的視覺語言進(jìn)行了優(yōu)化,通過」信噪比「理論,我們了解到平衡有效信息和雜訊的比例,是保持信息干凈清晰,更好觸達(dá)用戶的保證;因此我們重新梳理不同題材的結(jié)構(gòu),確保核心信息在首頁展示的唯一性,去掉了對(duì)于用戶閱讀過程中可能造成阻礙的信息。
△ 首頁前后對(duì)比
這樣,首頁上核心信息的展示層級(jí)得到統(tǒng)一,保證了信息干凈清晰,能夠更好觸達(dá)用戶。
在「信噪比」理論和「反差比」實(shí)驗(yàn)的基礎(chǔ)上,輸出了用于線上測試的設(shè)計(jì)方案,為了驗(yàn)證首頁中不同變量的影響,我們把頭部,字號(hào),字重,間距這些可能影響首頁的因素都拆分驗(yàn)證對(duì)于首頁影響;同時(shí),根據(jù)前面」反差比「的驗(yàn)證理論,我們把」字號(hào)加大「和」文字加粗「也放進(jìn)實(shí)驗(yàn)中進(jìn)行驗(yàn)證,為后續(xù)實(shí)驗(yàn)積累數(shù)據(jù)樣本。
△ 線上驗(yàn)證首頁方案
綜合前面的實(shí)驗(yàn)結(jié)果,最終我們選擇了兩組這兩組方案,目前線上在進(jìn)行最后實(shí)驗(yàn)。在實(shí)驗(yàn)中,我們也提取到幾點(diǎn)關(guān)鍵指標(biāo):
用戶對(duì)于灰頭樣式并未特別排斥,這個(gè)對(duì)于過去頭條頂部必須是紅色的認(rèn)知有些挑戰(zhàn);其實(shí)當(dāng)下設(shè)計(jì)趨勢是在減少用戶閱讀的信息干擾,灰頭更符合這一趨勢,同時(shí)使用灰頭也會(huì)提升頭條整體計(jì)品質(zhì)感,對(duì)于后續(xù)設(shè)計(jì)拓展有很大幫助。
加粗字體上,男性用戶比較偏好加粗字體,但是女性用戶和年輕用戶較為反感。
增大Feed字號(hào),信息展示確實(shí)更突出,但是影響到整個(gè)首頁的感官,而且違背了我們的設(shè)計(jì)目標(biāo),同時(shí)也不利于后續(xù)設(shè)計(jì)拓展。部分用戶手機(jī)的展示情況和特殊字體設(shè)置都會(huì)受到大字體影響,需慎重考慮。
前面有談及18號(hào)字的問題,字號(hào)增大確實(shí)能增強(qiáng)視覺感官,但要考慮到頭條用戶比較喜歡運(yùn)用特殊字體,特殊字體對(duì)比通用字體更加個(gè)性化,但是字體大小,展示高度并不可控,當(dāng)字號(hào)比較大的情況下,再加上手寫字體,效果不可控。
△ 線上手寫字體情況
線上實(shí)驗(yàn)后,我們也進(jìn)行了一次線下用戶調(diào)研,用研結(jié)果中用戶對(duì)新版滿意度高于舊版,其中有一個(gè)點(diǎn)多次被用戶提及到,就是調(diào)整后的全圓角搜索框。相比過去的方形搜索框,調(diào)整后的全圓角搜索框是能給用戶留下深刻印象的視覺記憶。
回顧整個(gè)首頁改版過程,我們總結(jié)了項(xiàng)目中的流程和思考,希望能幫助大家:
1. 定義當(dāng)前使用場景的閱讀需求:
閱讀Feed的時(shí)候,用戶有獲取關(guān)鍵信息的強(qiáng)定位屬性,同時(shí)也兼顧feed信息的瀏覽屬性。
2. 通過「信噪比」理論,明確設(shè)計(jì)方向:
強(qiáng)化頁面內(nèi)的有效資訊,降低多余雜訊,提升頁面內(nèi)的」信噪比「,達(dá)到用戶有效接受資訊,輕松獲取資訊的目的。
3. 運(yùn)用「反差比」手段,提升信息反差比,增強(qiáng)信息傳遞:
文字可以通過字號(hào),字色,字重調(diào)整反差關(guān)系,并且通過「文字反差驗(yàn)證表」進(jìn)行反差比范圍驗(yàn)證,推導(dǎo)出更適合首頁的反差范圍,形成首頁反差比規(guī)則。
4. 線上拆分驗(yàn)證,量化首頁影響指標(biāo):
線上驗(yàn)證方案,把字號(hào)、字重、間距疏密,頭部顏色多個(gè)維度拆分驗(yàn)證,觀察不同個(gè)指標(biāo)對(duì)首頁影響。
5. 抽離項(xiàng)目中有價(jià)值的信息,后續(xù)形成統(tǒng)一規(guī)則:
間距樣式和信息層級(jí)統(tǒng)一的feed模塊;從矩形到全圓角的搜索框這些知識(shí)點(diǎn)都可以沉淀成信息流場景的認(rèn)知規(guī)則,并且給予其它業(yè)務(wù)和項(xiàng)目理論和實(shí)踐支持,將理論和線上驗(yàn)證相結(jié)合,形成真正有價(jià)值的設(shè)計(jì)方法。
「信噪比」理論可以廣泛運(yùn)用到頁面信息設(shè)計(jì)中,幫助大家合理的梳理核心信息與次要信息關(guān)系,并且通過」反差比「手段,增強(qiáng)有效信息或弱化次要信息;保障頁面內(nèi)層級(jí)的合理布局,幫助用戶更有效的判讀信息;這次改版也是對(duì)目前認(rèn)知基礎(chǔ)上進(jìn)行的一次拆解與構(gòu)建,過去我們所認(rèn)知的基礎(chǔ)目前可能處于變化階段,這也為我們后續(xù)方向探索提供更多可能性。
希望這些能為后續(xù)設(shè)計(jì)起到幫助,給予大家思路與靈感,更好的服務(wù)用戶。
文章來源:優(yōu)設(shè) 作者:今日頭條UED
設(shè)計(jì)總是在變化。在過去一年里,我們不僅看見了五福的C4D運(yùn)用,雙11的動(dòng)效插畫運(yùn)用,以及大量AR/VR智能的設(shè)計(jì),還有蘋果黑暗模式的普及,新技術(shù)帶來新的體驗(yàn)和解決方案。2020年,關(guān)注研究新興的用戶體驗(yàn)趨勢,前段時(shí)間,在我星球里,我?guī)еO(shè)計(jì)師一起來研究關(guān)于2020界面設(shè)計(jì)趨勢,希望能幫助大家是設(shè)計(jì)中有所啟發(fā)。
研究背景
隨著UI/UX領(lǐng)域人工智能的發(fā)展,和虛擬現(xiàn)實(shí)等新技術(shù)的變革,從前單一的內(nèi)容很難滿足用戶的訴求,用戶的訴求也變得千人前面,所以在研究趨勢之前,我基于這些關(guān)鍵詞,來分析2020的設(shè)計(jì)趨勢。
色彩趨勢
1.彩虹漸變
這兩年來,彩色漸變一直是設(shè)計(jì)趨勢,設(shè)計(jì)師將大膽的漸變,飽和度更高的漸變運(yùn)用在設(shè)計(jì)中去,讓整體的色彩感覺,更加年輕化與活躍。
▲ Apple一直是這個(gè)領(lǐng)域的引領(lǐng)者,隨著當(dāng)年iPhoneX的發(fā)布,彩虹的漸變色,大膽的漸變風(fēng)格瞬間成為設(shè)計(jì)師筆下的弄潮兒。
▲ 這組插畫中,作者就運(yùn)用了大面積的漸變,兩種顏色的運(yùn)用,通過重疊,明度變化,豐富了整個(gè)設(shè)計(jì)層次。
▲ 不僅在平面設(shè)計(jì)中,在網(wǎng)頁設(shè)計(jì)中,也是被大量運(yùn)用,SWATCH的官網(wǎng),清新的漸變配合動(dòng)感的模特照片,以及和產(chǎn)品的完全結(jié)合,讓頁面充滿著活力。
▲ 在移動(dòng)端也是如此,金融產(chǎn)品的背景設(shè)計(jì),銀行卡面的設(shè)計(jì),可視化圖表的運(yùn)用,都能看出大膽漸變還是很受歡迎。
2.黑暗模式
隨著google和facebook以及instagram這些知名應(yīng)用都開始提供黑暗模式,國內(nèi)微信也開始黑暗模式,2020黑暗模式設(shè)計(jì),一定是需要設(shè)計(jì)師去關(guān)注的。
黑暗模式,除了在黑暗中提高內(nèi)容可讀性以外,還能減少用戶疲勞,還可以節(jié)約電池,所以黑暗模式在今年將是所有應(yīng)用程序必不可少的一個(gè)功能。
▲ Google的黑暗模式運(yùn)用,通過一個(gè)簡單的按鈕開關(guān)就可以切換,也可以根據(jù)系統(tǒng)定義切換。
▲ 黑暗模式未來會(huì)成為一種標(biāo)配,一個(gè)軟件設(shè)計(jì)在剛開始的時(shí)候就必須考慮進(jìn)來。
▲ 關(guān)于黑暗模式,正向當(dāng)年iOS扁平化剛出來的時(shí)候,國內(nèi)的很多產(chǎn)品都還沒有準(zhǔn)備好,但是相信過不了多久,黑暗模式一定會(huì)普及開來,所以2020大家都應(yīng)該提前去了解黑暗模式的,設(shè)計(jì)規(guī)范和細(xì)節(jié)。
3.更大膽的一種顏色
▲ 除了漸變色,那么大膽的單色在設(shè)計(jì)中運(yùn)用也會(huì)越來越多,整個(gè)設(shè)計(jì)就一套色彩體系貫穿,大多時(shí)候以品牌色的形式去運(yùn)用,配合留白,對(duì)比明顯的字體,整體給人印象深刻。
▲ 在韓國的應(yīng)用中用的比較多,它的優(yōu)勢是色彩干凈,品牌整體感強(qiáng),但是對(duì)設(shè)計(jì)師駕馭頁面能力也要求很高,因?yàn)榇竺娣e的單色,如果用不好就會(huì)很刺眼。
▲ Naverpay的設(shè)計(jì),整個(gè)界面就是用的綠色漸變,清新同時(shí)也能很好和Naver品牌色進(jìn)行結(jié)合。
▲ 在它的很多頁面中,很多控件這個(gè)綠色運(yùn)用的很巧妙,不會(huì)給人很刺眼的感覺,所以大膽的一種顏色運(yùn)用在2020頁將是設(shè)計(jì)師值得去關(guān)注的一個(gè)方向。
▲ 掃碼加入知識(shí)星球,了解更多
插畫趨勢
在過去幾年里,插畫是一種新的表達(dá)方式,越來越多的設(shè)計(jì)師,插畫師通過插畫表達(dá)產(chǎn)品的情緒,個(gè)人的情緒主張,那么在2020插畫的運(yùn)用就得和品牌很好的融合起來,如果你的插畫是和品牌割裂的,需要注意。
1.和品牌結(jié)合
▲ wibbite的插畫,標(biāo)志性歐美的風(fēng)格,除了插畫本身手法比較簡約模塊,插畫中運(yùn)用的色彩和內(nèi)容本身也很產(chǎn)品定位匹配。
▲ 插畫對(duì)于品牌來說也是非常重要的一個(gè)因素,無論在界面設(shè)計(jì),還是在品牌營銷很多場景都需要插畫去營造產(chǎn)品氛圍和氣質(zhì),插畫有助于將我們的品牌故事講述給聽眾聽,所以在構(gòu)建一個(gè)品牌時(shí)候,插畫是非常重要的點(diǎn)之一,但是做之前一定要盡量多去了解我們?yōu)榭蛻籼峁┑脑O(shè)計(jì)價(jià)值,只有了解了用戶價(jià)值,才能去定義去特色的故事,幫助產(chǎn)品。
▲ Uber系列插畫提供暖色,以及安全藍(lán)的運(yùn)用,突出打車服務(wù)中安全的關(guān)鍵要素。
▲ Google的插畫系統(tǒng)也是如此,沒有很華麗的炫技,有的是對(duì)于多元文化的思考,設(shè)計(jì)場景的融合貫通。
所以不難看出,插畫的方向一定是和品牌結(jié)合的,不會(huì)為了趨勢而趨勢,一定是圍繞內(nèi)容去設(shè)計(jì)。
2.3D插畫
▲ 如果說這2年,各種各樣的插畫手法百花齊放,那么隨著人們的審美變化,趨勢也從靜態(tài)變成動(dòng)態(tài),從平面變成3D,從今年的支付寶五福設(shè)計(jì)中大家應(yīng)該能感覺到2020的插畫設(shè)計(jì)一定是往著3D方向,而且是動(dòng)態(tài)3D方向演進(jìn)的。
▲ 谷歌一組插畫,結(jié)合與大腦、團(tuán)隊(duì)合作、想法、密碼箱為圖形進(jìn)行創(chuàng)意設(shè)計(jì),人物造型可愛好玩,凸顯年輕化潮流。
▲ Apple在中國區(qū)App Store 的一組設(shè)計(jì),整體設(shè)計(jì)以紅色為主,運(yùn)用了象征中國元素的龍、紅包、燈籠、福字、紙牌作為設(shè)計(jì)元素,整體運(yùn)用3D表達(dá),凸顯年輕和趣味性。
3.等距插畫
等距插畫這兩年已經(jīng)是一個(gè)主流風(fēng)格之一,在未來還會(huì)接著流行,但是等距插畫未來或許和場景聯(lián)系在更緊密,在每年天貓雙11設(shè)計(jì)中,互動(dòng)城的設(shè)計(jì)每年基本都是等距插畫風(fēng)格,它的故事感和畫面感,都能讓人眼前一亮,所以電商的設(shè)計(jì),在短時(shí)間內(nèi),大型活動(dòng)場景基本都離不開這個(gè)風(fēng)格。
▲ 這組等距插畫場景故事感很強(qiáng),建立了一個(gè)空間世界,作為網(wǎng)站主風(fēng)格非常的吸引人。
▲ 除了這種大的場景,等距插畫,在小的場景中,作為插畫規(guī)范也是運(yùn)用比較多,它風(fēng)格可輕可重,隨著5G時(shí)代到來,靜態(tài)可能會(huì)逐步演進(jìn)成動(dòng)態(tài)插畫。
4.根據(jù)內(nèi)容定制的插畫
隨著內(nèi)容的升級(jí),對(duì)內(nèi)容的表達(dá)也會(huì)被越來越重視,那么如何更好的把內(nèi)容更生動(dòng)表達(dá)出來,插畫就是很好的一個(gè)形式,根據(jù)內(nèi)容定制的插畫,在很多產(chǎn)品中被運(yùn)用到,互聯(lián)網(wǎng)教育,IT等領(lǐng)域。所以專門針對(duì)內(nèi)容去設(shè)計(jì)插畫,在今年或許是一個(gè)趨勢,插畫不再是孤零零只是為了情感化而存在。
▲ Crowdrise的產(chǎn)品設(shè)計(jì),整體就是運(yùn)用作為整體設(shè)計(jì)語言,風(fēng)格統(tǒng)一,內(nèi)容突出,畫面效果好。
▲ 插畫的形態(tài)終于不再是孤零零的只是用戶情感的表達(dá),而是隨著內(nèi)容的升級(jí)變化,在產(chǎn)品中發(fā)揮的重要性也越來越大。
3.3D黏土插畫的運(yùn)用
3D設(shè)計(jì)因?yàn)榻衲暝O(shè)計(jì)師很喜歡用的樣式之一,我們將盡管3D已經(jīng)存在了一段時(shí)間,但最近我們看到了很多模仿粘土樣式效果的3D插圖的興起。這將成為今年流行的設(shè)計(jì)趨勢,我們甚至還會(huì)看到很多藝術(shù)家在電影,插畫和廣告中結(jié)合了2D和3D風(fēng)格。
▲ 在instagran的一組設(shè)計(jì)中,設(shè)計(jì)師運(yùn)用這種黏土和3D的方式設(shè)計(jì),畫面充滿了生活感和溫暖。
▲ 谷歌也在它們的項(xiàng)目中大量運(yùn)用這種黏土風(fēng)格設(shè)計(jì),會(huì)顯得更加的現(xiàn)代和活潑,黏土的設(shè)計(jì)相對(duì)3D插畫區(qū)別在于更加細(xì)膩,線條上更加柔和。
字體趨勢
這幾年越來越多的公司,開始定制字體,根據(jù)自己的品牌特質(zhì)去做一些獨(dú)特的字體,從國外到國內(nèi),品牌定制字體未來或許還會(huì)越來越多,對(duì)于設(shè)計(jì)師好處來說,這些品牌字體很多都是免費(fèi)開放給設(shè)計(jì)師用,會(huì)形成一個(gè)很高的商業(yè)環(huán)境。
1.定制字體
▲ 錘子發(fā)布了他們的Smartisan T黑字體。
▲ 騰訊發(fā)布了定制的“騰訊字體”,相比原來傾斜的黑體字,騰訊的新字體更現(xiàn)代、更協(xié)調(diào)、更動(dòng)感。運(yùn)用起來也非常有力量感。
▲ 阿里普惠體,隨著集團(tuán)業(yè)務(wù)龐大,字體使用場景多且復(fù)雜,包括各產(chǎn)品客戶端、營銷設(shè)計(jì)、操作系統(tǒng)、硬件設(shè)備、建筑空間及公關(guān)傳播等等。決定以現(xiàn)代為核心設(shè)計(jì)理念,以可靠、明快為設(shè)計(jì)切入點(diǎn),將阿里精神融入到字體當(dāng)中。最終一款擁有現(xiàn)代感滿足全場景黑體誕生了,而且商用免費(fèi)。
▲ 除了前面的阿里,騰訊,錘子,小米OPPO,京東也都發(fā)布了自己的專屬品牌字體,所以在2020年,品牌字體或許是每個(gè)公司的一個(gè)標(biāo)配了,我們拭目以待。
▲ 國外其實(shí)是最早開始為品牌定制字體的,三星手機(jī)雖然銷量消化,但是他們品牌字體:SamsungOne,設(shè)計(jì)風(fēng)格,很強(qiáng)的現(xiàn)代感,而且,這個(gè)字體有不同粗細(xì)的筆畫字重,適用面很廣。
▲ IBM的字體名稱:IBM Plex Sans Text,這款字體設(shè)計(jì)比較簡潔,干凈,沒有多余的筆畫,這個(gè)字體很良心免費(fèi)商用的。
2.粗體的運(yùn)用
縱觀2020的一些設(shè)計(jì),留白越來越大,邊距越留越多,字體也變的很粗,粗的字體和正文普通字體形成了明顯的對(duì)比,再加上網(wǎng)格的布局,讓頁面內(nèi)容更加凸顯。
▲ 大字體的運(yùn)用,字體就是內(nèi)容,重復(fù)運(yùn)用內(nèi)容元素作為排版手段,對(duì)于內(nèi)容組織和平面要求較高。
▲ 在UI設(shè)計(jì)中,大字體的設(shè)計(jì)也很常見,蘋果商店,蘋果官方應(yīng)用都是大字體的推崇者,隨便5G的來臨,對(duì)于內(nèi)容的追求也會(huì)越來越高,那么除了大字體,視覺元素減少,內(nèi)容本身質(zhì)量要求也越來越高。
▲ 粗的字體常用語大標(biāo)題,或者頁面導(dǎo)航性指引作業(yè),幫助用戶更好去理解功能本身,上面這個(gè)頁面粗的字體就是導(dǎo)航,告訴用戶這一頁,你需要去完成什么動(dòng)作指引。
▲ 掃碼加入知識(shí)星球,了解更多
最后
設(shè)計(jì)趨勢必然與技術(shù)發(fā)展緊密結(jié)合,作為設(shè)計(jì)師我們需要了解,以及平時(shí)和我們?cè)O(shè)計(jì)進(jìn)行結(jié)合,下期將帶來,2020的UI設(shè)計(jì)趨勢下部分,看看還有哪些需要我們?nèi)リP(guān)注的。
轉(zhuǎn)自:ui中國-skys
XSS
跨站腳本攻擊(Cross Site Script),本來縮寫是 CSS, 但是為了和層疊樣式表(Cascading Style Sheet, CSS)有所區(qū)分,所以安全領(lǐng)域叫做 “XSS”;
XSS攻擊,通常是指攻擊者通過 “HTML注入”篡改了網(wǎng)頁,插入了惡意的腳本,從而在用戶瀏覽網(wǎng)頁時(shí),對(duì)用戶的瀏覽器進(jìn)行控制或者獲取用戶的敏感信息(Cookie, SessionID等)的一種攻擊方式。
頁面被注入了惡意JavaScript腳本,瀏覽器無法判斷區(qū)分這些腳本是被惡意注入的,還是正常的頁面內(nèi)容,所以惡意注入Javascript腳本也擁有了所有的腳本權(quán)限。如果頁面被注入了惡意 JavaScript腳本,它可以做哪些事情呢?
可以竊取 cookie信息。惡意 JavaScript可以通過 ”doccument.cookie“獲取cookie信息,然后通過 XMLHttpRequest或者Fetch加上CORS功能將數(shù)據(jù)發(fā)送給惡意服務(wù)器;惡意服務(wù)器拿到用戶的cookie信息之后,就可以在其他電腦上模擬用戶的登陸,然后進(jìn)行轉(zhuǎn)賬操作。
可以監(jiān)聽用戶行為。惡意JavaScript可以使用 "addEventListener"接口來監(jiān)聽鍵盤事件,比如可以獲取用戶輸入的銀行卡等信息,又可以做很多違法的事情。
可以修改DOM 偽造假的登陸窗口,用來欺騙用戶輸入用戶名和密碼等信息。
還可以在頁面內(nèi)生成浮窗廣告,這些廣告會(huì)嚴(yán)重影響用戶體驗(yàn)。
XSS攻擊可以分為三類:反射型,存儲(chǔ)型,基于DOM型(DOM based XSS)
反射型
惡意腳本作為網(wǎng)絡(luò)請(qǐng)求的一部分。
const Koa = require("koa");
const app = new Koa();
app.use(async ctx => {
// ctx.body 即服務(wù)端響應(yīng)的數(shù)據(jù)
ctx.body = '<script>alert("反射型 XSS 攻擊")</script>';
})
app.listen(3000, () => {
console.log('啟動(dòng)成功');
});
訪問 http://127.0.0.1:3000/ 可以看到 alert執(zhí)行
反射型XSS1
舉一個(gè)常見的場景,我們通過頁面的url的一個(gè)參數(shù)來控制頁面的展示內(nèi)容,比如我們把上面的一部分代碼改成下面這樣
app.use(async ctx => {
// ctx.body 即服務(wù)端響應(yīng)的數(shù)據(jù)
ctx.body = ctx.query.userName;
})
此時(shí)訪問 http://127.0.0.1:3000?userName=xiaoming 可以看到頁面上展示了xiaoming,此時(shí)我們?cè)L問 http://127.0.0.1:3000?userName=<script>alert("反射型 XSS 攻擊")</script>, 可以看到頁面彈出 alert。
反射型XSS2
通過這個(gè)操作,我們會(huì)發(fā)現(xiàn)用戶將一段含有惡意代碼的請(qǐng)求提交給服務(wù)器,服務(wù)器在接收到請(qǐng)求時(shí),又將惡意代碼反射給瀏覽器端,這就是反射型XSS攻擊。另外一點(diǎn)需要注意的是,Web 服務(wù)器不會(huì)存儲(chǔ)反射型 XSS 攻擊的惡意腳本,這是和存儲(chǔ)型 XSS 攻擊不同的地方。
在實(shí)際的開發(fā)過程中,我們會(huì)碰到這樣的場景,在頁面A中點(diǎn)擊某個(gè)操作,這個(gè)按鈕操作是需要登錄權(quán)限的,所以需要跳轉(zhuǎn)到登錄頁面,登錄完成之后再跳轉(zhuǎn)會(huì)A頁面,我們是這么處理的,跳轉(zhuǎn)登錄頁面的時(shí)候,會(huì)加一個(gè)參數(shù) returnUrl,表示登錄完成之后需要跳轉(zhuǎn)到哪個(gè)頁面,即這個(gè)地址是這樣的 http://xxx.com/login?returnUrl=http://xxx.com/A,假如這個(gè)時(shí)候把returnUrl改成一個(gè)script腳本,而你在登錄完成之后,如果沒有對(duì)returnUrl進(jìn)行合法性判斷,而直接通過window.location.href=returnUrl,這個(gè)時(shí)候這個(gè)惡意腳本就會(huì)執(zhí)行。
存儲(chǔ)型
存儲(chǔ)型會(huì)把用戶輸入的數(shù)據(jù)“存儲(chǔ)”在服務(wù)器。
比較常見的一個(gè)場景就是,攻擊者在社區(qū)或論壇寫下一篇包含惡意 JavaScript代碼的博客文章或評(píng)論,文章或評(píng)論發(fā)表后,所有訪問該博客文章或評(píng)論的用戶,都會(huì)在他們的瀏覽器中執(zhí)行這段惡意的JavaScript代碼。
存儲(chǔ)型攻擊大致需要經(jīng)歷以下幾個(gè)步驟
首先攻擊者利用站點(diǎn)漏洞將一段惡意JavaScript代碼提交到網(wǎng)站數(shù)據(jù)庫中
然后用戶向網(wǎng)站請(qǐng)求包含了惡意 JavaScript腳本的頁面
當(dāng)用戶瀏覽該頁面的時(shí)候,惡意腳本就會(huì)將用戶的cookie信息等數(shù)據(jù)上傳到服務(wù)器
存儲(chǔ)型XSS
舉一個(gè)簡單的例子,一個(gè)登陸頁面,點(diǎn)擊登陸的時(shí)候,把數(shù)據(jù)存儲(chǔ)在后端,登陸完成之后跳轉(zhuǎn)到首頁,首頁請(qǐng)求一個(gè)接口將當(dāng)前的用戶名顯示到頁面
客戶端代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>XSS-demo</title>
<style>
.login-wrap {
height: 180px;
width: 300px;
border: 1px solid #ccc;
padding: 20px;
margin-bottom: 20px;
}
input {
width: 300px;
}
</style>
</head>
<body>
<div class="login-wrap">
<input type="text" placeholder="用戶名" class="userName">
<br>
<input type="password" placeholder="密碼" class="password">
<br>
<br>
<button class="btn">登陸</button>
</div>
</body>
<script>
var btn = document.querySelector('.btn');
btn.onclick = function () {
var userName = document.querySelector('.userName').value;
var password = document.querySelector('.password').value;
fetch('http://localhost:3200/login', {
method: 'POST',
body: JSON.stringify({
userName,
password
}),
headers:{
'Content-Type': 'application/json'
},
mode: 'cors'
})
.then(function (response) {
return response.json();
})
.then(function (res) {
alert(res.msg);
window.location.href= "http://localhost:3200/home";
})
.catch(err => {
message.error(`本地測試錯(cuò)誤 ${err.message}`);
console.error('本地測試錯(cuò)誤', err);
});
}
</script>
</html>
服務(wù)端代碼
const Koa = require("koa");
const app = new Koa();
const route = require('koa-route');
var bodyParser = require('koa-bodyparser');
const cors = require('@koa/cors');
// 臨時(shí)用一個(gè)變量來存儲(chǔ),實(shí)際應(yīng)該存在數(shù)據(jù)庫中
let currentUserName = '';
app.use(bodyParser()); // 處理post請(qǐng)求的參數(shù)
const login = ctx => {
const req = ctx.request.body;
const userName = req.userName;
currentUserName = userName;
ctx.response.body = {
msg: '登陸成功'
};
}
const home = ctx => {
ctx.body = currentUserName;
}
app.use(cors());
app.use(route.post('/login', login));
app.use(route.get('/home', home));
app.listen(3200, () => {
console.log('啟動(dòng)成功');
});
點(diǎn)擊登陸將輸入信息提交大服務(wù)端,服務(wù)端使用變量 currentUserName來存儲(chǔ)當(dāng)前的輸入內(nèi)容,登陸成功后,跳轉(zhuǎn)到 首頁, 服務(wù)端會(huì)返回當(dāng)前的用戶名。如果用戶輸入了惡意腳本內(nèi)容,則惡意腳本就會(huì)在瀏覽器端執(zhí)行。
在用戶名的輸入框輸入 <script>alert('存儲(chǔ)型 XSS 攻擊')</script>,執(zhí)行結(jié)果如下
存儲(chǔ)型XSS
基于DOM(DOM based XSS)
通過惡意腳本修改頁面的DOM節(jié)點(diǎn),是發(fā)生在前端的攻擊
基于DOM攻擊大致需要經(jīng)歷以下幾個(gè)步驟
攻擊者構(gòu)造出特殊的URL,其中包含惡意代碼
用戶打開帶有惡意代碼的URL
用戶瀏覽器接受到響應(yīng)后執(zhí)行解析,前端JavaScript取出URL中的惡意代碼并執(zhí)行
惡意代碼竊取用戶數(shù)據(jù)并發(fā)送到攻擊者的網(wǎng)站,冒充用戶行為,調(diào)用目標(biāo)網(wǎng)站接口執(zhí)行攻擊者指定的操作。
舉個(gè)例子:
<body>
<div class="login-wrap">
<input type="text" placeholder="輸入url" class="url">
<br>
<br>
<button class="btn">提交</button>
<div class="content"></div>
</div>
</body>
<script>
var btn = document.querySelector('.btn');
var content = document.querySelector('.content');
btn.onclick = function () {
var url = document.querySelector('.url').value;
content.innerHTML = `<a href=${url}>跳轉(zhuǎn)到輸入的url</a>`
}
</script>
點(diǎn)擊提交按鈕,會(huì)在當(dāng)前頁面插入一個(gè)超鏈接,其地址為文本框的內(nèi)容。
在輸入框輸入 如下內(nèi)容
'' onclick=alert('哈哈,你被攻擊了')
執(zhí)行結(jié)果如下
基于DOM型XSS
首先用兩個(gè)單引號(hào)閉合調(diào) href屬性,然后插入一個(gè)onclick事件。點(diǎn)擊這個(gè)新生成的鏈接,腳本將被執(zhí)行。
上面的代碼是通過執(zhí)行 執(zhí)行 alert來演示的攻擊類型,同樣你可以把上面的腳本代碼修改為任何你想執(zhí)行的代碼,比如獲取 用戶的 cookie等信息,<script>alert(document.cookie)</script>,同樣也是可以的.
防御XSS
HttpOnly
由于很多XSS攻擊都是來盜用Cookie的,因此可以通過 使用HttpOnly屬性來防止直接通過 document.cookie 來獲取 cookie。
一個(gè)Cookie的使用過程如下
瀏覽器向服務(wù)器發(fā)起請(qǐng)求,這時(shí)候沒有 Cookie
服務(wù)器返回時(shí)設(shè)置 Set-Cookie 頭,向客戶端瀏覽器寫入Cookie
在該 Cookie 到期前,瀏覽器訪問該域下的所有頁面,都將發(fā)送該Cookie
HttpOnly是在 Set-Cookie時(shí)標(biāo)記的:
通常服務(wù)器可以將某些 Cookie 設(shè)置為 HttpOnly 標(biāo)志,HttpOnly 是服務(wù)器通過 HTTP 響應(yīng)頭來設(shè)置的。
const login = ctx => {
// 簡單設(shè)置一個(gè)cookie
ctx.cookies.set(
'cid',
'hello world',
{
domain: 'localhost', // 寫cookie所在的域名
path: '/home', // 寫cookie所在的路徑
maxAge: 10 * 60 * 1000, // cookie有效時(shí)長
expires: new Date('2021-02-15'), // cookie失效時(shí)間
httpOnly: true, // 是否只用于http請(qǐng)求中獲取
overwrite: false // 是否允許重寫
}
)
}
HttpOnly
需要注意的一點(diǎn)是:HttpOnly 并非阻止 XSS 攻擊,而是能阻止 XSS 攻擊后的 Cookie 劫持攻擊。
輸入和輸出的檢查
永遠(yuǎn)不要相信用戶的輸入。
輸入檢查一般是檢查用戶輸入的數(shù)據(jù)是都包含一些特殊字符,如 <、>, '及"等。如果發(fā)現(xiàn)特殊字符,則將這些字符過濾或編碼。這種可以稱為 “XSS Filter”。
安全的編碼函數(shù)
針對(duì)HTML代碼的編碼方式是 HtmlEncode(是一種函數(shù)實(shí)現(xiàn),將字符串轉(zhuǎn)成 HTMLEntrities)
& --> &
< --> <
> --> >
" --> "
相應(yīng)的, JavaScript的編碼方式可以使用 JavascriptEncode。
假如說用戶輸入了 <script>alert("你被攻擊了")</script>,我們要對(duì)用戶輸入的內(nèi)容進(jìn)行過濾(如果包含了 <script> 等敏感字符,就過濾掉)或者對(duì)其編碼,如果是惡意的腳本,則會(huì)變成下面這樣
<script>alert("你被攻擊了");</script>
經(jīng)過轉(zhuǎn)碼之后的內(nèi)容,如 <script>標(biāo)簽被轉(zhuǎn)換為 <script>,即使這段腳本返回給頁面,頁面也不會(huì)指向這段代碼。
防御 DOM Based XSS
我們可以回看一下上面的例子
btn.onclick = function () {
var url = document.querySelector('.url').value;
content.innerHTML = `<a href=${url}>跳轉(zhuǎn)到輸入的url</a>`
}
事實(shí)上,DOM Based XSS 是從 JavaScript中輸出數(shù)據(jù)到HTML頁面里。
用戶輸入 '' onclick=alert('哈哈,你被攻擊了'),然后通過 innerHTML 修改DOM的內(nèi)容,就變成了 <a href='' onclick=alert('哈哈,你被攻擊了')>跳轉(zhuǎn)到輸入的url</a>, XSS因此產(chǎn)生。
那么正確的防御方法是什么呢?
從JavaScript輸出到HTML頁面,相當(dāng)于一次 XSS輸出的過程,需要根據(jù)不同場景進(jìn)行不同的編碼處理
變量輸出到 <script>,執(zhí)行一次 JavascriptEncode
通過JS輸出到HTML頁面
輸出事件或者腳本,做 JavascriptEncode 處理
輸出 HTML內(nèi)容或者屬性,做 HtmlEncode 處理
會(huì)觸發(fā) DOM Based XSS的地方有很多,比如
xxx.interHTML
xxx.outerHTML
document.write
頁面中所有的inputs框
XMLHttpRequest返回的數(shù)據(jù)
...
項(xiàng)目中如果用到,一定要避免在字符串中拼接不可信的數(shù)據(jù)。
利用CSP
CSP (Content Security Policy) 即內(nèi)容安全策略,是一種可信白名單機(jī)制,可以在服務(wù)端配置瀏覽器哪些外部資源可以加載和執(zhí)行。我們只需要配置規(guī)則,如何攔截是由瀏覽器自己實(shí)現(xiàn)的。我們可以通過這種方式來盡量減少 XSS 攻擊。
通??梢酝ㄟ^兩種方式來開啟 CSP:
設(shè)置 HTTP Header 的 Content-Security-Policy
Content-Security-Policy: default-src 'self'; // 只允許加載本站資源
Content-Security-Policy: img-src https://* // 只允許加載 HTTPS 協(xié)議圖片
Content-Security-Policy: child-src 'none' // 允許加載任何來源框架
設(shè)置 meta 標(biāo)簽的方式
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src https://*; child-src 'none';">
這周我們進(jìn)行下一步討論:如何對(duì)分析結(jié)果進(jìn)行選擇。
首先我們需要了解互聯(lián)網(wǎng)產(chǎn)品研發(fā)團(tuán)隊(duì)的各個(gè)角色分工。
對(duì)于初期的產(chǎn)品研發(fā),可能公司沒有團(tuán)隊(duì)概念,所以從想法到設(shè)計(jì)到開發(fā),都由一個(gè)人搞定;
等到公司發(fā)展差不多,自己成了領(lǐng)導(dǎo),就可以對(duì)各個(gè)角色和分工有所分組,也就是大多數(shù)初創(chuàng)公司的分配情況:
隨著公司業(yè)務(wù)的發(fā)展,產(chǎn)品經(jīng)理需要處理越來越多的業(yè)務(wù)規(guī)劃任務(wù),所以從業(yè)務(wù)視角和用戶視角將之前的產(chǎn)品經(jīng)理崗位職責(zé)進(jìn)行劃分:
所以最終的角色分配是:
再大一點(diǎn)的公司,會(huì)增加項(xiàng)目經(jīng)理崗,把之前產(chǎn)品經(jīng)理負(fù)責(zé)的職責(zé)拆出一部分,這部分職責(zé)就是項(xiàng)目管理。所以角色分配最終是:
了解了團(tuán)隊(duì)角色分工,只是讓產(chǎn)品得到了更專業(yè)的技術(shù)支持,接下來我們需要切入正題:對(duì)交互方案進(jìn)行評(píng)價(jià)篩選,篩選的標(biāo)準(zhǔn)可以圍繞:有用性、易用性和吸引力展開。
1. 有用性:
方案是否同時(shí)滿足業(yè)務(wù)目標(biāo)與用戶體驗(yàn)?zāi)繕?biāo),為了更好理解,大家可以看下如下事例:
如果所有的線上商品都發(fā)順豐快遞,對(duì)于用戶來講,用戶體驗(yàn)當(dāng)然很好:夠快。但是從業(yè)務(wù)目標(biāo)來講,這是不可取的,畢竟快遞不能獨(dú)順豐一攬。所以這個(gè)想法沒有顧及到業(yè)務(wù)目標(biāo),是不可行的;
很早之前,有過 Open ID 的概念:用一個(gè) ID 就可以登錄多個(gè)網(wǎng)站。但是接入了 Open ID 的網(wǎng)站,對(duì)于自身產(chǎn)品的登錄注冊(cè)就會(huì)有一定影響,所以這個(gè)想法不了了之。
后來 Facebook 和 Twitter 開放了自己 ID,可用這兩個(gè)賬號(hào)進(jìn)行其他網(wǎng)站登錄。于是國內(nèi)很多網(wǎng)站也開始支持微博、微信、QQ 賬號(hào)登錄。
這樣降低了用戶注冊(cè)成本,而且也獲得了一定收益。所以這是個(gè)不錯(cuò)的想法,但是對(duì)于一些需要獲得用戶信息的產(chǎn)品可能不太適合,所以視情況而定。
總結(jié)來說,有用性就是要滿足產(chǎn)品利益與用戶利益。畢竟如果只是很好看,最多也就只能被稱作一個(gè)藝術(shù)品。
2. 可用性
所謂可用性就是用戶容易理解,使用起來沒有障礙,并且感受良好。
關(guān)于產(chǎn)品可用性,大家可以去了解下鼎鼎有名的尼爾森十大可用性原則。
3. 吸引力
所謂吸引力就是產(chǎn)品有打動(dòng)人、超越用戶期望值的細(xì)節(jié)。
關(guān)于吸引力設(shè)計(jì),大家可以了解一下 KANO 模型,KANO 模型定義了三個(gè)層次用戶需求:
基本型的需求:用戶認(rèn)為產(chǎn)品必須有的功能屬性,如果沒有,用戶會(huì)不滿意;如果有,用戶會(huì)覺得理所當(dāng)然。這個(gè)層次的需求,還談不上用戶滿意與否;
期望型的需求:不是產(chǎn)品必須的功能屬性,可能用戶自己也不清楚一些功能,但是又恰恰是用戶希望看到的。如果這種需求實(shí)現(xiàn)得越多,用戶會(huì)越滿意;如果沒有滿足用戶這種期望值,用戶會(huì)不滿意;
興奮型的需求:對(duì)于一些無關(guān)緊要的功能需求,如果產(chǎn)品滿足了這些需求,用戶會(huì)非常滿意,從而提高用戶忠誠度,最后把它推薦給好友。
通過以上標(biāo)準(zhǔn)對(duì)方案進(jìn)行分析,最后涉及到?jīng)Q策,不管哪種類型的角色分配,都需要進(jìn)行決策,這里可分為以下兩種:
個(gè)人決策:對(duì)于最后的方案選擇,由一個(gè)人進(jìn)行「拍板」,這種決策方式速度快,容易抓到事情本質(zhì);但是缺點(diǎn)是缺少了團(tuán)隊(duì)氛圍,不太建議這種一人說了算的決策方式;
群體決策:這種決策方式團(tuán)隊(duì)氛圍會(huì)好很多,通過發(fā)表每個(gè)人的看法,最后得到合理的、正確的、富有創(chuàng)造力的解決方案;但是缺點(diǎn)就是因?yàn)閰⑴c者多,需要比較長的時(shí)間進(jìn)行決策,即使這樣,也建議使用這種決策方式,不過前提是需要事先確定一個(gè)明確的負(fù)責(zé)人,這樣可以對(duì)決策后果進(jìn)行負(fù)責(zé)。
從小的方面來講,決策也可分為:
內(nèi)部 review:設(shè)計(jì)的作品先在團(tuán)隊(duì)內(nèi)部進(jìn)行過稿,然后修改,切忌全部做完才進(jìn)行 review,需要做完一步就進(jìn)行內(nèi)部討論;
外部評(píng)審:以會(huì)議的形式展開,召集大家對(duì)作品進(jìn)行講解。
確定了最終方案后,我們需要把它推銷出去,具體有以下幾種方法:
將思考過程可視化:可以采取上一篇文章的表格分析方式,讓設(shè)計(jì)更有說服力;
自己人效應(yīng):對(duì)自己人說的一些建議方法更加信賴;
準(zhǔn)備一份PPT:展示設(shè)計(jì)思路;
講一個(gè)故事:以用戶的某個(gè)使用場景開頭,一步步講解用戶的使用情況,慢慢過渡到產(chǎn)品功能設(shè)計(jì);
掌握必要的演講技巧和表達(dá)能力:包括口頭和文字表達(dá)能力,通過這兩種表達(dá)理清思路,也更好讓別人進(jìn)行反饋。
最后想說的一些話:
作為交互(設(shè)計(jì))專業(yè)人士,我們需要把握好一個(gè)尺度:什么該堅(jiān)持,什么不該堅(jiān)持,對(duì)于一些專業(yè)方面的東西,我們需要團(tuán)隊(duì)內(nèi)部人員都堅(jiān)持,這樣目標(biāo)會(huì)更清晰;但是對(duì)于一些比較小的設(shè)計(jì)細(xì)節(jié),有時(shí)候可以適當(dāng)妥協(xié)。
如何對(duì)設(shè)計(jì)需求分析結(jié)果進(jìn)行選擇:
文章來源:優(yōu)設(shè) 作者:Pony歐尼的日常
以下是百度網(wǎng)盤UE團(tuán)隊(duì)近期對(duì)會(huì)員中心體驗(yàn)進(jìn)行優(yōu)化,希望對(duì)大家做商業(yè)化產(chǎn)品有所幫助。
會(huì)員中心是承載著產(chǎn)品增值權(quán)益展示、購買、管理的「集合地」。自2016年起推出會(huì)員和超級(jí)會(huì)員兩項(xiàng)增值服務(wù)至今已有4年時(shí)間,隨著時(shí)間推移,用戶對(duì)網(wǎng)盤會(huì)員的訴求越來越多樣,會(huì)員中心也不僅僅承載著支付能力,更多地是獲取福利信息和情感上的尊享感知,同時(shí)在產(chǎn)品框架上的拓展性和效率也有待提升,因此有了本次會(huì)員中心改版項(xiàng)目。
對(duì)于設(shè)計(jì)師而言,我們發(fā)起這個(gè)項(xiàng)目所面臨的挑戰(zhàn),不僅停留在用戶體驗(yàn)的優(yōu)化還需要兼顧商業(yè)轉(zhuǎn)化。接下來將從確定目標(biāo)、會(huì)員中心框架重構(gòu)、視覺語言升級(jí)、沉淀通用組件等方面,跟大家分享下改版背后的設(shè)計(jì)思考。
在著手推進(jìn)項(xiàng)目設(shè)計(jì)前,我們通過定性和定量的分析,并組織多角色對(duì)本次升級(jí)的目標(biāo)進(jìn)行確認(rèn),本次升級(jí)的目標(biāo)是:提升用戶決策效率;提升用戶尊享感;沉淀設(shè)計(jì)組件庫。
1. 為什么要提升用戶決策效率?
會(huì)員中心是價(jià)值與信息的洼地,用戶需要在眾多特權(quán)、優(yōu)惠信息中做出決策。整個(gè)框架清晰、直觀、易懂,是提升用戶決策效率及滿意度的關(guān)鍵所在。
我們通過支付轉(zhuǎn)化漏斗分析并結(jié)合用戶反饋發(fā)現(xiàn),改版前,會(huì)員中心信息架構(gòu)比較扁平和單一,缺乏關(guān)鍵性信息的直觀展示,比如:優(yōu)惠信息、會(huì)員服務(wù)信息,導(dǎo)致部分用戶無法在付費(fèi)過程中更好地做決策。
此外,在支付流程上,操作鏈條較長,容易引起用戶厭倦,導(dǎo)致用戶流失。基于這些考慮,我們將對(duì)現(xiàn)有框架進(jìn)行升級(jí),以提升用戶的決策效率。
2. 為什么要提升用戶尊享感?
會(huì)員中心也是用戶感知身份變化、感知會(huì)員尊享的第一步。改版前,不同身份用戶(未開通/會(huì)員/超級(jí)會(huì)員)看到的會(huì)員頁面卻是相同的,無法直觀感受到不同身份的差異。
通過UER的用戶訪談我們也發(fā)現(xiàn),很多用戶出現(xiàn)以下場景:
購買會(huì)員后用戶,產(chǎn)生疑惑「是否購買成功了嗎?」;身為超級(jí)會(huì)員用戶,「感受不到任何尊享感受」;快過期的會(huì)員用戶,「對(duì)會(huì)員/超級(jí)會(huì)員快過期的也感知不到,導(dǎo)致特權(quán)中斷,影響使用體驗(yàn)」…
因此,我們需要對(duì)整體身份的感知進(jìn)行升級(jí),讓用戶更清晰地感知到自己身份的層級(jí)。
3. 為什么要沉淀設(shè)計(jì)組件庫?
對(duì)于產(chǎn)品而言,會(huì)員中心也是會(huì)員類活動(dòng)的主要運(yùn)營渠道。
在日?!感〔娇炫堋沟枨笾校瑸榱颂嵘?xiàng)目組的開發(fā)效率以及更好地實(shí)現(xiàn)產(chǎn)品側(cè)多場景模塊靈活調(diào)用的訴求,需要對(duì)復(fù)用率較高且靈活多變的模塊(尤其是支付模塊、特權(quán)模塊)進(jìn)行組件化。因此我們也對(duì)多個(gè)模塊進(jìn)行組件沉淀,提升產(chǎn)品迭代效率。不僅于此,組件化也能給用戶提供更加統(tǒng)一的認(rèn)知,做到產(chǎn)品體驗(yàn)上的統(tǒng)一和規(guī)范化。
明確了目標(biāo)后,我們從以下維度進(jìn)行設(shè)計(jì)升級(jí),解決現(xiàn)存問題:懂你所想,會(huì)員中心框架重構(gòu);凸顯尊享感知,視覺語言升級(jí);提升迭代效率,通用組件沉淀。
我們本次框架重構(gòu)的關(guān)鍵詞就是「懂你所想」,只有更了解用戶,才能提供更符合用戶的選擇,從而提升用戶決策效率。因此,我們?cè)诮换タ蚣軐用嫔希隽艘韵聨准拢捍蛟旆謱硬季?;?qiáng)化關(guān)鍵信息;縮短支付步長;智能化推薦。
打造分層布局
進(jìn)入會(huì)員中心的用戶,根據(jù)會(huì)員成長周期可被劃分為:歷史未付費(fèi)用戶、會(huì)員開通中用戶、會(huì)員即將過期用戶、會(huì)員已過期用戶。
因此,在這次框架設(shè)計(jì)中,我們根據(jù)身份、動(dòng)機(jī)、行為的差異進(jìn)行分層布局。改變以往的「多人一面」的布局架構(gòu),打造出新的「多人多面」的靈活分層頁面布局。
當(dāng)用戶是歷史未付費(fèi)用戶時(shí),我們更加突出用戶的特權(quán)介紹和商品支付,便于用戶了解會(huì)員服務(wù)和商品信息;當(dāng)用戶是開通中的用戶,我們更加突出用戶可尊享的福利信息,突出尊享感;當(dāng)用戶為即將過期用戶或已過期用戶時(shí),我們展示用戶常用特權(quán)信息,喚醒用戶付費(fèi)意愿,并為用戶提供便捷的續(xù)費(fèi)能力。
下面是改版前后效果對(duì)比,從單一身份感知到多元分層處理。
強(qiáng)化關(guān)鍵信息
關(guān)鍵信息也是用戶更為「關(guān)心」的信息,通過調(diào)研發(fā)現(xiàn),網(wǎng)盤用戶更加關(guān)注會(huì)員優(yōu)惠活動(dòng)信息、服務(wù)到期提醒以及會(huì)員之間的差異性,因此在本次升級(jí)中,我們對(duì)用戶所關(guān)心的決策信息進(jìn)行強(qiáng)化,恰如其分地展示便于用戶決策,同時(shí)提升用戶的付費(fèi)意愿。
新增運(yùn)營渠道
通過用戶訪談,了解到很多用戶總是錯(cuò)過網(wǎng)盤的福利活動(dòng),不知道在哪里能接受到一手信息。
因此,本次升級(jí)我們?cè)跁?huì)員中心中新增了運(yùn)營位,增加用戶關(guān)注的優(yōu)惠活動(dòng)的曝光。
服務(wù)到期提醒
針對(duì)即將過期或已過期的用戶,我們會(huì)展示用戶常用特權(quán)功能的即將到期的信息,避免用戶特權(quán)功能到期后,給用戶日常使用帶來困擾,比如使用視頻原畫備份等功能,我們也會(huì)提前告知給用戶:「3天后即將到期,將不再享有視頻原畫備份和在線解壓等11項(xiàng)特權(quán)」,讓用戶提前做決策。
強(qiáng)化特權(quán)的差異對(duì)比
此外,我們還強(qiáng)化了特權(quán)對(duì)比的差異,分別展示了普通用戶、會(huì)員用戶、超級(jí)會(huì)員用戶擁有特權(quán)功能的差異性,便于用戶根據(jù)自身需求選擇對(duì)應(yīng)更為合適的會(huì)員服務(wù),避免買錯(cuò)等一系列不便或者多花冤枉錢的行為。
縮短支付步長
為了更方便用戶進(jìn)行支付,讓用戶付費(fèi)行為更加順暢絲滑,我們摒棄以往全頁面跳轉(zhuǎn)形式,采用了浮層收銀臺(tái)的方式,減少用戶在頁面間的跳轉(zhuǎn)而帶來的迷失感,達(dá)到簡化支付路徑的目的。
也在用戶即將過期等狀態(tài),保留了原有前置展示商品和支付操作的方式,讓用戶一鍵完成續(xù)費(fèi),方便又快捷。同時(shí),也會(huì)在用戶選擇商品支付時(shí),展示用戶帳號(hào)信息,避免用戶買錯(cuò)的問題。
智能化推薦
與以往不同,我們不局限于通過理性的信息展示,讓用戶自己搜尋信息、被動(dòng)匹配,同時(shí)我們也在不斷嘗試采用更加擬人化、對(duì)話感的方式觸達(dá)用戶,推送給用戶更為關(guān)注的信息,更加精細(xì)化地探索多樣的運(yùn)營場景。
比如:針對(duì)已付費(fèi)用戶,結(jié)合用戶的使用場景,更多展示特權(quán)信息,如:「周末看視頻,2倍速、2K、極速加載缺一不可」;
當(dāng)我們上了會(huì)員新特權(quán)的時(shí)候,也會(huì)及時(shí)告知用戶,讓他們享受更加豐富的權(quán)益。
本次對(duì)會(huì)員中心的視覺呈現(xiàn)也做了全新升級(jí),不僅凸顯會(huì)員的尊享感、情感化,同時(shí)兼顧用戶的識(shí)別效率及后續(xù)拓展性,針對(duì)這一目標(biāo),我們做了以下優(yōu)化:卡面升級(jí),提升身份感;品牌色優(yōu)化,確保拓展性;icon重塑,強(qiáng)化識(shí)別性;驚喜彩蛋,提升情感化。
卡片升級(jí),提升身份感
會(huì)員身份卡片是用戶直觀感受身份變化的第一步。本次卡片設(shè)計(jì)中,在卡片比例上,盡可能接近于實(shí)物卡片,并在卡面肌理表達(dá)上,采用磨砂質(zhì)地,更貼合用戶自然認(rèn)知,卡片顏色結(jié)合會(huì)員品牌色進(jìn)行設(shè)計(jì)。同時(shí)結(jié)合網(wǎng)盤品牌基因中的logo的「云」,提升品牌差異化。
當(dāng)用戶進(jìn)入會(huì)員中心時(shí),采用光影動(dòng)效,同時(shí)描繪「云」型,提升視覺層次感,同時(shí)加深用戶認(rèn)知。
品牌色優(yōu)化,確保拓展性
我們還重新定義了會(huì)員體系的品牌色,超級(jí)會(huì)員選用黑金配色來突顯最高級(jí)別身份。
主題色延續(xù)了網(wǎng)盤會(huì)員色系,超級(jí)會(huì)員為金色,會(huì)員為紅色,在此基礎(chǔ)上調(diào)整色彩明度。新配色在產(chǎn)品界面和運(yùn)營活動(dòng)上,能給用戶帶來更加直觀的身份感知。
輔助色為黑白,因?yàn)樗巧适澜缰械?「 經(jīng)典 」 ,給人以簡潔、純粹的審美感受和視覺享受。以黑白色作為會(huì)員體系的輔助色,可以襯托出黑金配色的尊享感。
icon重塑,強(qiáng)化識(shí)別性
在特權(quán)icon設(shè)計(jì)中,強(qiáng)化識(shí)別性是本次優(yōu)化的重點(diǎn),因?yàn)閳D標(biāo)的目的是用來輔助用戶識(shí)別,幫助用戶做決策的。
我們?cè)趇con表現(xiàn)手法上,從「線性」改成「面性」,增強(qiáng)視覺比重;去除底部圓形襯底,采用異型圖標(biāo),強(qiáng)化icon之前的差異化,同時(shí)異型的icon在占比較小的區(qū)域里使用更加節(jié)省空間,提升拓展性。
比如,當(dāng)用戶是未付費(fèi)時(shí),特權(quán)icon僅作為輔助圖形,因?yàn)樵谶@種場景下,icon遠(yuǎn)沒有文案更能幫助用戶清晰理解,避免用戶買錯(cuò)。
因此異型、面性、無襯底的icon處理手法,也是在拓展方面較優(yōu)選擇。
以下是icon優(yōu)化后的整體效果。
驚喜彩蛋,提升情感化
尊享感,不僅體現(xiàn)在功能、視覺層面,還體現(xiàn)在情感化關(guān)懷,因此我們通過彩蛋式翻卡的觸發(fā)形式,采用對(duì)話的方式,展示互動(dòng)文案。
當(dāng)用戶首次進(jìn)行翻卡時(shí),它會(huì)貼心問候:「很高興你與你相遇,愿美好時(shí)光與你相伴?!梗划?dāng)用戶日?;?dòng)時(shí),它風(fēng)趣幽默:「據(jù)說超級(jí)會(huì)員,法力無邊!」「你喜歡的樣子超級(jí)會(huì)員都有~」;當(dāng)有用戶關(guān)注的重要消息時(shí),它會(huì)及時(shí)預(yù)告式通知:「4.11日即將有一大波優(yōu)惠福利襲來,超級(jí)會(huì)員最高5折哦」,從而營造一個(gè)風(fēng)趣又貼心的小管家,也讓我們的網(wǎng)盤會(huì)員服務(wù)變得更加貼心。
會(huì)員中心包括個(gè)人信息展示、身份卡片、商品和支付、尊享特權(quán)、尊享福利、成長體系、專屬內(nèi)容、積分兌換等模塊。
其中有多種模塊會(huì)在多場景中進(jìn)行復(fù)用,為了節(jié)省開發(fā)及設(shè)計(jì)成本,同時(shí)保證體驗(yàn)一致性,我們本次也沉淀出能夠靈活調(diào)整各個(gè)模塊的位置的組件,來提升產(chǎn)品及運(yùn)營效率。
比如:支付模塊;特權(quán)展示模塊。
支付模塊
支付模塊承載了會(huì)員類商品信息的展示,會(huì)在多個(gè)場景出現(xiàn),比如:浮層收銀臺(tái)、會(huì)員中心頁面、全端收銀臺(tái),以及會(huì)員類運(yùn)營活動(dòng)。為了保證支付體驗(yàn)的一致性,我們優(yōu)先對(duì)支付模塊進(jìn)行統(tǒng)一和規(guī)范,包括其中的商品展示、優(yōu)惠展示、以及支付按鈕的規(guī)范化。
為了便于用戶感知到會(huì)員與超級(jí)會(huì)員之間的差異,避免錯(cuò)誤購買帶來的困擾,我們通過品牌色(超級(jí)會(huì)員的金色,會(huì)員的紅色)進(jìn)行區(qū)分。
支付模塊的統(tǒng)一和差異,既能保持支付體驗(yàn)的一致性,也能避免用戶對(duì)會(huì)員權(quán)益產(chǎn)生誤解,為用戶帶來了更規(guī)范的支付體驗(yàn)。
特權(quán)展示模塊
對(duì)于特權(quán)展示模塊進(jìn)行特權(quán)展示的優(yōu)化,針對(duì)以往特權(quán)數(shù)量多占用空間大,以及特權(quán)展示信息過少用戶看不懂的問題,不再采用平鋪的方式,而是采用利用橫向空間的側(cè)滑方式展示,節(jié)省更多空間;不再采用原有的特權(quán)圖標(biāo)+特權(quán)名稱的方式,而是同時(shí)展示輔助特權(quán)信息,便于用戶更加了解特權(quán)內(nèi)容。
并將特權(quán)展示方式進(jìn)行組件化,當(dāng)有新特權(quán)上線時(shí),可直接通過后臺(tái)配置進(jìn)行上線,無需進(jìn)行開發(fā),提升效率。
同時(shí),我們還完成了運(yùn)營位、專享內(nèi)容、專屬推薦等多個(gè)模塊的組件化,也根據(jù)會(huì)員商業(yè)化的設(shè)計(jì)規(guī)范,形成會(huì)員中心的組件庫,提升合作效率及用戶統(tǒng)一的認(rèn)知體驗(yàn)。
以上就是本次會(huì)員中心改版項(xiàng)目的全過程,從前期用戶調(diào)研、目標(biāo)確定(1.提升用戶決策效率;2.提升用戶尊享感;3.提升迭代效率),到通過多維度地將目標(biāo)落地(1.懂你所想,會(huì)員中心框架重構(gòu);2.凸顯尊享感知,視覺語言升級(jí);3.提升迭代效率,通用組件沉淀),不僅優(yōu)化了體驗(yàn)、提高了效率,也對(duì)付費(fèi)轉(zhuǎn)化率有所提升。
本次會(huì)員中心改版,是網(wǎng)盤所有同學(xué)的共同努力,同時(shí)也是會(huì)員中心提供給用戶更多選擇、更率、更多服務(wù)的第一步,它不再是機(jī)械的信息展示和冰冷的支付平臺(tái),而是更懂用戶、提供給用戶更多元服務(wù)的聚集地。
目前還有很多不足和待完善的地方,我們也在盡最大努力為用戶提供更好更有價(jià)值的服務(wù),感謝大家一致以來的支持與陪伴 。
文章來源:優(yōu)設(shè) 作者:百度UE團(tuán)隊(duì)
我最近一直在想自己要寫什么,不如這次就來說說我最近在項(xiàng)目中遇到的問題吧~
再給大家看看我的解決方案,如果大家有更好的方案歡迎留言,我們一起探討啊~
最近一兩年我所涉及的項(xiàng)目都是有關(guān)于將網(wǎng)頁的功能系統(tǒng)改成APP,而針對(duì)的用戶就是公司的業(yè)務(wù)經(jīng)理,是金融公司的業(yè)務(wù)經(jīng)理們,我們的甲方爸爸!
當(dāng)然這就意味著網(wǎng)頁的產(chǎn)品,會(huì)有大量的數(shù)據(jù),而且由于網(wǎng)頁產(chǎn)品的信息處理還沒有太與時(shí)俱進(jìn),所以大量的數(shù)據(jù)都是文字和數(shù)字的組合,因此要將這些數(shù)據(jù)改成APP時(shí),就覺得好難啊。
其實(shí)表單在APP上并不好放,最好的解決方法就是設(shè)計(jì)成圖表,而現(xiàn)在市面上圖標(biāo)樣式不管是網(wǎng)頁的還是APP一搜一大把,Ant Design有專門的數(shù)據(jù)網(wǎng)站,如下圖所示:
什么樣的都能找到,那么我為什么會(huì)覺得好難呢?因?yàn)閿?shù)據(jù)超多der~考慮的內(nèi)容又有很多,難免憂愁。
一、為什么要設(shè)計(jì)圖表?
因?yàn)閿?shù)據(jù)表單在手機(jī)上并不好展示,同時(shí)從用戶體驗(yàn)的角度上來考慮,數(shù)據(jù)本身都是數(shù)據(jù)組成,可讀性就不太好,因此如果把這些“數(shù)字”從商業(yè)目的、用戶動(dòng)機(jī)進(jìn)行有機(jī)組合、關(guān)聯(lián)或定義就使得數(shù)據(jù)變得有意義(價(jià)值),圖表只是最終的表現(xiàn)形式。
二、圖表由哪些元素構(gòu)成?
一張標(biāo)準(zhǔn)樣式的圖表基本上是如下圖所標(biāo)示的幾種元素組成,如下圖所示:
當(dāng)然這只是最基礎(chǔ)的一種圖標(biāo)形式,對(duì)于別的形式就不多介紹了,大家都有基礎(chǔ)知識(shí),本文將嘗試從圖表設(shè)計(jì)動(dòng)機(jī)的角度和大家一起探討如何更好的進(jìn)行圖表設(shè)計(jì)。
三、圖表設(shè)計(jì)?
1、明確數(shù)據(jù)指標(biāo)
首先,我們得先搞明白這些數(shù)據(jù)是怎么來的、干嘛的,盡可能要求他們給到你的是盡可能精準(zhǔn)的數(shù)據(jù),否則會(huì)導(dǎo)致接下來的工作前功盡棄。就舉我前幾天的例子來說吧,產(chǎn)品給了我這樣一張圖,如下圖所示:
我沒有仔細(xì)的去問一些具體的信息,比如數(shù)據(jù)最多的時(shí)候會(huì)是什么樣、業(yè)務(wù)想在這個(gè)表里看到什么信息、想要解決的問題什么?這些我都沒有問!
上來就是一頓設(shè)計(jì)操作,把表單設(shè)計(jì)成了這樣,如下圖所示:
結(jié)果在走查的時(shí)候,業(yè)務(wù)很明確的指出數(shù)據(jù)信息不夠多,他們想要在頁面上將所有的數(shù)據(jù)信息都能看到,而數(shù)據(jù)最多的情況,數(shù)據(jù)表單是長這樣的,如下圖所示:
就是因?yàn)橐婚_始在拿到表單的時(shí)候沒有仔細(xì)去分析,才會(huì)導(dǎo)致這種情況的發(fā)生,因此要如何改進(jìn)呢?
2、明確設(shè)計(jì)目的
其實(shí)圖表設(shè)計(jì)跟產(chǎn)品設(shè)計(jì)的思路有點(diǎn)類似,一開始要先明確的就是設(shè)計(jì)目標(biāo),但這個(gè)很容易被設(shè)計(jì)師所忽略,因此前期在缺少設(shè)計(jì)目標(biāo)支撐的情況下,設(shè)計(jì)師就會(huì)像一個(gè)沒有指揮的小樂手,閉著眼睛亂彈,沒有方向感。
就像我之前設(shè)計(jì)方案被推翻,就是因?yàn)樗伎疾幻鞔_導(dǎo)致的,定義設(shè)計(jì)目標(biāo)的過程需要站在業(yè)務(wù)的角度和數(shù)據(jù)的角度進(jìn)行綜合分析從而進(jìn)行構(gòu)建,一方面需要考慮業(yè)務(wù)如何更簡單的分析、理解數(shù)據(jù)從而提高決策效率;一方面又需要考慮數(shù)據(jù)本身如何更加精準(zhǔn)、一目了然的傳達(dá)給用戶。
3、規(guī)劃設(shè)計(jì)方案
我在寫這篇文章的時(shí)候,看了很多相關(guān)的圖表文章,很多都是分析哪些不同類型的圖表,配色上要怎么處理,或者哪些圖標(biāo)是用在什么地方的,對(duì)我都沒有太大幫助,因?yàn)閳D表設(shè)計(jì)并不是普通的只是要好看的圖表而已。
4、解決問題
重新設(shè)計(jì)之前,我去找業(yè)務(wù)很詳細(xì)的了解了他們對(duì)于數(shù)據(jù)的需求,想要一目了然的看到所有的數(shù)據(jù)對(duì)比信息,數(shù)據(jù)在表單中要全部展示出來,數(shù)據(jù)后臺(tái)每天都會(huì)刷新,針對(duì)的場景是來自在去拜訪客戶路途中查看客戶目前的信息,我就將圖表改成了下圖所示:
由于面對(duì)的數(shù)據(jù)信息比較多,條紋圖比較符合多數(shù)據(jù)的信息,當(dāng)然這是數(shù)據(jù)最多的時(shí)候出現(xiàn)的情況,每家公司出現(xiàn)的數(shù)據(jù)是根據(jù)業(yè)務(wù)所提交的信息展現(xiàn)的。
在功能確定了之后,就是我們的細(xì)節(jié)問題,不是說我們?cè)?50*1624的畫布上設(shè)計(jì)好了圖表就行了,我們還要考慮到適配的問題,如下圖所示:
屏幕較窄的時(shí)候,將X軸的標(biāo)簽文字打斜,保證數(shù)據(jù)正常閱讀的同時(shí)也不影響美觀度。還有一種解決方案就是有連續(xù)的數(shù)字時(shí),可以有簡寫。
四、如何選深色底和淺色底
我們可以先來一個(gè)對(duì)比圖,同樣的數(shù)據(jù)在深色背景和淺色背景下的圖表可讀性做對(duì)比,如下圖所示:
很顯然淺色背景下的圖表閱讀效率更高,那么面對(duì)復(fù)雜數(shù)據(jù)的時(shí)候,情況是否一致呢?如下圖所示:
很顯然,深色更適合展示信息比較多的,突出重點(diǎn)信息的頁面,因此我們?cè)谡覕?shù)據(jù)頁面參考,在選擇深色和淺色背景里猶豫的,可以參考一下。
五、劃重點(diǎn)
這里討論的只是我在公司項(xiàng)目中的其中一個(gè)圖表設(shè)計(jì),不能說做的很多,只是分享一下自己在試錯(cuò)的過程中的成長,從web端改到APP,都會(huì)說減少一些功能,讓產(chǎn)品更好用,但是總有不想砍功能的需求方,如何滿足這些需求,是需要我們一直都在思考的事情。
轉(zhuǎn)自:ui中國-潘團(tuán)子
分享火爆Dribbble和Ins的設(shè)計(jì)趨勢
相信最近很多小伙伴在逛Dribbble時(shí)候,發(fā)現(xiàn)最近流行一波新的設(shè)計(jì)風(fēng)格,和以往不同的是,這次趨勢又回到之前擬物化了,但它與純擬物化還是有區(qū)別的,現(xiàn)在它有一個(gè)流行詞語叫“新擬態(tài)”,今天就和大家分享下國外一位設(shè)計(jì)師對(duì)這個(gè)趨勢的看法!
雖然UI以各種擬態(tài)化的形式存在(例如,您的桌面OS垃圾桶),現(xiàn)在這種風(fēng)格的趨勢更加明顯。正如卡米爾·法拉納(Kamil Falana)指出的那樣,從無生命的“表達(dá)”到現(xiàn)實(shí)主義的過渡開始出現(xiàn)。
不久前,我們還觀察到,這種變化開始在我們身邊發(fā)生,蘋果(IOS13系統(tǒng))就是一個(gè)很好的例子。向最小化設(shè)計(jì)和輕擬物化發(fā)展,最終帶來了無紋理3d視覺感官。受到了大家的喜歡,來看一張高清圖。
如下圖設(shè)計(jì)風(fēng)格,在dribbble上獲得認(rèn)可度比較高!
Dribbble用戶alexplyuto的作品獲得了四千多次贊,并帶動(dòng)了這一趨勢。
備注:可看出目前扁平化設(shè)計(jì)過于雷同,用戶審美疲勞。偶爾出現(xiàn)新設(shè)計(jì)趨勢風(fēng)格,反而更個(gè)給各位設(shè)計(jì)師們帶來新鮮感!
新風(fēng)格的特征點(diǎn)
-
由于按鈕的視覺表現(xiàn)看著變化不大(因?yàn)樾×艘恍?,不直觀),因此我們將重點(diǎn)放在實(shí)際的卡片概念上,以使這種視覺表現(xiàn)更能直觀感受出來
-
這種風(fēng)格的主要好處是“新鮮”(至少持續(xù)很長時(shí)間)。它為界面帶來了“新感覺”,并使其脫穎而出。它也可以與其他樣式混合使用,這樣就避免很呆板整個(gè)畫面變成這種柔軟凸起的效果。
到目前為止,有一些問題需要解決。我們發(fā)現(xiàn)了兩個(gè)主要問題:
1. 可見性
2. 易用性
- 可見性
圖形與背景對(duì)比度的主要問題是,當(dāng)它們都是相同的顏色時(shí),就沒有可測量的對(duì)比度;客觀上存在陰影,因此我們可以近似并嘗試測量其外部的第一個(gè)像素。在上面的示例中,我們得出了這些對(duì)比度值。
而且由于幾乎沒有人會(huì)嘗試使用如此強(qiáng)烈的陰影,這意味著其余UI元素必須可訪問。這種假設(shè)得出的結(jié)論是,如果我們通過版式,相近度和與重要元素的對(duì)比來進(jìn)行正確的層次劃分,那么這些卡片/凸起的塑料卡片并不那么重要。
尚未對(duì)此進(jìn)行測試(我將嘗試找到時(shí)間做這件事),但現(xiàn)在我們假設(shè)下面元素的兩個(gè)“版本”均為“確定”。即使有些人看不到陰影,也有足夠的對(duì)比度讓他們看到圖標(biāo)并“使用它”。
- 易用性
僅僅是卡片嗎?
但是,如果我們決定將組件用作按鈕而不是卡片,則會(huì)出現(xiàn)可訪問性的主要問題。
我們可以像下面的示例一樣輕松創(chuàng)建帶有內(nèi)部陰影的按下狀態(tài)。
對(duì)比度測試
此按下狀態(tài)的對(duì)比度太小,不足以表示差異。是否可以通過改變的其余部分來表達(dá)按鈕的狀態(tài),這里有一些想法,例如使用輪廓和填充圖標(biāo),下劃線或甚至用顏色填充按下狀態(tài)。
開發(fā)實(shí)現(xiàn)其實(shí)它比我們認(rèn)為的在CSS中實(shí)現(xiàn)“軟陰影”外觀要容易。我們尚未研究Swift和Kotlin,但我認(rèn)為這不應(yīng)該成為問題。
https://neumorphism.io/#55b9f3(實(shí)現(xiàn)新擬態(tài)效果CSS代碼)
您可以輕松地將可開發(fā)的設(shè)計(jì)與這些卡片形狀組合在一起(新擬態(tài)卡片),從而獲得很好的效果。
-
盡管這一新趨勢影響了許多設(shè)計(jì)師,但對(duì)比以前使用的卡片組件可訪問性問題相比,它的問題并不那么嚴(yán)重。
所以去瘋狂的順應(yīng)這一趨勢,并對(duì)其進(jìn)行調(diào)整以使其成為您的趨勢。UI設(shè)計(jì)師的工作就是需要不斷來回挑戰(zhàn)自我,探索潮流,以符合產(chǎn)品審美。如果沒有這種不斷的探索的精神,所有產(chǎn)品將再次看起來相同,同質(zhì)化嚴(yán)重。
-
本篇文章,作者通過對(duì)新擬態(tài)設(shè)計(jì)趨勢分析,在文中提及“新擬態(tài)”和以前材料卡片的區(qū)別,同時(shí)證實(shí)了新擬態(tài)風(fēng)格優(yōu)勢!但也存在一定的弊端!如何去權(quán)衡與設(shè)計(jì)的把控,需要設(shè)計(jì)師們多去研究探索!
如今新擬態(tài)才初出茅廬,還未被廣泛使用,需要有先驅(qū)者引領(lǐng)。畢竟國內(nèi)的環(huán)境大家都不敢冒險(xiǎn)去嘗試運(yùn)用到線上!
css 偽類是用于向某些選擇器添加特殊的效果,是動(dòng)態(tài)的,指當(dāng)前元素所處的狀態(tài)或者特性。只有一個(gè)元素達(dá)到一個(gè)特定狀態(tài)時(shí),它可能得到一個(gè)偽類的樣式;當(dāng)狀態(tài)改變時(shí),它又會(huì)失去這個(gè)樣式。
這篇文章在一定程度上鼓勵(lì)你在構(gòu)建UI時(shí)使用更簡單的CSS和更少的 JS。熟悉 CSS 所提供的一切是實(shí)現(xiàn)這一目標(biāo)的一種方法,另一種方法是實(shí)現(xiàn)最佳實(shí)踐并盡可能多地重用代碼。
接下介紹一些大家可能還不熟悉的一些偽類及其用例,希望對(duì)大家日后有所幫助。
::first-line | 選擇文本的第一行
::first-line 偽元素在某塊級(jí)元素的第一行應(yīng)用樣式。第一行的長度取決于很多因素,包括元素寬度,文檔寬度和文本的文字大小。
::first-line 偽元素只能在塊容器中,所以,::first-line偽元素只能在一個(gè)display值為block, inline-block, table-cell 或者 table-caption中有用。在其他的類型中,::first-line 是不起作用的。
用法如下:
p:first-line {
color: lightcoral;
}
::first-letter | 選擇這一行的第一字
CSS 偽元素 ::first-letter會(huì)選中某塊級(jí)元素第一行的第一個(gè)字母。用法如下:
<style>
p::first-letter{
color: red;
font-size: 2em;
}
</style>
<p>前端小智,不斷努,終身學(xué)習(xí)者!</p>
clipboard.png
::selection| 被用戶高亮的部分
::selection 偽元素應(yīng)用于文檔中被用戶高亮的部分(比如使用鼠標(biāo)或其他選擇設(shè)備選中的部分)。
div::selection {
color: #409EFF;
}
clipboard.png
:root | 根元素
:root 偽類匹配文檔樹的根元素。對(duì)于 HTML 來說,:root 表示 <html> 元素,除了優(yōu)先級(jí)更高之外,與 html 選擇器相同。
在聲明全局 CSS 變量時(shí) :root 會(huì)很有用:
:root {
--main-color: hotpink;
--pane-padding: 5px 42px;
}
:empty | 僅當(dāng)子項(xiàng)為空時(shí)才有作用
:empty 偽類代表沒有子元素的元素。子元素只可以是元素節(jié)點(diǎn)或文本(包括空格),注釋或處理指令都不會(huì)產(chǎn)生影響。
div:empty {
border: 2px solid orange;
margin-bottom: 10px;
}
<div></div>
<div></div>
<div>
</div>
clipboard.png
只有第一個(gè)和第二個(gè)div有作用,因?yàn)樗鼈兇_實(shí)是空的,第三個(gè) div 沒有作用,因?yàn)樗幸粋€(gè)換行。
:only-child | 只有一個(gè)子元素才有作用
:only-child 匹配沒有任何兄弟元素的元素.等效的選擇器還可以寫成 :first-child:last-child或者:nth-child(1):nth-last-child(1),當(dāng)然,前者的權(quán)重會(huì)低一點(diǎn)。
p:only-child{
background: #409EFF;
}
<div>
<p>第一個(gè)沒有任何兄弟元素的元素</p>
</div>
<div>
<p>第二個(gè)</p>
<p>第二個(gè)</p>
</div>
clipboard.png
:first-of-type | 選擇指定類型的第一個(gè)子元素
:first-of-type表示一組兄弟元素中其類型的第一個(gè)元素。
.innerDiv p:first-of-type {
color: orangered;
}
上面表示將 .innerDiv 內(nèi)的第一個(gè)元素為 p 的顏色設(shè)置為橘色。
<div class="innerDiv">
<div>Div1</div>
<p>These are the necessary steps</p>
<p>hiya</p>
<p>
Do <em>not</em> push the brake at the same time as the accelerator.
</p>
<div>Div2</div>
</div>
clipboard.png
:last-of-type | 選擇指定類型的最后一個(gè)子元素
:last-of-type CSS 偽類 表示了在(它父元素的)子元素列表中,最后一個(gè)給定類型的元素。當(dāng)代碼類似Parent tagName:last-of-type的作用區(qū)域包含父元素的所有子元素中的最后一個(gè)選定元素,也包括子元素的最后一個(gè)子元素并以此類推。
.innerDiv p:last-of-type {
color: orangered;
}
上面表示將 .innerDiv 內(nèi)的的最后一個(gè)元素為 p 的顏色設(shè)置為橘色。
clipboard.png
nth-of-type() | 選擇指定類型的子元素
:nth-of-type() 這個(gè) CSS 偽類是針對(duì)具有一組兄弟節(jié)點(diǎn)的標(biāo)簽, 用 n 來篩選出在一組兄弟節(jié)點(diǎn)的位置。
.innerDiv p:nth-of-type(1) {
color: orangered;
}
<div class="innerDiv">
<div>Div1</div>
<p>These are the necessary steps</p>
<p>hiya</p>
<p>
Do <em>not</em> push the brake at the same time as the accelerator.
</p>
<div>Div2</div>
</div>
clipboard.png
:nth-last-of-type() | 在列表末尾選擇類型的子元素
:nth-last-of-type(an+b) 這個(gè) CSS 偽類 匹配那些在它之后有 an+b-1 個(gè)相同類型兄弟節(jié)點(diǎn)的元素,其中 n 為正值或零值。它基本上和 :nth-of-type 一樣,只是它從結(jié)尾處反序計(jì)數(shù),而不是從開頭處。
.innerDiv p:nth-last-of-type(1) {
color: orangered;
}
這會(huì)選擇innerDiv元素中包含的類型為p元素的列表中的最后一個(gè)子元素。
<div class="innerDiv">
<p>These are the necessary steps</p>
<p>hiya</p>
<div>Div1</div>
<p>
Do the same.
</p>
<div>Div2</div>
</div>
clipboard.png
:link | 選擇一個(gè)未訪問的超鏈接
:link偽類選擇器是用來選中元素當(dāng)中的鏈接。它將會(huì)選中所有尚未訪問的鏈接,包括那些已經(jīng)給定了其他偽類選擇器的鏈接(例如:hover選擇器,:active選擇器,:visited選擇器)。
為了可以正確地渲染鏈接元素的樣式,:link偽類選擇器應(yīng)當(dāng)放在其他偽類選擇器的前面,并且遵循LVHA的先后順序,即::link — :visited — :hover — :active。:focus偽類選擇器常伴隨在:hover偽類選擇器左右,需要根據(jù)你想要實(shí)現(xiàn)的效果確定它們的順序。
a:link {
color: orangered;
}
<a href="/login">Login<a>
clipboard.png
:checked | 選擇一個(gè)選中的復(fù)選框
:checked CSS 偽類選擇器表示任何處于選中狀態(tài)的radio(<input type="radio">), checkbox (<input type="checkbox">) 或("select") 元素中的option HTML元素("option")。
input:checked {
box-shadow: 0 0 0 3px hotpink;
}
<input type="checkbox" />
clipboard.png
大家都說簡歷沒項(xiàng)目寫,我就幫大家找了一個(gè)項(xiàng)目,還附贈(zèng)【搭建教程】。
:valid | 選擇一個(gè)有效的元素
:valid CSS 偽類表示內(nèi)容驗(yàn)證正確的<input> 或其他 <form> 元素。這能簡單地將校驗(yàn)字段展示為一種能讓用戶辨別出其輸入數(shù)據(jù)的正確性的樣式。
input:valid {
box-shadow: 0 0 0 3px hotpink;
}
clipboard.png
:invalid | 選擇一個(gè)無效的元素
:invalid CSS 偽類 表示任意內(nèi)容未通過驗(yàn)證的 <input> 或其他 <form> 元素。
input[type="text"]:invalid {
border-color: red;
}
:lang() | 通過指定的lang值選擇一個(gè)元素
:lang() CSS 偽類基于元素語言來匹配頁面元素。
/* 選取任意的英文(en)段落 */
p:lang(en) {
quotes: '\201C' '\201D' '\2018' '\2019';
}
:not() | 用來匹配不符合一組選擇器的元素
CSS 偽類 :not() 用來匹配不符合一組選擇器的元素。由于它的作用是防止特定的元素被選中,它也被稱為反選偽類(negation pseudo-class)。
來看一個(gè)例子:
.innerDiv :not(p) {
color: lightcoral;
}
<div class="innerDiv">
<p>Paragraph 1</p>
<p>Paragraph 2</p>
<div>Div 1</div>
<p>Paragraph 3</p>
<div>Div 2</div>
</div>
clipboard.png
Div 1 和 Div 2會(huì)被選中,p 不會(huì)被選 中。
原文:https://blog.bitsrc.io/css-ps...
代碼部署后可能存在的BUG沒法實(shí)時(shí)知道,事后為了解決這些BUG,花了大量的時(shí)間進(jìn)行l(wèi)og 調(diào)試,這邊順便給大家推薦一個(gè)好用的BUG監(jiān)控工具 Fundebug。
今年已經(jīng)是 2020 了,各位作為時(shí)代的弄潮兒,上網(wǎng)沖浪是生活中的不可或缺,豐富的沖浪生活中必不可少的當(dāng)然是買買買,面對(duì)琳瑯滿目的商品圖與文案,用戶怎樣才能快速抓到重點(diǎn)?或者說,怎么樣才能讓信息出現(xiàn)在合適的位置?
首先我們要了解瀏覽信息這個(gè)動(dòng)作的本質(zhì)和特征,瀏覽的本質(zhì)就是大腦通過眼睛去提取信息,是一個(gè)傳達(dá)→解碼的過程,在這個(gè)過程中又存在一些特性,我們可以利用這些特性去進(jìn)行一些更的信息傳達(dá)。
受閱讀習(xí)慣影響,人們閱讀的起始端都是在左側(cè),結(jié)合依據(jù)尼爾森等老前輩發(fā)布的眼球軌跡研究報(bào)告可知,視覺瀏覽習(xí)慣呈「F」型且是不受控的潛意識(shí)習(xí)慣;同時(shí)可以延伸出例如「E」、「Z」等瀏覽模型,我們可以根據(jù)這些視覺模型的特性,結(jié)合產(chǎn)品的戰(zhàn)略層目標(biāo),將信息放置在合適的位置,已達(dá)到信息傳達(dá)率的最大化。
了解了基本的視覺瀏覽模型,那我們的地基就已經(jīng)搭建好了,接下來我們來看看地基搞定之后的結(jié)構(gòu)要怎么去布局。
首先我們需要清晰產(chǎn)品的屬性,電商平臺(tái)的本質(zhì)是物品的交易,因?yàn)榫€上的特殊性,產(chǎn)品中圖片與文案對(duì)于平臺(tái)的 GMV 就存在最直接的關(guān)系。這個(gè)時(shí)候,單元布局的輪廓就出來了,就是「商品圖+關(guān)鍵詞文案」。
同時(shí),不同平臺(tái)戰(zhàn)略方向、發(fā)展階段、團(tuán)隊(duì)規(guī)模等因素的不同,所針對(duì)的用戶群體、消費(fèi)階層、心智、審美等各個(gè)因素都會(huì)大不相同,有時(shí)候甚至在同一平臺(tái)中針對(duì)不同的活動(dòng)、不同的品類進(jìn)行細(xì)致的場景劃分,產(chǎn)生不同的單元結(jié)構(gòu)以滿足商業(yè)目的上的需要。
720° 全方位了解平臺(tái)的屬性特征后,我們就可以開始利用這么信息來搭建基本的單元結(jié)構(gòu)了。
例如平臺(tái)主攻下沉市場,用戶群體多為三四線,這個(gè)時(shí)候用戶吸引點(diǎn)在于商品的價(jià)格與賣點(diǎn)關(guān)鍵詞,這時(shí)候我們就可以拉大關(guān)鍵詞文案的占比,縮小圖片的占比,讓他們關(guān)注的內(nèi)容盡可能多的進(jìn)入他們的眼睛,吸引購買意向模糊的用戶點(diǎn)擊,增加購買意向明確的用戶匹配商品的速度,已達(dá)到 GMV 的提升。
簡單來說,過程中需要考慮到平臺(tái)因素所產(chǎn)出的圖片尺寸/比例/精致度/是否統(tǒng)一等,與文案搭配所呈現(xiàn)的是否適用當(dāng)前消費(fèi)場景及用戶心智,是否可以提升用戶的轉(zhuǎn)化率,是否可以提升平臺(tái)的下單率。
單元的架構(gòu)是多樣且復(fù)雜的,就像一塊七巧板。重點(diǎn)就在于對(duì)于產(chǎn)品屬性和用戶行為、場景、心理等特征的分析,需要權(quán)衡各個(gè)關(guān)鍵點(diǎn)的重要性,把用戶需要看到的信息、我們想讓用戶看到的信息、用戶希望看到的信息以合適的結(jié)構(gòu)狀態(tài)呈現(xiàn)給他。
我們將大體架構(gòu)搭建好之后,剩下的就是要把細(xì)節(jié)元素給點(diǎn)亮,讓他們起到一個(gè)點(diǎn)睛的效果。
細(xì)分一下,其中涉及到的細(xì)節(jié)元素大致為活動(dòng)標(biāo)簽、折扣標(biāo)簽、跳轉(zhuǎn)按鈕等常規(guī)的分子部件,在結(jié)構(gòu)中,圖片、商品名稱、價(jià)格是用戶關(guān)注的重點(diǎn),其他的部件則起到輔助刺激的作用。圖片和商品名稱的大體結(jié)構(gòu)我們?cè)谏弦徊揭汛罱耍O聛砦覀兛纯催@些小部件該如何合理歸置。
先從標(biāo)簽說起。整體框架出來了,用戶所需要了解的商品信息就已經(jīng)基本呈現(xiàn)了,這個(gè)時(shí)候用戶心智上更多的主觀意向,尋找合適的商品,而標(biāo)簽的出現(xiàn),更像是一劑興奮劑,強(qiáng)烈告訴用戶:「這個(gè)品熱度第一!」、「這個(gè)品是款!」等我們刺激用戶的聲音,增強(qiáng)用戶查看的欲望。
這個(gè)時(shí)候疑問來了,那放哪里合適呢?
活動(dòng)標(biāo)簽,多為顯示該商品的熱度、促銷主題、排名等一些大的狀態(tài)性的信息,為的是在用戶心理層面給這個(gè)商品帶來更多的好感度,放置的位置可以結(jié)合具體場景去分析,可以考慮與商品圖進(jìn)行結(jié)合放置。
遵循由上而下滑動(dòng)的交互原理,我們可知在每個(gè)單元的頂部會(huì)是滑動(dòng)瀏覽時(shí)第一被眼睛識(shí)別的信息,而且可以利用這個(gè)心理去給還沒看到具體商品的用戶進(jìn)行一個(gè)心理鋪墊,比如商品的品質(zhì)、權(quán)威性等,先入為主的進(jìn)行心理建設(shè),再結(jié)合視覺瀏覽模型,合適的位置就出來了。
次要信息比如倒計(jì)時(shí)、商品折扣、商品特點(diǎn)等輔助信息,結(jié)合布局場景考慮,有的可與圖片一起放置增強(qiáng)品質(zhì)感,有的可與文案一起放置增加決策信息,有的可與價(jià)格一起放置,刺激用戶進(jìn)行決策,是很有靈性的一個(gè)點(diǎn)睛之筆。
最后是按鈕,在這里的按鈕可以理解為瀏覽過程的一個(gè)閉環(huán)節(jié)點(diǎn),也是一個(gè)操作的終結(jié)點(diǎn),是最后的臨門一腳。位置當(dāng)然是在右側(cè)最為合適,降低操作難度,同時(shí)也是整個(gè)單元的一個(gè)視覺終結(jié)點(diǎn),瀏覽完流程之后決定是否點(diǎn)擊跳轉(zhuǎn)。當(dāng)然,你可以利用你的方式去引導(dǎo)或刺激用戶點(diǎn)擊,你可以的。
文章來源:優(yōu)設(shè) 作者:阿類雜碎面
藍(lán)藍(lán)設(shè)計(jì)的小編 http://m.yvirxh.cn