---
# System prepended metadata

title: DD106 Web/APP前端設計工程師養成班
tags: [前端設計工程師養成班]

---

###### tags: `前端設計工程師養成班`
# DD106 Web/APP前端設計工程師養成班


# wewbpack

- webpack 官網
https://www.webpackjs.com/concepts/

 安裝套件




- github
https://github.com/sexfat/webpack_106

    https://webpack.js.org/loaders/css-loader/

    https://webpack.js.org/plugins/html-webpack-plugin/

```jsx=
 plugins: [
    //html 5 plugin
    new HtmlWebpackPlugin({
      template: './src/index.html'
    })
  ]
```

打開瀏覽器

"open" :"webpack-dev-server --open"



-  webpack 安裝

`npm i webpack webpack-cli -D`

- 指令
`npx webpack index.js`











# Git 安裝
https://git-scm.com/

# github 帳號註冊
https://github.com/


# Sourcetree 安裝
https://www.sourcetreeapp.com/


## 識別資料的建立
要登入遠端資料庫時，通常要有帳號密碼，所以要在本機端建立識別資料，以利遠端登入


git remote add origin https://github.com/sexfat/dd106test.git
git push -u origin master


# 分組名單
```htmlmixed=
G1: 李昇翰, 柴道融, 樂憲均, 蘇韋竹, 張益豪, 林宛萱, 李杰奇  
G2: 汪禹承, 林于暄, 張峯誠, 何京軒, 李凱鐘, 張紹逸, 林循安  
G3: 廖奎舜, 陳玥妘, 施冠卉, 李昆峰, 曾立杰, 高健傑, 張彤心 
```


# Scrollmagic


https://scrollmagic.io/

```htmlmixed=
    <script src="node_modules/scrollmagic/scrollmagic/minified/ScrollMagic.min.js"></script>
    <script src="node_modules/scrollmagic/scrollmagic/minified/plugins/animation.gsap.min.js"></script>
    <script src="node_modules/scrollmagic/scrollmagic/minified/plugins/debug.addIndicators.min.js"></script>
```



https://scrollmagic.io/docs/index.html#usage
```jsx=

// 場景最上方
var controller = new ScrollMagic.Controller();

//左右場景
var controller = new ScrollMagic.Controller({vertical: false});


//動畫
let scroll =  TweenMax.to('.box_scoll' , 1,{


    x: 400
});



//觸發事件
new ScrollMagic.Scene({
     triggerElement : '#keypoint01',//觸發點
     triggerHook : 0.5, //觸發點位置 瀏覽器
     offset: 200, //觸發點位置  場景
     reverse: true, //返回
     duration :  300 //scroll 距離  平均分配動畫長度
   }).setTween(scroll).addIndicators().addTo(controller)
```
# 觸發 css 動畫 

-  html

```htmlmixed=
 <section class="bg2">
            <div class="title animation_title">看不見我
            </div>
   
        </section>
```


- css

```css=

.bg2 {
    background-color: rgb(82, 73, 23);
    transition:  all 1s ease-in-out;
    .title {
        color: rgb(82, 73, 23);
        text-align: center;
        font-size: 80px;
        position: relative;
        top: 120px;
    }
    &.on{
        background-color: rgb(43, 5, 68);
    }
} 
```
 - 場景二
```jsx=

let title_animation = TweenMax.fromTo('.animation_title', 1, {
    y: 0,
    opacity: 0
}, {
   y: 100 , 
   opacity: 1 
})


new ScrollMagic.Scene({
    triggerElement: '#keypoint02',
    triggerHook: 0.5,
}).setClassToggle('.bg2', 'on').setTween(title_animation).addIndicators().addTo(controller)
```


- 場景三

- html
```htmlmixed=
 <div id="keypoint03"></div>
        <section class="bg3">
           <div class="box scrollstick_01"></div>
           <div class="box scrollstick_02"></div>
           <div class="box scrollstick_03"></div>
        </section>

```

- css


```css

.box {
    background-color: rgba(255, 255, 0, 0.913);
    width: 100px;
    height: 50px;
}

.bg3 {
    background-color: rgb(133, 141, 255);
  .box {
      margin-bottom: 10px;
      width: 300px;
  }
```


- js

