首頁

子類對象實例化全過程

seo達人

標準格式注意:

super()和this()調用語句不能同時在一個構造器中。

super()或this()調用語句只能作為構造器中的第一句出現。原因:

無論通過哪個構造器創(chuàng)建子類對象,需要保證先初始化父類。

目的是,當子類繼承父類后,“繼承”父類所有的屬性和方法,因此子類有必要知道父類如何為對象進行初始化。

從結果上看:繼承性

子類繼承父類以后,就獲取了父類中聲明的屬性或方法。

創(chuàng)建子類的對象,在堆空間中,就會加載所父類中聲明的屬性。

從過程上看:

當我們通過子類的構造器創(chuàng)建子類對象時,我們一定會直接或間接的調用其父類的構造器,進而調用父類的父類的構造器,…直到調用了java.lang.Object類中空參的構造器為止。正因為加載過所的父類的結構,所以才可以看到內存中父類中的結構,子類對象才可以考慮進行調用。

強調說明:

雖然創(chuàng)建子類對象時,調用了父類的構造器,但是自始至終就創(chuàng)建過一個對象,即為new的子類對象。


html內聯元素和塊級元素的基本概念及使用示例

前端達人

html標簽分為兩種,內聯元素和塊級元素,首先我們先了解一下內聯元素和塊級元素的概念:



塊級元素:一般是其它元素的容器,可容納內聯元素和其它塊級元素,塊級元素排斥其它元素與其位于同一行,可設置寬度(width)高度(height)屬性,正常流中的塊級元素會垂直擺放。常見塊狀元素為“div”



內聯元素(行內元素):內聯元素只能容納文本或者其他內聯元素,是塊級元素的后代,它允許其他內聯元素與其位于同一行,不能設置高度(height)和寬度(width)。常見內聯元素為“a”。



根據塊級元素的概念我們可以理解為塊級元素前后帶有換行符,也就相當于元素前后加了一個<br>標簽。我們可以把塊級元素想象成一個塊或一個矩形,所以塊級元素能設置高度寬度屬性



新建一個前端學習qun438905713,在群里大多數都是零基礎學習者,大家相互幫助,相互解答,并且還準備很多學習資料,歡迎零基礎的小伙伴來一起交流。

例:

css文件:

 



復制代碼



代碼如下:




div1{ 

width:200px; 

height:200px; 

background:#666 



div2{ 

width:200px; 

height:200px; 

background:#F00 

}





html文件: 

 



復制代碼



代碼如下:





<div id="div1"> 

div1 

塊級元素排斥其他元素與其位于同一行 

</div> 

<div id="div2"> 

div2 

塊級元素排斥其他元素與其位于同一行 

</div>





顯示效果: 



兩個div元素不位于同一行



 



根據內聯元素的概念,我們可以理解為內聯元素前后沒有換行符。我們可以把內聯元素想象成一條線,所以它不能設置height屬性和width屬性。



塊級元素(block element)標簽



address -地址

blockquote - 塊引用

center – 居中對齊

dir -目錄列表

div - 常用塊級容易,也是CSS layout的主要標簽

dl - 定義列表

fieldset - form控制組

form - 交互表單

h1 - 大標題

h2 - 副標題

h3 - 3級標題

h4 - 4級標題

h5 - 5級標題

h6 - 6級標題

hr - 水平分隔線

isindex - input prompt

menu - 菜單列表

noframes - frames可選內容,(對于不支持frame的瀏覽器顯示此區(qū)塊內容

noscript - 可選腳本內容(對于不支持script的瀏覽器顯示此內容)

ol - 排序表單

p - 段落

pre - 格式化文本

table - 表格

ul - 非排序列表



內聯元素(inline element)



a - 錨點

abbr - 縮寫

acronym - 首字

b - 粗體(不推薦)

bdo - bidi override

big - 大字體

br - 換行

cite - 引用

code - 計算機代碼(在引用源碼的時候需要)

dfn - 定義字段

em - 強調

font - 字體設定(不推薦)

i - 斜體

img - 圖片

input - 輸入框

kbd - 定義鍵盤文本

label - 表格標簽

q - 短引用

s - 中劃線

samp - 定義范例計算機代碼

select - 項目選擇

small - 小字體文本

span - 常用內聯容器,定義文本內區(qū)塊

strike - 中劃線

strong - 粗體強調

sub - 下標

sup - 上標

textarea - 多行文本輸入框

tt - 定義打字機文本

————————————————

版權聲明:本文為CSDN博主「前端學習線路」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/webxuexi168/article/details/104382660

CSS簡單實現圣杯布局和雙飛翼布局

seo達人

一、你能學到什么?

①如何使用css變量 ②實現圣杯布局和雙飛翼的簡單思路 ③了解浮動和margin的特性



css變量設置(兩個布局都有的部分)

:root{

    / 左邊欄寬度 /

    --lw:300px;

    /負左邊欄寬度/

    --lwf:-300px;

    / 右邊欄寬度 /

    --rw:400px;

    /負左邊欄寬度/

    --rwf:-400px;

    / 高度 /

    --height:300px;

}



二、圣杯布局的html和css代碼

html部分

  <div class="holyGrail">

    <div class="hg_main">main</div>

    <div class="hg_left">left</div>

    <div class="hg_right">right</div>

  </div>



css 實現對應的四個class

.holyGrail {

    height: var(--height);

    / 留出左右兩欄的布局 為了字體不被覆蓋/

    padding-left: var(--lw);

    padding-right: var(--rw);

}

.hg_main{

    width:100%;

    float: left;

    height: var(--height);

    background-color: blanchedalmond;

}

.hg_left{

    position: relative;

    left: var(--lwf);

    float: left;

    margin-left: -100%;

    width:var(--lw);

    height: var(--height);

    background-color: blueviolet;

}

.hg_right{

    float: left;

    margin-right: var(--rwf);

    width:var(--rw);

    height: var(--height);

    background-color: brown;

}





三、雙飛翼布局的html和css代碼

html部分

<div class="doubleWing">

    <div class="dw_main">

      <div class="dw_con">main</div>

    </div>

    <div class="dw_left">left</div>

    <div class="dw_right">right</div>

  </div>



css 實現對應的五個class

.doubleWing{

    padding-right: var(--rw);

}

.dw_left{

    float: left;

    margin-left: -100%;

    width:var(--lw);

    height: var(--height);

    background-color: blueviolet;

}

.dw_main{

    width:100%;

    float: left;

    height: var(--height);

    background-color: blanchedalmond;

}

.dw_con {

margin-left: var(--lw);

}

.dw_right{

    float: left;

    margin-right: var(--rwf);

    width:var(--rw);

    background-color: brown;

    height: var(--height); 

}



四、學會兩個布局的注意點

圣杯布局

在最外邊的類(holyGrail)左右要留出左欄和右欄的寬度(使用padding-left,padding-right)

中間的div.hg_main放在最上面,優(yōu)先渲染,中間div自適應,width為100%

左中右欄的div都設置浮動,左欄通過margin-left:-100%移動到和中間的div同一起點,然后通過position: relative;

left: -(左欄的寬度);會移動到最外層div的左內邊距的區(qū)域(中間div的左邊)

右欄可以通過margin-right:-(右欄的寬度);移動到最外層div的右內邊距的區(qū)域(中間div的右邊)

雙飛翼布局

在中欄的div再加一個div,設置margin-left:左欄的寬度,這樣可以省略左欄的div使用postion和left的屬性移動

最外層的div可以不用預留左欄的位置了

五、兩個布局的對比的優(yōu)缺點

布局 優(yōu)點 缺點

圣杯 無多余dom 當中間的寬度小于左右的寬度時,結構混亂

雙飛翼 可以支持各種寬度,通用性強較強 需要多加一層dom

代碼下載地址

記得一定要自己去實現一下


html+css基礎教程入門篇之css選擇器詳細解讀

前端達人

CSS 選擇器分組



CSS選擇器分組,可以把定義相同屬性的不同標簽做為一組處理,縮短了CSS樣式編寫的時間和CSS樣式表的大小。



例如希望h2和p標簽的字體顏色都設置為黑色,則可以寫成:



h2,p{color:black;}

通過分組,可以將相同屬性的樣式“壓縮”在一起,這樣就可以得到更簡潔的樣式表。例如:



/ no grouping /

h1 {color:blue;}

h2 {color:blue;}

h3 {color:blue;}

h4 {color:blue;}

h5 {color:blue;}

h6 {color:blue;}



/ grouping /

h1, h2, h3, h4, h5, h6 {color:blue;}



當有多個標簽有相同屬性時,可以抽出相同屬性進行分組,不同的屬性另外書寫樣式。



除了使用標簽來進行相同標簽CSS選擇外,還可以使用類選擇器來選擇。



類選擇器前面使用符號.



(1)基本使用



為了將類選擇器的樣式與元素關聯,必須將 class 指定為一個適當的值。例如:



<h1 class="important">This heading is very important.</h1>

<p class="important">This paragraph is very important.</p>

在樣式表中定義:



.important {color:red;}

這樣定義后,class為important的h1和p標簽的字體顏色也就都是紅色。



(2)結合元素選擇器



類選擇器可以結合元素選擇器來使用。



例如,您可能希望只有段落顯示為紅色文本:



p.important {color:red;}

這個樣式表示的是,所有class為important ,且為p標簽的元素中的字體為紅色。其他標簽的無效。



(3)CSS 多類選擇器



一個標簽可以定義多class,則這個標簽有這多個class的所有屬性,例如:



<p class="important warning">This paragraph is a very 

important warning.</p>





.important {font-weight:bold;}

.warning {color:red;}



例子中為p標簽定義了important和warning兩個class,所以p標簽的字體是加粗且字體顏色是紅色的。

————————————————

版權聲明:本文為CSDN博主「前端學習線路」的原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接及本聲明。

原文鏈接:https://blog.csdn.net/webxuexi168/article/details/104349157

關于javascript跳轉與返回和刷新頁面

seo達人

javascript中window.open()與window.location.href的區(qū)別

window.open(‘index.html’) 表示新增一個窗口打開 index.html 這個頁面,并不刷新

location.href(‘index.html’) 表示在當前窗口重定向到新頁面,打開并刷新 index.html 這個頁面



window.location 是 window 對象的屬性,用來替換當前頁,也就是重新定位當前頁

而window.open 是 window 對象的方法,是用來打開一個新窗口的函數



// 打開新頁面

// 注意:有些瀏覽器的安全設置會將window.open()屏蔽,例如避免彈出廣告窗

window.open('./index.html');



// 在原窗口打開新頁面

window.location.href="./index.html";



window.open()詳解



window.open ('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no,location=n o, status=no')





參數解釋: 三個參數

window.open 彈出新窗口的命令;

‘page.html’ 彈出窗口的文件名;

‘newPage’ 彈出窗口的名字(不是文件名),非必須,可用空’'代替;

height=100 窗口高度;

width=400 窗口寬度;

top=0 窗口距離屏幕上方的象素值;

left=0 窗口距離屏幕左側的象素值;

toolbar=no 是否顯示工具欄,yes為顯示;

menubar=no 是否顯示菜單欄,yes為顯示;

scrollbars=no 是否顯示滾動欄,yes為顯示;

resizable=no 是否允許改變窗口大小,yes為允許;

location=no 是否顯示地址欄,yes為允許;

status=no 是否顯示狀態(tài)欄內的信息(通常是文件已經打開),yes為允許;



常用的js返回與刷新頁面

在此用a標簽舉例





<a href="javascript: history.back(-1)">返回上一頁</a> 

<a href="javascript:history.go(-1)">返回上一頁</a> 

<a href="javascript:history.go(-2)">返回前兩頁</a> 

<a href="javascript:location.reload()">刷新當前頁面</a> 

<a href="javascript:" onclick="self.location=document.referrer;">返回上一頁并刷新</a> 





js





// 刷新當前頁面

window.location.Reload();

self.location.reload();

window.location.href = window.location.href;


耍好控件 | 了解圖標落地,讓前端再愛你一次

ui設計分享達人

文中涉及到的所有工具與插件,考慮到部分小伙伴可能下載外網資源太慢,我已將相關插件全部打包整理完畢,可在公眾號中領取!

如期而至,這是標簽欄控件總結的第二期。

 

 

這一期我們來聊一聊標簽欄中的關鍵元素——圖標。在此之前,如果你還沒有了解標簽欄的平臺規(guī)范,可以回顧:《沒弄懂標簽欄之前,先不談用戶體驗》

 

圖標其實存在于界面中的許多地方,但因為這一期主要分析標簽欄,所以我會借標簽欄中較主流的圖標樣式,總結一套圖標制作與落地方法。這些方法在圖標制作過程中都是相通的,大家可以舉一反三。

 

 

一、標簽欄圖標規(guī)范

 

1.1 圖標樣式

 

圖標具體樣式風格的定義是非常主觀的,網絡上也流傳著許多的教程教大家如何設計五花八門的圖標,所以在這里我就不再贅述了。我主要來總結一下基礎的標簽欄圖標一般有哪些樣式變化。

 

我調研了諸多的應用程序,發(fā)現主流的APP標簽欄樣式變化,大致分為以下五種。其中最占比最多的是“由線型轉面型”

 


 

調研的應用程序中,所有使用到線性圖標的應用程序,都將描邊粗細限制在1pt-2pt之間。

 

 

1.2 圖標視覺大小

 

上一期我們講到,iOS定義了一套標簽欄圖標的尺寸規(guī)范。

 

 


iOS在這里所定義的尺寸并不是圖標文件最后輸出的尺寸,而是給設計師作圖時,針對不同圖標形狀的參考尺寸,目的是為了讓圖標的視覺大小看上去一致。

 

那么為什么iOS會根據不同的圖標形狀給出不同的圖標尺寸呢?因為50px*50px的正方形比50px*50px的圓形面積更大,所以正方形的視覺大小也會大于圓形。為了統(tǒng)一圖標的視覺大小,正方形要做適當的面積收縮處理。(矩形同理)

 

 

于是我們看到許多平臺都推出了圖標輔助網格規(guī)范。其實如果遵從“面積相等”原理,理論上所有的圖標網格都應該由下面這一套推理公式得出(以Material Design 標準圖標網格為例):

 

 

但實際情況是,不同平臺的圖標輔助網格規(guī)范建議尺寸都有一定的差異。原因就在于,雖然有時候我們參考“面積相等”原則對圖標視覺尺寸進行了規(guī)范,但項目落地后發(fā)現視覺上可能還是有一些不協(xié)調,所以最終設計師還是會憑借自己的主觀判斷再進行微調。

 
記?。汉玫脑O計作品是理性的設計理論與設計師本身感性的碰撞結果,二者缺一不可。

 

1.3 圖標輸出尺寸

 

iOS規(guī)定標簽欄圖標的輸出尺寸統(tǒng)一為31pt*28pt;Material Design規(guī)定標簽欄圖標的輸出尺寸統(tǒng)一為24dp*24dp。

 

但我們發(fā)現,在借助了圖標網格解決了圖標視覺大小的問題之后,每一個不同形狀的圖標,尺寸其實是不同的。為了方便前端落地,我們在輸出切圖文件時,要保持每一個圖標文件的輸出尺寸是相同的。該怎么辦呢?

 

于是我們將一組圖標都放置在一個比圖標本身略大的相同尺寸容器中。而圖標與這個容器之間的空白像素,正好也幫助我們規(guī)避了圖標落地后,切圖邊緣像素可能被截斷的現象發(fā)生,所以我們稱這個區(qū)域為“安全邊距”。

 

 

對于安全邊距的規(guī)定:Material Design全平臺規(guī)定圖標的安全間距統(tǒng)一2dp;iOS則根據不同的圖標使用場景給出的不同的圖標網格和圖標安全間距。


二、靜態(tài)圖標


標簽欄的圖標一般分為靜態(tài)圖標和動態(tài)圖標兩種。


靜態(tài)圖標的實現方法相對容易,可以與前端溝通確定本次項目交付的標簽欄圖標文件是采用位圖還是矢量圖。如果是位圖建議交付.png格式文件;如果是矢量圖建議交付.svg格式文件。


2.1 位圖圖標

 

使用位圖時請注意以下兩點:

 

1)不同項目環(huán)境輸出的切圖套數不同

 

· 交付iOS原生的標簽欄圖標切圖需要 @1x/@2x/@3x 三種倍率的切圖文件;


· 交付Android原生的標簽欄圖標切圖需要 @1.5x/@2x/@3x/@4x 四種倍率的切圖文件(@0.75x和@1x切圖層分別用于ldpi和mdpi分辨率設備,但這些設備現在幾乎已退出市場,所以可不考慮,但最終視項目真實需求確定。);


· 交付web項目的切圖需要試情況而定,一般常用 @2x 切圖,因為@2x向下適配@1x、向上適配@3x,都不會產生太大的圖片失真。但有時候前端小哥會要求用到其他倍率切圖,所以最終以具體需求而定。

 

請注意:這里我所提到的倍率全都是“絕對倍率”,這個概念非常關鍵。

 

“絕對倍率”指的是:以上所有的倍率都是針對 @1x 設計稿下的輸出倍率尺寸。而當你使用@2x作圖時,為了保證“絕對倍率”不變,你的切圖輸出倍率就應該設置為 @0.5x/@1x/@1.5x 。

 

如果你在@2x下作圖,卻依然保持輸出 @1x/@2x/@3x 的切圖,那你輸出的文件尺寸最終其實是 @2x/@4x/@6x。

 

有一點繞的話,我們以Sketch導出位圖切圖為例:

 

 

所以如果你日常使用的是Sketch,也是用Sketch原生導出工具,那你的切圖預設應該根據你的作圖尺寸而定,見下表:

 

 

如果你日常使用的是PS,用Cutterman切圖,那么Cutterman會自動識別你當前的畫板,然后根據它的寬(橫屏情況下是高)來設定它的基準分辨率。那么你在任何情況下輸出 @1x/@2x/@3x 的切圖,其實都是“絕對倍率”,不用像Sketch當中一樣換算。前提是“設置當前畫布為:Auto(自動識別)”。

 

 

假設你在@2x下作圖,執(zhí)意不管不顧“絕對倍率”,又忘了交代前端人員手動處理切圖尺寸的話,那你所有的切圖尺寸實際都是設計稿所需圖標尺寸的2倍。就算前端小哥幫你手動處理了切圖尺寸,每一張切圖所包含的像素信息,都比項目真實所需的要多很多,完全就是在徒增所需切圖文件的大小。

 

2)注意切圖文件大小

 