```jsx=
let stick = new TimelineMax();


stick.to('.scrollstick_01' , 1 , {
    x: 300
}).to('.scrollstick_02' , 1 , {
    x: 400
}).to('.scrollstick_03' ,1 , {
   x: 500});

   new ScrollMagic.Scene({
    triggerElement: '#keypoint03',
    triggerHook: 0,
    duration: '300%'
}).setPin('.bg3').setTween(stick).addIndicators().addTo(controller)  
```

## 滾動視差


- html

```htmlmixed=
 <div id="keypoint04"></div>
        <section class="bg4">
            <div class="box boxpallax1"></div>
            <div class="box boxpallax2"></div>
            <div class="box boxpallax3"></div>
        </section>
```






- css
```css
.bg4 {
    background-color: rgb(204, 164, 255);
    background-image: url(https://placem.at/people);
    background-size: cover;
    .box {
        margin-bottom: 10px;
        width: 300px;
    }
    .boxpallax1 {
        position: relative;
        top: 300px;
        left: 600px;
    }

    .boxpallax2 {
        position: relative;
        top:300px;
        left: 700px;
    }

    .boxpallax3 {
        position: relative;
        top: 200px;
        left: 800px;
    }



}
```





```jsx=
//滾動視差


var tlp = new TimelineMax();

var parallax01 = TweenMax.to('.boxpallax1' ,1, {
    y: '-10%',
});

var parallax02 = TweenMax.to('.boxpallax2' ,1, {
    y: '100%',
});

var parallax03 = TweenMax.to('.boxpallax3' ,1, {
    y: '-220%',
});


tlp.add([parallax01 , parallax02 , parallax03]);

new ScrollMagic.Scene({
    triggerElement: '#keypoint04',
    // triggerHook: 0,
    duration: '100%'
}).setTween(tlp).addIndicators().addTo(controller)   
```








# nodejs  安裝11.15.0

https://nodejs.org/download/release/v11.15.0/


node-v11.15.0-x64.msi  
node-v11.15.0-x86.msi  

# sass 安裝

https://sass-lang.com/install

## 動畫套件 gsap
https://greensock.com/docs/v2

## npm 安裝
`npm i gsap@2.1.3`

## ease
https://greensock.com/docs/v2/Easing



## 參數集介紹 option

```jsx=
//位移跟大小
    scaleX:1.5,
    x: 140,
    y: 0,
    boxShadow: "0px 0px 20px red",//陰影
    scale:2, //放大
    delay: 2,//延遲幾秒
    repeat: 3,//重複幾次
    repeatDelay: 2,//重複延遲時間
    yoyo: true,//動畫順序1-2-2-1
    alpha:0,//透明度
    autoAlpha: 0 //透明度
    ease: Power3.easeInOut//動畫效果

//旋轉要件
    rotationY: 360, //旋轉
    rotationX: 360 , //旋轉
    transformOrigin : 'right top' //定位點
//透明度
    autoAlpha: 0 //自動消失
//修改classname
//增加一組class
   className: "+=box10"
//覆蓋掉本來的class
   className: "box10"


```


## bezier 貝茲曲線路徑


```
TweenMax.to('.box04', 4, {
    bezier: {
        curviness: 1.25,
        values: [{
                x: 100,
                y: 300
            },
            {
                x: 400,
                y: 300
            },
            {
                x: 600,
                y: 100
            },
            {
                  x: 1000,
                  y: 300
            }
        ]}
})
```












### vscode setting

```
"liveSassCompile.settings.formats": [
        {
            "format": "expanded",
            "extensionName": ".css",
            "savePath": "/css/"
        }
    ],
```    
# sass 


### 變數 $
    
```css=
$fontSize : 14px;
$color : hsl(0, 0%, 75%);
$fontFamily: 'arial' san-serif;


body {
    font-size: $fontSize;
    font-family: $fontFamily;
    padding: 266px;
    color: $color;
}

div {
    font-size: $fontSize; 
}

h1 {
   font-size: $fontSize * 5;
}

h2 {

      font-size: $fontSize *4;
}
``` 

### Nesting

```css
.wrappers {
    width: 1200px;
    background-color: rgb(255, 189, 67);
    margin: 0 auto;
    h1 {
        font-size: $fontSize * 5;
        span {
            font-size: $fontSize;
            font-weight: 300; 
            display: block;
            position: relative;
            left: 5px;
        }
    }
}

```