切記,公司的線上項目中,用戶從服務器下載的每一單位的流量都是要公司花錢的,所以許多項目管理者都是很在意控制線上文件大小的。于是壓縮切圖是UI必備的技能之一。

 

雖然圖標的文件大小一般只有幾KB,但是項目大了難免積少成多,所以在真實項目中,不管任何切圖我都會手動壓縮一次。

 

這里推薦一個壓縮.png文件大小,但幾乎不會產生失真的免費網站 tinypng。

 

 

2.2 矢量圖

 

位圖切圖會面臨交付的倍率圖過多、容易失真、文件大小難控制等問題,但對于矢量圖,這些問題都得到了解決。目前.svg矢量圖落地也在項目中越來越流行了。UI可以在Sketch或Ai中制作。

 

一般與前端人員對接有在線圖標庫對接與本地文件對接兩種。

 

在線矢量圖標庫有很多,國內比較流行的是阿里巴巴矢量圖標庫-iconfont;本地對接就是直接將文件發(fā)送給前端人員,他們會自行進行項目文件的管理與調用。

 

如果.svg切圖輸出后,與設計稿中樣式不符,請注意排查以下三點:

 

1、svg不支持漸變顏色填充;

2、svg不支持描邊,請將所有的描邊輪廓化。Sketch中可通過“圖層-輪廓化”(快捷鍵??O);Ai中可通過“對象-路徑-輪廓化描邊”;

3、要確保一組圖標的文件尺寸一致,需在圖標下方增加一個透明方形,和圖標一同導出。


 

  

三、動態(tài)圖標

 

為了提升用戶體驗和產品趣味性,動效微交互的標簽欄圖標也越來越流行了。

 

 

動效在前端落地的方法其實有很多:

 

· 前端代碼直接實現:代碼是很強大的,但通常用代碼直接寫復雜動效會很浪費項目時間。簡單維度的動效如位移、透明度、大小變化等可以借助代碼,但復雜動效就不要去打擾前端小哥了;

· 直接剛gif:這已經是老舊技術時代的動畫解決方案了,文件大且請求文件也需要時間,有時候無法給用戶及時的觸控反饋。再者它是位圖的原因,在高分辨率屏幕上縮放容易失真。

· png序列幀:我們知道,動畫是一張一張的靜態(tài)圖交替變化形成的。如果將每一幀動畫都拆分成一張圖片,就有了png序列幀。所以一套動畫的png序列幀往往非常多,文件大小自然就變大了。所以后來也有團隊引進了雪碧圖的方式,但文件大小依然不樂觀。并且同樣是位圖的原因,高分辨率屏幕容易失真。

· Facebook Pop/Rebound/Keyframes:Facebook Pop/Rebound是Facebook給iOS和Android提供的常用動畫預設,是較早將動效代碼化的開源技術方案,但動畫效果預設只有彈簧/衰減等一些簡單樣式。后來Facebook又推出了Keyframes,允許設計師自己在Ae中自定義動畫并導出,然后交付給前端人員。

· Lottie動畫:和Facebook Keyframes相同,都是結合Ae輸出動畫代碼。但是Lottie更厲害的地方在于,它比起Facebook Keyframes來支持的Ae樣式更多,例如蒙版、遮罩、修剪路徑等等。

 

所以綜上所述,落地標簽欄動態(tài)圖標,目前最可行的還是Lottie動畫。

 

3.1 Lottie的背景

 

Lottie是Airbnb開源的一個跨平臺動畫庫。表現層面它是一張圖片,但實現的方式是通過代碼,所以它是矢量的。很花式的動畫也可以把文件大小做到非常小。

 

UI與前端對接是通過交付一個json代碼文件。

 

如果這是你第一次接觸Lottie,再好不過的體驗方法就是玩一玩阿里提供的一站式動畫平臺:犸良動畫 。它最底層采用的技術就是Lottie,只是被阿里二次封裝了許多預設的動畫效果,你可以自定義其中的元素與參數,然后試著導出你的第一個json文件~

 

3.2 Lottie如何上手

 

接下來是簡單粗暴的UI與前端對接實現Lottie動畫落地的全步驟參考。在此之前,想要全方位了解Lottie的相關信息,請參閱Lottie官方說明文檔。

 

· 步驟一:安裝Ae和bodymovin

 

制作Lottie動畫,首先你必需兩個工具:Ae和bodymovin插件。

 

Ae版本要求為Ae CC2014。又因為據很多設計師反饋,目前bodymovin在漢化后的Ae中使用會出現諸多問題,所以后面的教程都是基于Ae英文版。如果你漢化了Ae,最好在需要制作Lottie動畫時取消漢化。

 

然后獲取bodymovin。bodymovin插件更新至今,版本已非常多,并不一定版就適用于你當前的項目,因為前端使用的bodymovin解析包可能無法解析你用版bodymovin插件輸出的json文件。

 

 

一旦確定使用Lottie,前端人員會在GitHub查詢Lottie相關文檔的,所以UI只需要配合前端確定一下合適的bodymovin插件版本就可以了。最終走查時,一定要確保當前bodymovin輸出的動畫在項目所需要運行的所有環(huán)境中可運行,才說明UI使用的bodymovin插件和前端使用的bodymovin解析包版本是兼容的。

 

獲取了bodymovin后,將bodymovin拖入到ZXP Installer中,ZXP Installer會自動識別插件安裝到Ae。

 

 

安裝完成后,就可以在AE的“窗口-擴展”中看到bodymovin啦~

 

 

· 步驟二:將Sketch或Ai中的文件導入Ae

 

如果你技術嫻熟,當然也可以直接在Ae中繪制圖案動畫。但如果你還是習慣先在其他軟件中繪制好基礎圖案,再到Ae中制作動畫,那你需要了解如何將圖案導入Ae。

 

Ai和Ae都是Adobe旗下的工具,所以Ae是可以完美解析.ai文件的,如果你是使用Ai作圖,可直接存儲為.ai文件,再在Ae中打開。

 

 

如果你使用的是Sketch,可以先導出為.svg,再用Ai打開該.svg文件,轉換存儲格式為.ai,最后到Ae中打開。

 

當然,Sketch還有直接和Ae對接的插件,AEUX(前身Sketch2AE)。需要在Sketch和Ae中同時安裝AEUX插件,Sketch負責傳送,Ae負責接收。具體的使用方法可以在官網教程中查看,我就不再贅述了。

 

 

·步驟三:制作動效并輸出

 

和靜態(tài)圖標同理,為了保證落地時圖標視覺大小一致,一組動效圖標輸出的文件尺寸應該是相同的。所以在你制作動畫之前需要確定合成文件的尺寸。Lottie官方建議:因為Lottie輸出的是矢量動畫,所以建議以@1x輸出動效,前端人員在任何屏幕上放大并不會失真。

 

 

在制作之前請務必詳細閱讀Lottie所支持的Ae參數文檔,以免辛苦做出的動效,前端無法解析。特別提醒:原生環(huán)境中bodymovin是不支持解析Ae表達式的。

 

完成制作動效后,就可以通過bodymovin導出動效了。

 

  

·步驟四:預覽與交付

 

導出完成后在你的目的地文件夾中將存在一個.json文檔,如果你的動效中還使用了位圖,系統(tǒng)還會自動生成一個images文件夾。這些都是你需要交付給與你對接的前端開發(fā)人員的文件。

 

 

.json文件中記錄的動效代碼UI不需要過多關心,但是其中兩個信息你是一定要了解的。它們是你與前端對接溝通和獲悉文件信息的一些關鍵參數。

 

 