### mixin 

```css
 @mixin margins() {   
    margin: 20px;
}

@mixin marginAuto(){
    .marginAuto {
       margin: 0 auto; 
    }
}

@mixin paddings() {
    padding: 20px;
}

.box-10 {
    @include margins();
    @include paddings();
}

.box-all {
    @include paddings();
}

@include marginAuto();
    ```
    
    
  ### mixin 帶值  

> 注意 變數有分 區域變數 跟 全域變數

    
```css
@mixin h1title($fontSize) {
    h1 {
        font-size: $fontSize * 5;
        span {
            font-size: $fontSize * 2;
        } 
    }
}



@mixin h2title($fontSize) {
    h2 {
        font-size: $fontSize * 5;
        span {
            font-size: $fontSize * 2;
        } 
    }
}

@include h1title(20px);
@include h2title(15px);
    

```
### 帶多值
```css
@mixin rect($width , $height, $bgc) {
    width: $width;
    height: $height;
    background-color: $bgc;
}
.box{
  @include rect(100px, 30px , #fff)
} 
```



### 空值


```css
@mixin borderline($width, $borderColor:null) {
    width: $width;
    height: $width * 0.5;
    border: 1px solid $borderColor;
}

.borderline {
    @include borderline(100px);
}

```


### 預設值

```css=
@mixin rect($width:400px, $height:300px, $bgc:#fff) {
    width: $width;
    height: $height;
    background-color: $bgc;
    border: 1px solid $bgc;
}
```


### 運算

```css=
//運算

.section {
  width: 10rem + 10rem ;
  height: 10px - 100  ;
  font-size:  10 * 10px ;
  font:  (100 / 20) + em;
}

```


 
```css=

$fontSize : 14px;

h1 {
        font-size: round($fontSize * 5.3);//四捨五入
    }

    h2 {
        font-size: floor($fontSize * 4.2);//無條件捨去
    }

    h3 {
        font-size: ceil($fontSize * 3.7);//無條件進位
    }

    h4 {
        font-size: $fontSize * 1.8;
    }

    h5 {
        font-size: $fontSize * 1;
    }
```

### 判斷式

```css=
$num : 110;

@if $num <= 100 {
    .num {
        width: 100px;
    }
}@else if $num == 80 {
    .num {
        width: 80px;
    }
 }@else {
        .num {
            width: 0px;
        }
    }
```


### 判斷式運用


```css=
@mixin marginAuto() {
        margin: 0 auto;
}

@mixin layout-full($width:100) {
    @if $width==100 {
        width: 100%;
        display: block;
    }
    @else {
        width: $width + px;
        @include marginAuto();
    }
}
```

### 偽類

```css=
@mixin mode(){
    &::before , &::after{
       content: '';
       @content 
    }
}


.nav {
    ul {
        li {
            width: 100px;
            margin: 10px;
            display: inline-block;

            a {
                color: red;

                &:hover {
                    color: blue;
                }

                &:active {
                    color: green;
                }

    @include mode(){
      padding: 10px
      //屬性
    };
            }

        }
    }


}
```


### 跳脫符號 #{變數}

```css=
@mixin btn( $class, $w, $p, $bgc, $fontSize) {
    #{$class}{
        width: $w;
        padding: $p;
        text-align: center;
        background-color: $bgc;
        font-size: $fontSize;
        cursor: pointer;
        margin: 2px;
        display: inline-block;
        transition: all 1s;
        &:hover{
            // background: darken($bgc, 20);
            background: lighten($bgc, 30);
        }
    }
}

@include btn('.btn', 100px, 10px, rgb(247, 252, 0), $fontSize);

```


## @for 迴圈


`@for $var from <start> through <end>`
`@for $var from <start> to <end-1>`


```css

//through 跟 to 的差異
@mixin boxs($num) {
    @for $i from 1 through $num {
        .box_#{$i} {
          width:  $i * 1px;
        }
    }
}

@include boxs(10);
```


## Grid