UI自檢動效或其他相關人員需要預覽動效的時候,可以用LottieFiles,拖入.json文件即可預覽。iOS和Android還可以下載LottieFiles APP,掃描預覽頁中的二維碼即可在移動端預覽。

 

四、總結

 

整個制作圖標的流程我已經全部整理出來了。首先要注意圖標的規(guī)范,然后制作位圖、矢量、動效圖標時的注意點,我?guī)缀醢盐以谡鎸嶍椖恐胁冗^的坑都告訴大家了。剩下的創(chuàng)造性的環(huán)節(jié)就交給你了!

 轉自:站酷-UCD耍家 

交互設計:如何做到驚喜?

ui設計分享達人

保持好奇,巧妙融合,追求卓越,自然而然


上一篇,探討了如何做到品質。這一篇,探討下如何做到驚喜。

一家之言,未必全面,甚至未必正確。歡迎交流探討。


01
交互設計的驚喜,是什么?

之前的文章,有簡單定義過交互設計的“驚喜”,即為:超出用戶預期,并讓用戶開心。

具體而言有兩類,分別是:小驚喜、大驚喜。

1 小驚喜

所謂小驚喜,是指一些頗具趣味性或人文屬性的交互設計小細節(jié)。


先說趣味性。常見的有兩類,第一類是比較好玩的動效,第二類是一些小功能。第二類有時也會包含第一類。

動效這塊,大家比較熟悉的,有 iPhone 上刪除應用前圖標的抖動,仿佛是嚇的發(fā)抖,也可能是在搖頭求饒;還有移動端登錄 B 站、輸入密碼時,動畫人物的捂眼捂臉動作。

(B 站登錄頁面)

小功能這塊,也可以分成兩類。一類是隱藏的小功能,一類是有趣的小功能。


很多隱藏功能,頭幾次用的時候,多少會有一些驚喜之感。

比如在訂閱號消息列表頁,某個公眾號你已經幾個月沒看過,對它失去了興趣和信任。這時,嘗試長按這個公眾號的頭像或名稱,會呼出一個包含“刪除消息”和“取關”功能的彈窗。

(訂閱號消息列表)

還有些隱藏功能,既能讓用戶覺得驚喜和方便,又能引發(fā)用戶思考。這種思考,可能會讓用戶感嘆設計之妙,也可能也會給用戶一種猜對謎語的欣喜之感。

比如用墨刀的時候,嘗試按數字鍵 1,會呼出“內置組件”這個使用頻率非常高的功能,會讓人覺得墨刀很聰明。

如果再仔細看一下,會發(fā)現,“內置組件”的縮略圖標,和其他 4 個諸如“我的組件”、“圖標”等功能的縮略圖標,并成一列。這 5 個縮略圖標的排列順序(上到下),和它們快捷鍵("、"鍵和數字鍵1、2、3、4)的排列順序(左到右),是完全一致的。不得不說,這是一個簡單又巧妙的設計。


再比如朋友圈里,某個不熟的好友每天都發(fā)集贊的小廣告,搞的我們不勝其煩。長按其頭像,會呼出設置權限(屏蔽等)的功能。

有意思的是,長按好友名字,則不會呼出這個功能。要知道點擊頭像或名字是都能進入好友主頁的;另外剛才那個例子,長按公眾號頭像或名字,也都能呼出取關的彈窗。

個人的理解,生活中,我們用力長按一個人,通常是表達強烈不滿,比如打架時。比起長按名字,長按頭像更像是長按真人,所以也更能表達我們的不滿。


說完隱藏的小功能,再說下有趣的小功能。比如微信聊天里的扔骰子、石頭剪刀布,微信給朋友發(fā)生日快樂后漫天飄落的蛋糕,拍照軟件里的貼紙,等等。

最后說下帶有人文屬性的交互設計小細節(jié)。常見的有如下類型:幫助弱勢、關照情緒、表達情感、保護隱私。


幫助弱勢這塊,比如 iPhone 的輔助功能,里面有針對視力障礙的放大鏡功能、有針對不識字群體的旁白功能。

關照情緒這塊,很重要的一點,就是避免引起用戶的負面情緒。比如微信的刪好友是單方面刪除,被刪時我們很難察覺到,而且微信也不會通知我們。個人覺得,微信之所以不通知我們,其中一點,就是不給我們添堵。類似的還有,微信消息沒有“已讀”功能,這就大大減輕了接收者的回復壓力。

表達情感這塊,比較為人所知的例子,5 月 20 號這天,微信紅包的限額,從 200 元升到了 520 元。還有一個例子,在微信聊天里發(fā)一個“ohh”,長按并點翻譯,結果也是一個驚喜。

保護隱私這塊,比如借助 iPhone 的“引導式訪問”功能,可以讓小朋友只能訪問你的某個視頻應用來看動畫片。再比如別人用你電腦的時候,如果你不想讓對方看到你的微信,就可以通過手機微信來鎖定或退出電腦版微信。

2 大驚喜

所謂大驚喜,是指那些系統(tǒng)性大創(chuàng)新,并且能夠引領潮流、代表未來的交互設計。通常而言,這些大驚喜,最開始給用戶的感覺,就是酷。

iPhone 就是典型例子之一 。

2007 年的初代 iPhone,帶來了當時的大屏幕:3.5 寸屏幕,以及純觸摸屏,和極為靈敏的觸控體驗。

2011 年,Siri 同 iPhone 4S 一起問世,為我們帶來了語音交互。如今,在 100 元就能買到品牌類智能音響的情況下,依靠語音交互的智能音響也在慢慢走入尋常百姓家。

也許后喬布斯時代的 iPhone 創(chuàng)新不如以前,但不可否認的是,時至今日,iPhone 依然在引領潮流,在給我們大驚喜。比如這幾年流行的手機無線充電和以 AirPods 為代表的極簡的無線耳機。

以上是比較廣為人知的交互設計,還有一些不太為人所知的設計。比如在家里網購一條床單,但是不知道床的尺寸,家里又沒有尺子。這時,打開 iPhone 里的測距儀這款 App,就可以量出床的尺寸,會不會覺得有點酷。

(測距儀 App)

微信在引領潮流方面也有一些建樹,比如極大的普及了二維碼和掃一掃。小程序作為一種體驗接近原生 App、同時又不用下載的產品,也正在引領新一輪的潮流。

還有一個比較酷的功能,就是以圖搜圖。筆者最早用過百度和谷歌的相關功能,主要是在電腦上搜索相似的圖片,使用頻率極低。

假設一個場景,比如在路上看到一個陌生人的外套很好看,但又不好意思上前問,就可以拿起手機,利用淘寶的拍立淘功能,拍張照就能馬上看到相同或相似的商品。