```css
@mixin grid($num) {
    @for $i from 1 through $num {
        .col-md-#{$i} {
          width: ($i / $num) * 100%;
          @content
        }
      }
    
}

@include grid(12){
    display: inline-block;
    background-color: rgb(255, 241, 49);
    height: 20px;
};
```


## @each


```css
@each  $var  in  a1 , a2 , a3 {
  .img_#{$var} {
      background-image: url('./img/#{$var}.jpg');
  }
}
```


```css=
@mixin imgUrl($val) {
    @each $var in $val {k
        .img_#{$var} {
            background-image: url('./img/#{$var}.jpg');
        }
    }
}

@include imgUrl(a1  a2  a3 b2);
```



```css=
@mixin imgUrl($file , $link) {
    @if $file==jpg {
        @each $var in $link {
            .img_#{$var} {
                background-image: url('./img/#{$var}.jpg');
                @content
            }
        }
    }

    @else if $file==png {
        @each $var in $link {
            .img_#{$var} {
                background-image: url('./img/#{$var}.png');
                @content
            }
        }
    }
};

 @include imgUrl(jpg , a1 b1 img2 );
 
 .wrapper {
    @include imgUrl(jpg , a1 b1 img2 );
}


.wrapper-about {
    @include imgUrl(png , a12 b12 img3 ){
      width: 100%;
    };
}

```


## @extend

```css
@mixin rectbox() {
    width: 100px;
    height: 30px;
    margin-bottom: 10px;
}

%rectbox {
    width: 100px;
    height: 30px;
    margin-bottom: 10px;
}

.box-red {
  @extend %rectbox;

   background-color: #f70000;

}
.box-blue {
    @extend %rectbox;
  background-color:  #0004ff;
}



// .box-red {
//     width: 100px;
//     height: 30px;
//     margin-bottom: 10px;
//     background-color: #f70000;
// }

// .box-blue {
//     width: 100px;
//     height: 30px;
//     margin-bottom: 10px;
//     background-color:  #0004ff;
// }

```





## @extend 

```css
%attr {
    display: inline-block;
    background-color: rgb(255, 241, 49);
    height: 30px;
}


@include grid(12) {
    @extend %attr;
    // display: inline-block;
    // background-color: rgb(255, 241, 49);
    // height: 20px;
}
```

## RWD


```css=
@mixin rwd($breakpoint) {
    @if $breakpoint== desktop {
        @media all and (min-width: $desktop) {
            @content;
        }
    }

    @else if $breakpoint==medium {
        @media all and (min-width: $medium) {
            @content;
        }
    }

    @else if $breakpoint== small {
        @media all and (min-width: $small) {
            @content;
        }
    }
}


@include rwd(medium) {
    //平板
    /* 平板 */
    .wrappers {
        font: 100px;
    }
}


```




## @map 

```css=
$maps:
(
  h1 : 40px,
  h2 : 30px,
  h3:  20px,
  h4:  18px,
  h5 : 14px
);



@each $key, $value in $maps {
  #{$key}{
     font-size:$value; 
  }
}
```


## each RWD

```css
$breakpoint-rwd :(moblie : 721px,
    medium : 996px,
    desktop : 1200px,
    xl-desktop : 2000px
);


@mixin rwd-each($a) {
    @each $viewpoint,$num in $breakpoint-rwd {
        @if $a==$viewpoint {
            @media all and (min-width : $num) {
                @content
            }
        }
    }
};


@include rwd-each(desktop){

body {
   font-size: 30px; 
  }
}
```



```css=
$list : 10px 20px 30px 40px 50px;


.boxlist {
    width: length($list);
    height: nth($list, 2)
}
```



```css=


@mixin margin-auto($val...) {
    @if length($val)==0 {
        margin: 0 auto;
    }
    @else if length($val)==1 {
        margin: $val auto;
    }
    @else {
        margin: nth($val, 1) auto nth($val, 2);
    }

}





.box-auto {
    width: 100px;
    @include margin-auto(10px , 20px);
}
```

# Gulp


- gulpfile.js


```jsx=
var gulp = require('gulp');


gulp.task('concatjs' , function() {
    gulp.src('js/*').pipe(gulp.dest('assets/js'));
})

gulp.task('concatcss' , function() {
    gulp.src('css/*').pipe(gulp.dest('assets/css'));
})
```