如果淘寶上沒有搜到類似商品,還可以用微信的掃一掃識物。和拍立淘相比,區(qū)別之處有兩點。第一,不用拍,直接能識別,不過通常得等 1-3 秒;第二,識物結果里面,除了商品,可能還會有百科詞條和資訊。


02
交互設計:如何做到驚喜?

個人覺得,有 4 個要點:既要有好奇心,又要有卓越心;既要天馬行空,又要保持自然。

聽起來可能有點亂,且聽筆者一一道來。


1 保持好奇心

筆者觀察身邊讀小學的小孩,發(fā)現,當大人聊天時,特別是談正事時,小孩特別喜歡坐在旁邊聽,而且聽的很認真。小孩有時也會說兩句,或是問問題,或是發(fā)表自己的看法。

看得出來,小孩對成年人的世界,懷有極大的好奇心。實際上,不止于成年人的世界,小孩對周遭世界都有比較強烈的好奇心。

整體而言,成年人對周遭世界的好奇心,遠不如小孩。我們互聯網從業(yè)者也不例外。

好奇心和交互設計,有什么關系?

交互設計,某種程度上,也是一種創(chuàng)作。好的創(chuàng)作,一定來自生活。這就需要我們去觀察生活。

觀察生活,非常重要的一點,就是好奇心,對周遭人、事、物要有足夠的好奇心。

比如上文提到的例子,在 iPhone 上刪除應用前,應用圖標會抖。這種抖是一種趣味隱喻,既可以理解成嚇的發(fā)抖,也可以理解成搖頭求生。如果對生活沒有足夠的好奇心,是很難留意到這種生活細節(jié),并把它們作為一種隱喻運用到交互設計中的。

以上是關于好奇心,還有一種特質,也是在小孩身上表現突出,同時也和本文主題有關,那就是:童趣。

還是上文的例子,在 B 站 App 上輸入登錄密碼時,動畫人物會捂眼睛。這個設計,可能不會打動所有用戶,但至少一部分用戶會覺得比較有趣。如果我們內心沒有一點童趣,可能也會覺得,這個設計,沒啥意思。

玩是人的天性。對于比較好玩的交互設計,大部分人是比較容易產生共鳴的。實際上,據筆者觀察,我們大部分從業(yè)者是有童趣的。我們比較缺的,是好奇心。

那么,怎樣判斷自己是否擁有足夠的好奇心,其標志是什么?

個人觀點,有兩個標志。第一,是對與個人利益無關的生活小事的關注,遠多于對個人利益本身的關注。第二,觀察和思考,遠多于評價和自大;追本和溯源,遠多于偏見和傲慢。

為什么會提到個人利益?

因為,通常而言,個人利益,尤其是短期利益(比如少花時間設計和修改原型),往往會和用戶體驗存在一個此消彼長的關系。

如果過于關注個人利益,不僅很難照顧到用戶體驗,甚至會傷害用戶體驗。至于給用戶帶來驚喜,就更無從談起了。

回到現實當中。在時代洪流面前,好奇心的兩個標志,顯得很難,該如何實現?

關鍵在于找到背后的源動力。這個源動力,在筆者看來,有兩點,分別是:求知若渴、淡泊寧靜。


求知若渴,可以源源不斷的驅動我們去觀察、去思考萬事萬物的規(guī)律和聯系。

淡泊寧靜,正如諸葛亮在《誡子書》中所說,“非淡泊無以明志,非寧靜無以致遠”。人的心力和精力終歸是有限的,如果我們沉迷名利、物欲、享樂,就難有興趣和精力去琢磨萬事萬物了。

所以,只要找回自己童年的那種求知若渴,同時修身養(yǎng)性到淡泊寧靜,這份好奇心,就會回來。

2 巧妙融合

某種程度上,很多帶給我們驚喜的交互設計,都是一種巧妙融合。

筆者把這種巧妙融合,初步分成了三類,分別是:簡單融合、直接融合、委婉融合


簡單融合,最常見的就是隱藏功能。把一個較為簡單的操作動作,比如長按、雙擊、下拉、左滑等,和一個合適的功能,融合在一起。用電腦時我們常說的快捷鍵,也屬于這一類。

通常而言,操作對應什么功能,講究的是合適,并無固定章法束縛。比如在微信朋友圈,發(fā)表文字的功能可以靠長按(相機圖標)喚起,設置權限的功能也可以靠長按(好友頭像)喚起。所以,簡單融合這塊,可供我們發(fā)揮的空間很大。

另外,簡單融合最常見的形式——隱藏功能,既實現了界面的簡潔,又帶來了一定驚喜。

簡單融合,既簡單,又實用。建議大家充分開發(fā)這一塊。

直接融合,是指將生活中的趣味性,直接搬到軟件中,搬到交互設計中。比如微信聊天中的扔骰子、石頭剪刀布,以及漂流瓶、抽獎等。

這一類融合,有點像商場里的電玩城,雖然我們不會經常去玩,但確實比較好玩。

委婉融合,是指用明喻或隱喻的手法,將生活中微不足道的一些細節(jié),移植到交互設計中。

這種移植,有時是直白的。比如 Mac 上打開應用時,其圖標會在 dock 欄里有規(guī)律的彈跳,這會讓我們聯想到皮球的彈跳。

這種移植,有時是隱晦的。比如 iPhone 上刪除應用前,其圖標會抖。這種抖,是害怕還是求饒,任憑我們想象。

這種移植,有時是無聲的。比如在朋友圈,要想呼出隱藏的設置權限功能,只能長按頭像,長按名字則不行。這個設計,不乏想象空間。如果不嘗試長按名字,則不會發(fā)現這個細節(jié)。

委婉融合,有時會帶一些趣味性。更為重要的是,它能夠引發(fā)我們的思考和想象,所以是一種很出彩的融合。這種融合,也會賦予交互設計,一種禪的味道。

整體而言,筆者非常推薦委婉融合。

3 追求卓越

如果目標是小驚喜,則保持好奇心、并做到巧妙融合,基本足矣。

如果目標是大驚喜,則需要雄心壯志,需要舍我其誰,需要追求卓越。

日常工作中,可能會有這樣的對話?!斑@個動效/功能,實現不了”。

大驚喜里的幾個例子,比如初代 iPhone 的觸控體驗,iPhone 里的測距儀,微信的掃一掃識物。這種設計,意味著要修一條最好的長城,背后往往有很多技術難題要攻克,有很多臟活累活要做。