```jsx=

var cleanCSS = require('gulp-clean-css');


gulp.task('minicss', function () {
    gulp.src('css/*.css')
    .pipe(cleanCSS({
        compatibility: 'ie8'
    }))
    .pipe(gulp.dest('css/mini/'));
});

```


# gulp-sass 

`npm install node-sass gulp-sass --save-dev`


https://www.npmjs.com/package/gulp-sass

```jsx=
var sass = require('gulp-sass');

gulp.task('sass', function () {
    gulp.src('sass/*.scss')
    .pipe(sass().on('error', sass.logError))
    .pipe(gulp.dest('css/'))
});
```


## minicss + sass

```jsx=
gulp.task('sass', function () {
    gulp.src('sass/*.scss')
    .pipe(sass().on('error', sass.logError))
    .pipe(gulp.dest('css/'))
});

gulp.task('minicss',['sass'], function () {
    gulp.src('css/*.css')
        //壓縮
        .pipe(cleanCSS({
            compatibility: 'ie8'
        }))
        //完成搬家
        .pipe(gulp.dest('css/mini/'));
});
```


# gulp file include 
https://www.npmjs.com/package/gulp-file-include


`npm install --save-dev gulp-file-include`

# 講義
https://bryant-huang.gitbook.io/-1/


# 專案樣板下載
https://github.com/sexfat/dd105g4/tree/master/dev/sass


























# html 測驗

https://docs.google.com/forms/d/e/1FAIpQLSelZV549JOKFjKIhv8LumENb3kAzSKi-ZDX2Ourr_lJqpnTRA/viewform


#  caniuse
https://caniuse.com/

# 上課檔案
https://github.com/sexfat/dd106

# html講義
https://cookies.gitbook.io/dev-something/

# 動畫原理
https://hackmd.io/llIBNZDFR7qMTrQQGUCuCw


# ui 資源分享
http://collectui.com/designs

https://www.pinterest.com/

https://bm.s5-style.com/

https://dribbble.com/


- 學姊ppt 參考
http://140.115.236.71/demo-personal/DD103/web/%e7%b0%a1%e5%a0%b1PDF/T1900826%ef%bc%bf%e8%b3%b4%e6%80%a1%e5%ae%89%ef%bc%bf%e8%8a%b1%e7%b3%b8.pdf

- design system
https://designsystemsrepo.com/design-systems/


https://uxmovement.com/products/flow-patterns-make-site-flows-in-fine-visual-detail/?fbclid=IwAR3xO7KCzEmxdGqu-Bpj5wDJMbtkF13MTEFZjX89M8oCCmIAf-fUwg5VtE0

# chrome plugin

- 網站技術分析 https://chrome.google.com/webstore/detail/wappalyzer/gppongmhjkpfnbhagpmjfkannfbllamg?hl=zh-TW

 
- grid 尺規 https://chrome.google.com/webstore/detail/grid-ruler/joadogiaiabhmggdifljlpkclnpfncmj

- colorpick https://chrome.google.com/webstore/detail/colorpick-eyedropper/ohcpnigalekghcmgcdcenkpelffpdolg

- 同文堂 https://chrome.google.com/webstore/detail/new-tong-wen-tang/ldmgbgaoglmaiblpnphffibpbfchjaeg?hl=zh-TW

- 字體
https://chrome.google.com/webstore/detail/fontface-ninja/eljapbgkmlngdpckoiiibecpemleclhh


- rwd grid
https://chrome.google.com/webstore/detail/design-grid-overlay/kmaadknbpdklpcommafmcboghdlopmbi

- 結構
https://chrome.google.com/webstore/detail/pesticide-for-chrome/bblbgcheenepgnnajgfpiicnbbdmmooh



#  網站資源分享

1. https://ogdesign.tw/resources#?category=web-desgin
2. https://trello.com/b/aBDsBWHg/%E5%A5%BD%E7%AB%99%E8%B3%87%E6%BA%90%E5%88%86%E4%BA%AB

- https://www.cssawards.net/
- https://dribbble.com/
- https://www.awwwards.com/
- http://nipponcolors.com/#tonoko
- https://www.behance.net/
- http://4db.cc/
- https://codemyui.com/
- https://tympanus.net/codrops/

# icon 分享
https://www.flaticon.com/
https://www.iconfinder.com/

# 用戶與伺服器
- 連接到網路的電腦稱為用戶端（client）與伺服器端（server）。彼此的連結原理如圖所示：



![image alt](https://blobscdn.gitbook.com/v0/b/gitbook-28427.appspot.com/o/assets%2F-LQ24OwwZlyZzSLuZtcx%2F-LRaTAFaOj-KrOaNW9hR%2F-LRaU1ORrP9DcCiA1E8s%2FClient-server.jpg?alt=media&token=e4c7727e-ff12-4957-bd8f-9f5e2de6ffad)


# 網頁溝通流程
- 網路連線：讓你可以在網路傳送與接收資料。

- TCP/IP：傳輸控制協定和網際網路協定（Transmission Control Protocol and Internet Protocol）是定義資料如何在網路通行的通訊協定。這就像是方便你去商店買東西的交通工具。

- DNS：網域名稱系統（Domain Name Servers）就像是網站的電話簿。當你在瀏覽器輸入網址時，瀏覽器會在取得網站前，先去看 DNS 以查到網站的真實地址。瀏覽器需要找到哪個伺服器在託管指定的網站、這樣才能把 HTTP 訊息傳送到對的地方。

- HTTP超文本傳輸協定（Hypertext Transfer Protocol）是定義用戶端語言，和伺服器如何對話的應用協議。可以想成你買東西時會用來溝通的語言。

- Component files：網站由許多不同的文件組成
      程式檔：網站主要是由 HTML、CSS、JavaScript 建立
      其他檔案 ： 這是構成網站其他內容的集體名稱，裡面可能包含圖像、音樂、影片、Word、PDF ……   


![](https://i.imgur.com/WlAk9A3.png)

# 編輯器安裝

1. https://code.visualstudio.com/

2. https://www.sublimetext.com/

3. http://brackets.io/

4. https://atom.io/


# vscode 工作區域

![](https://i.imgur.com/KwSmRUb.png)

# 各家瀏覽器佔有率 
https://gs.statcounter.com/


# html架構

```htmlmixed=
<!--註釋文字 -->
<!-- 第1行為代碼註釋標籤，代碼註釋的作用是幫助程序員標註代碼的用途，不會直接呈現在網頁上，我們會通過這樣的方式讓大家來了解一個網頁 -->
<!--<!DOCTYPE> 不是html標籤，但它會告訴瀏覽器html的版本，下面這個寫法就是html5啦 -->
<!DOCTYPE html>
<html>
<!-- 文檔的頭部描述了文檔的各種屬性和信息，包括文檔的標題等、Meta以及css等外部鏈接的引入-->
<head lang="en">
<!-- meta標籤定義了網頁的一些信息，比如charset是編碼格式，http-equiv向瀏覽器傳回一些有用的信息，以幫助正確和精確地顯示網頁內容，viewport，則定義頁面的寬度與打開頁面的屏幕寬度的關係等,keywords和description則是SEO的關鍵，大家可以去研究一下大網站的頭部信息 -->
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="keywords" content="">
<meta name="description" content="">
<!-- 網頁的title標籤會在瀏覽器中的標題欄上顯示（包括微信瀏覽器）用於告訴用戶和搜索引擎這個網頁的主要內容是什麼。搜索引擎可以通過網頁標題，迅速的判斷出網頁的主題，所以它也是SEO幾乎最為關鍵的信息。
每個網頁的內容都是不同的，每個網頁都應該有一個獨一無二的title。 -->
<title>HackWork官方網站</title>
<!--link 標籤通常會引入css或者icon小圖標，css樣式引入有三種寫法，這是其中之一 -->
<link href="css/style.css" rel="stylesheet">
<!--script 標籤會引入javasript文件，通常情況下，這個會放在網站的尾部 -->
<script src="js/index.js"></script>
<!--style標籤是網站的css樣式，css樣式引入有三種寫法，這是其中之一 -->
<style></style>
</head>
<!-- 在<body>和</body>標籤之間的內容是網頁的主要內容，在網頁上要展示出來的頁面內容一定要放在body標籤中。 -->
<body>
<!-- 這是一段註釋，以後大部分的代碼都會寫在body標籤裡面 -->
要寫Hello，World麼？會不會太簡單。
</body>
</html>
```


# table

- css


```css=
table, th, td {
    border: 1px solid black;
     }
  th, td {
     padding: 0 15px;
     text-align: center;
    } 
```


 ![](https://i.imgur.com/pJk05vJ.png)




# 何謂 UI

UI（User Interface）使用者介面，主要專業是設計頁面上的功能、顧及使用的便利性與整個設計的美學，網站的美觀性和他息息相關

# 何謂  UX
UX（User Experience）使用者體驗，則是根據使用者的習慣，安排整個網站頁面的內容規劃，像是哪些區塊的內容要先在網站上出現，行動呼籲按鈕（Call to Action, CTA）的位置應該擺在哪裡。

# 最終

終端使用者與公司網站的互動行為的總和，而此行為的目的是要達成一個目標（取得資訊、下訂單、連絡公司等等）就對了


# 產品故事


1. **選定主題** 
   （假設）資訊分享平台



   (* 當選定主題後，開始分析研究)
2. **產品介紹** 
   - 我們的產品主要是做什麼服務的，能夠你們有效的完成哪些事
   - 我們整理許多主題讓分享更輕鬆，因此您可以專注於真正重要的事情，讓客戶過上更好的生活。我們正在與您一起努力，體驗的未來。

3. **產品目標**

   - 關於這個產品提供哪些服務，主要是解決哪類的問題

4. **使用主族群** 

   - 應用產業 ：科技業
   - 目標用戶 ：工程師

5. **案例研究**
   - 電商研究

6. **需求列表**

   - list log更動列表
   - 注意事項

7. **開始專案**
   
   - sitemap
     ![](https://i.imgur.com/njWAHHm.png)

   - wireframe
    ![](https://i.imgur.com/8E4jtRh.jpg)


   - ui flow
     ![](https://i.imgur.com/cZvn7Fn.jpg)
   - prototype
   - mockup

8. 開發階段


## UI 設計流程
   - ### 1. 格線系統
   - ### 2. UI Kit ( psd or ai etc... ) 
   - ### 3. 產品組成
     - 產品的組成大約可以拆分成 頁面 > 元件 > 元素 > 圖（影片）、文字、icon、表單、互動 等。
     - 各元素都可能需要制定 色彩、透明度、尺寸、間距、檔案格式、品質、風格 等。互動包含 手勢操作、過場動畫、特效、音效、震動 等。

 ## 網頁介面組成 
  
  
  ![](https://i.imgur.com/P5XalcN.png)

  ###  選單元件
  
    ![](https://i.imgur.com/P5XalcN.png)


  

  ![](https://i.imgur.com/IleGkOw.jpg)
  <br>
  ![](https://i.imgur.com/uPpKgv8.png)
  <br>
  ![](https://i.imgur.com/bsraOHn.png)
  範例網址：http://demo.smartaddons.com/templates/html/market/intro-new/
  
    ####  Header要注意的

- [x]  logo不能置頂 貼邊
- [x]  選單要標示所在位址
- [x]  是否有 會員登入/註冊 的標示
- [x]  購物網站是否有購物車 的標示
- [x]  功能列，主選單，次選單層級 是否清楚
- [x] 選單是否有對齊


  
### Hero product
  ![](https://i.imgur.com/VbN5849.jpg)
  <br>
  ![](https://i.imgur.com/DJ4b1a4.jpg)
  <br>
  ![](https://i.imgur.com/SKUJRwH.png)
  
### Ecommerce


![](https://i.imgur.com/vc1xSxV.png)
- 電商的ui kit
https://dlex.design/e-commerce-ui-kit/
<br>
- Nike
https://www.nike.com/gb/hurley
<br>
- 受歡迎電商大全
https://themeforest.net/popular_item/by_category?category=ecommerce

- collection UI 靈感牆
http://collectui.com/designs

工具
https://zeplin.io/
 
 
 
 # RWD
 
 1. https://sexfat.github.io/rwd/index.html
 2. https://sexfat.github.io/rwd/index2.html
 3. https://sexfat.github.io/rwd/index3.html
 4. https://sexfat.github.io/rwd/index4.html
 5. https://sexfat.github.io/rwd/index5.html
 
 
 

 
 
 
 
 
 
 
 
 
 