如果團隊文化就是做出最優(yōu)秀的交互設計,那么,“實現不了”這句話,估計就聽不到了。取而代之的,可能是:“還在研究中”,“下個大版本能上”。

4 自然而然

提到驚喜,還有一款值得研究和學習的產品,那就是錘子手機的 Smartisan OS。

個人觀點,在小驚喜方面,Smartisan OS 頗有建樹。在大驚喜方面,Smartisan OS 也進行了一些值得學習的探索。

先說小驚喜,比如華麗而細膩的桌面翻頁動畫,比如四指橫劃桌面可以切換桌面背景。還有一些貼心的小功能,比如靜音可以設置時間,比如方便的長截屏。

(靜音可設置時間)

(長截屏)

再說大驚喜。2016 年 10 月發(fā)布的一步和大爆炸,是比較大比較系統(tǒng)的功能,在當時也很新。錘子公司也一直有宣傳這兩個功能。所以相對而言,這兩個功能是 Smartisan OS 的大驚喜。

筆者的備用機是錘子手機,身邊也有朋友在用錘子手機。以一步為例,這個功能,筆者體驗過很多次。但平常很少用,身邊朋友的情況也類似。

(一步)

根據使用情況和主觀感受,個人覺得,一步這個大驚喜,還存在進步空間,主要有兩個方面。

第一,宏觀層面。一步作為新生事物,好比一顆新種子。種子破土而出時,是一顆嫩芽,而不是一棵大樹。新生的一步功能繁多,猶如一棵破土而出的大樹,一方面有違自然規(guī)律,另一面因為功能繁多,很多用戶無法一下子看懂,看不懂可能就不想用了。

第二,微觀層面。一步這棵新大樹,結了很多不同的果子,比如拖拽圖片到其他應用、切換后臺應用、展示最近圖片/文件等。這些果子,是用戶真正需要的嗎?這個是要存疑的。

比如拖拽圖片到朋友圈就能發(fā)朋友圈這個設計。通常而言,我們發(fā)到朋友圈的圖片都是精挑細選的,會占用一定量的時間,比如旅游或聚會結束后發(fā)的照片。一步解決的是效率問題。發(fā)朋友圈的時候,少點幾下這種效率問題,優(yōu)先級是比較靠后的,我們沒那么在乎。

還有拖拽圖片/文件這個交互動作,大家通常在電腦上用的比較多,在手機上是沒有這個習慣的,實際上應用場景也少。在手機上,大家一般只習慣拖拽應用圖標。

還有切換后臺應用這塊,大家第一個想到的,一定是系統(tǒng)自帶的,已經用慣了。而且喚起速度比一步快,點擊面積也比一步大。

總的來說,微觀層面上,比較缺讓大家能馬上想到一步的功能點。

最后,總結一下。對于領先時代、引領潮流的交互設計,需要做到自然。

具體而言,就是,大驚喜是一種系統(tǒng)性的大功能,好比一棵大樹。這棵大樹,最好有一個從種子到果子的生長過程,這樣最自然,生命力也會最旺盛。

因為,從破土而出的嫩芽階段,就可以通過用戶反饋和數據來檢驗,這種嫩芽,是不是真的對用戶有價值。如果價值不大或沒有價值,還可以再調整。如果長成大樹結滿果子,再去調整,就很難了。


結語

交互設計小細節(jié),如果有一定的趣味性或人文屬性,則是小驚喜。

系統(tǒng)性工程的交互設計,如果最初感覺很酷,而且能引領潮流、代表未來,則是大驚喜。

始終保持孩童身上那種非功利的好奇心,用心觀察并思考生活中的小事;

將生活小事和交互設計巧妙融合起來;

以上兩點,可以幫我們做出小驚喜類的交互設計。

追求卓越,獨立思考,做最酷最好的交互設計;

酷是結果也好,是目標也好,都不是最重要的。最重要的是,避免刻意和心切。醞釀大驚喜,猶如培養(yǎng)一個新生的孩子,需要投入極大耐心和精力,需要讓孩子自然成長。沒有家長會教半歲的孩子唱歌、把 3 歲的孩子送到高中念書。

再加上以上兩點,可以幫我們做出大驚喜類的交互設計。

最后,用愛因斯坦的一句話來共勉。

想象力比知識更重要。


“抗擊肺炎”數據產品體驗分析報告

ui設計分享達人

站在設計師的角度去分析這場戰(zhàn)疫下各大互聯網公司快速響應產出的數據產品“抗擊肺炎”專題。

轉自:站酷-Yuki_yee

彈性布局(Flex)+骰子旋轉實例^v^

seo達人

彈性布局(Flex)

隨著移動互聯網的發(fā)展,對于網頁布局來說要求越來越高,而傳統(tǒng)的布局方案對于實現特殊布局非常不方便,比如垂直居中。

2009年,W3C 提出了一種新的方案----Flex 布局,可以簡便、完整、響應式地實現各種頁面布局。目前,它已經得到了所有瀏覽器的支持,這意味著,現在就能很安全地使用這項功能。

下面是一些彈性布局的基本語法:

兩部分:


  1. 語法是添加到父容器上的

            display : flex;(彈性盒子的標志哦?。。。?br />
            flex-direction: row; 布局的排列方向 (主軸排列方向)

                 row 默認值,顯示為行。方向為當前文檔水平流方向,默認情況下是從左往右。

                 row-reverse  顯示為行。但方向和row屬性值是反的

                 column  顯示為列

                 column-reverse 顯示為列。但方向和column屬性值是反的

            flex-wrap : nowrap; 是否進行換行處理。

                 nowrap; 默認值,不換行處理

                 wrap; 換行處理

                 wrap-reverse; 反向換行

            flex-flow : flex-direction flex-wrap 復合寫法 (是有順序的)。

            justify-content ; 屬性決定了主軸方向上子項的對齊和分布方式。  

                flex-start : 子項都去起始位置對齊。

                flex-end : 子項都去結束位置對齊。

                center : 子項都去中心位置對齊。

                space-between : 表現為兩端對齊。多余的空白間距在元素中間區(qū)域分配,兩邊沒寬。 

                space-around : 邊緣兩側的空白只有中間空白寬度一半即每個塊都有左右間距。

                space-evenly :每個flex子項兩側空白間距完全相等。

            align-items : 每一行中的子元素上下對齊方式。

                stretch;默認值,flex子項拉伸

                flex-start;容器頂部對齊

                center;容器居中對齊

                flex-end;容器底部對齊

            align-content : 跟justify-content相反的操作。側軸的對齊方式。(最少需要兩行才能看出效果,因為他是多行的一個上下對齊方式)

                默認:多行下,有幾行就會把容器劃分為幾部分,默認就是stretch拉伸的。

                值跟justify-content取值是相同的。


  2. 語法是添加到子容器上的?

            order : 排序(值越大越后)

                0:默認值      eg:1234

                1:放在后面    eg:1342

                -2:放在前面   eg:2134

            flex-grow : 擴展 ( 想看到擴展的效果,必須有空隙 )

                0 : 默認值 , 不去擴展

                0.5:占空隙的一半

                1 : 去擴展 , 會把空白區(qū)域全部沾滿

             ( 注:子元素會按照設置的比例值來分配空隙,如果比例值總和小于1,那么會有空隙,如果比例值總和大于等于1,那么就沒有空隙。)

            flex-shrink : 收縮

                正常默認值是1

                0表示不收縮,.5收縮小一些,2收縮大一些。(大小是跟正??s放1進行比較的)

            flex-basis : 跟flex-shrink/flex-grow很像。

                flex-shrink/flex-grow是設置一個比例值,flex-basis是設置一個具體值。

            flex : 一種復合寫法

                flex-grow  flex-shrink  flex-basis

                flex:1;

                    flex : 1 1 0    

                flex:0;

                    flex : 0 1 0

            algin-self: 跟align-items操作很像,區(qū)別就是只是針對某一個子項。

                



    注:默認情況下,在彈性盒子中的子元素的左右排列的。

    注:

        水平是主軸的時候:默認情況下,當寬高不寫的時候,寬度由內容決定,高度由父容器決定。

        垂直是主軸的時候:默認情況下,當寬高不寫的時候,寬度由父容器決定,高度由內容決定。



    注:當子項的總寬度大于父容器的時候,會自動收縮的(彈性的優(yōu)先級是大于自身固定大小的)

    注:當子項的內容已經達到了父容器最小寬高的時候,就會出現溢出的現象。



    注:彈性布局中用的頻率比較多的語法:

        display : flex;

        flex-direction;

        justify-content;

        align-items;

        flex;



    注:彈性布局的優(yōu)勢是做一維布局,網格布局的優(yōu)勢是做二維布局。



    下面是彈性布局骰子案例代碼:



    <!DOCTYPE html>

    <html lang="en">

    <head>

        <meta charset="UTF-8">

        <meta name="viewport" content="width=device-width, initial-scale=1.0">

        <title>Document</title>

        <style>

            *{margin: 0;padding: 0;}

            ul{list-style: none;}

            a{text-decoration: none;}

            img{display: block;}



            .box1{width: 150px;height: 150px;display: flex;border: 1px black solid;margin: 20px auto;border-radius: 10px;justify-content: center;align-items: center;}

            .box1 div{width: 30px;height: 30px;border-radius:50%;background: black;}



            .box2{width: 150px;height: 150px;display: flex;border: 1px black solid;margin: 20px auto;border-radius: 10px;align-items: center;justify-content: space-between;}

            .box2 div{width: 30px;height: 30px;border-radius:50%;background: black;margin: 10px;}

            .box2 div:nth-of-type(1){align-self: flex-start;}

            .box2 div:nth-of-type(2){align-self: flex-end;}



            .box3{width: 150px;height: 150px;display: flex;border: 1px black solid;margin: 20px auto;border-radius: 10px;align-items: center;justify-content: space-between;}

            .box3 div{width: 30px;height: 30px;border-radius:50%;background: black;margin: 10px;}

            .box3 div:nth-of-type(1){align-self: flex-start;}

            .box3 div:nth-of-type(3){align-self: flex-end;}



            .box4{width: 150px;height: 150px;border: 1px black solid;margin: 20px auto;border-radius: 10px;display: flex;flex-direction: column;}

            .box4 div{height: 50%;display: flex;flex-direction: row;justify-content: space-around;align-items: center;}

            .box4 div li{display: block; width: 30px;height: 30px;border-radius:50%;background: black;}



            .box5{width: 150px;height: 150px;border: 1px black solid;margin: 20px auto;border-radius: 10px;display: flex;flex-direction: column;}

            .box5 div{height: 50%;display: flex;flex-direction: row;justify-content: space-around;align-items: center;}

            .box5 div li{display: block; width: 30px;height: 30px;border-radius:50%;background: black;}



            .box6{width: 150px;height: 150px;border: 1px black solid;margin: 20px auto;border-radius: 10px;display: flex;flex-direction: column;}

            .box6 div{height: 50%;display: flex;flex-direction: row;justify-content: space-around;align-items: center;}

            .box6 div li{display: block; width: 30px;height: 30px;border-radius:50%;background: black;}



            #box{width: 400px;height: 400px;margin: 20px auto;border: 1px springgreen solid; 

            perspective: 500px;perspective-origin: right top;}

            #box .main{position: relative;width: 150px;height: 150px;margin: 125px;

            transform-style: preserve-3d;transition: 4s;transform-origin: center center -50px;}

            #box .main .box1{position: absolute;background:limegreen;left: 0;top: 0;

            width: 150px;height: 150px;}

            #box .main .box2{position: absolute;background:limegreen;left: 0;top: 0;

            width: 150px;height: 150px;left: 150px;transform-origin:left; transform:rotateY(90deg);}

            #box .main .box3{position: absolute;background:limegreen;left: 0;top: 0;

            width: 150px;height: 150px;left: -150px;transform-origin:right; transform:rotateY(-90deg);}

            #box .main .box4{position: absolute;background:limegreen;left: 0;top: 0;

            width: 150px;height: 150px;top: -150px;transform-origin:bottom; transform:rotateX(90deg);}

            #box .main .box5{position: absolute;background:limegreen;left: 0;top: 0;

            width: 150px;height: 150px;top: 150px;transform-origin:top; transform:rotateX(-90deg);}

            #box .main .box6{position: absolute;background:limegreen;left: 0;top: 0;

            width: 150px;height: 150px;transform:translateZ(-150px) rotateY(180deg);}



            #box:hover .main{transform:rotateY(360deg);}

        </style>

    </head>

    <body>

        <div id="box">

            <div class="main">

                <div class="box1">

                    <div></div>

                </div>

                <div class="box2">

                    <div></div>

                    <div></div>

                </div>

                <div class="box3">

                    <div></div>

                    <div></div>

                    <div></div>

                </div>

                <div class="box4">

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                </div>

                <div class="box5">

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                    <div>

                        <li></li>

                    </div>

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                </div>

                <div class="box6">

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                    <div>

                        <li></li>

                        <li></li>

                    </div>

                </div>

            </div>

        </div>

    </body>

    </html>




日歷

鏈接

個人資料

藍藍設計的小編 http://bouu.cn

存檔