h2.title Change Mode
span.change_mode
  span.change_btn
  span.yes O
  span.no |

.keyboard-wrap
  section.top.row-spacing
    .row
      span.key.key-esc Esc
      span.key F1
      span.key F2
      span.key F3
      span.key.col-spacing F4
      span.key F5
      span.key F6
      span.key F7
      span.key.col-spacing F8
      span.key F9
      span.key F10
      span.key F11
      span.key.col-spacing F12
      span.key.text-small Print Screen
      span.key.text-small Scroll Lock
      span.key.text-small.col-spacing 
        span.underline Pause 
        | Break
      span.key.key-light
        span.text-small Num
        span.circle.active
      span.key.key-light
        span.text-small Caps
        span.circle
      span.key.key-light
        span.text-small Scroll
        span.circle
      span.key.key-light
        span.text-small Power
        span.circle.active
  section.main.col-spacing
    .row
      span.key
        span.lt ~
        span.lb `
        span.rb 巷
      span.key
        span.lt !
        span.lb 1
        span.rt ㄅ
        span.rb 言
      span.key
        span.lt @
        span.lb 2
        span.rt ㄉ
        span.rb 牛
      span.key
        span.lt #
        span.lb 3
        span.rt ˇ
        span.rb 目
      span.key
        span.lt $
        span.lb 4
        span.rt ˋ
        span.rb 四
      span.key
        span.lt %
        span.lb 5
        span.rt ㄓ
        span.rb 王
      span.key
        span.lt ^
        span.lb 6
        span.rt ˊ
        span.rb 門
      span.key
        span.lt &
        span.lb 7
        span.rt ˙
        span.rb 田
      span.key
        span.lt *
        span.lb 8
        span.rt ㄚ
        span.rb 米
      span.key
        span.lt (
        span.lb 9
        span.rt ㄞ
        span.rb 足
      span.key
        span.lt )
        span.lb 0
        span.rt ㄢ
        span.rb 金
      span.key
        span.lt _
        span.lb -
        span.rt ㄦ
        span.rb 鄉
      span.key
        span.lt +
        span.lb =
      span.key
        span.lt |
        span.lb \
        span.rb 鎮
      span.key.key-backspace
        i.fa.fa-long-arrow-left
    .row
      span.key.key-medium Tab 
        i.fa.fa-exchange
      span.key
        span.lt Q
        span.lb 手
        span.rt ㄆ
        span.rb 石
      span.key
        span.lt W
        span.lb 田
        span.rt ㄊ
        span.rb 山
      span.key
        span.lt E
        span.lb 水
        span.rt ㄍ
        span.rb 一
      span.key
        span.lt R
        span.lb 口
        span.rt ㄐ
        span.rb 工
      span.key
        span.lt T
        span.lb 廿
        span.rt ㄔ
        span.rb 系
      span.key
        span.lt Y
        span.lb 卜
        span.rt ㄗ
        span.rb 火
      span.key
        span.lt U
        span.lb 山
        span.rt ㄧ
        span.rb 艸
      span.key
        span.lt I
        span.lb 戈
        span.rt ㄛ
        span.rb 木
      span.key
        span.lt O
        span.lb 人
        span.rt ㄟ
        span.rb 口
      span.key
        span.lt P
        span.lb 心
        span.rt ㄣ
        span.rb 耳
      span.key
        span.lt {
        span.lb [
        span.rb 路
      span.key
        span.lt }
        span.lb ]
        span.rb 街
      span.key.key-medium.key-enter
        span.key Enter 
          i.fa.fa-level-down
    .row
      span.key.key-capslock Caps Lock
      span.key
        span.lt A
        span.lb 曰
        span.rt ㄇ
        span.rb 人
      span.key
        span.lt S
        span.lb 尸
        span.rt ㄋ
        span.rb 革
      span.key
        span.lt D
        span.lb 木
        span.rt ㄎ
        span.rb 曰
      span.key
        span.lt F
        span.lb 火
        span.rt ㄑ
        span.rb 土
      span.key
        span.lt G
        span.lb 土
        span.rt ㄕ
        span.rb 手
      span.key
        span.lt H
        span.lb 竹
        span.rt ㄘ
        span.rb 鳥
      span.key
        span.lt J
        span.lb 十
        span.rt ㄨ
        span.rb 月
      span.key
        span.lt K
        span.lb 大
        span.rt ㄜ
        span.rb 立
      span.key
        span.lt L
        span.lb 中
        span.rt ㄠ
        span.rb 女
      span.key
        span.lt :
        span.lb ;
        span.rt ㄤ
        span.rb 虫
      span.key
        span.lt "
        span.lb '
        span.rb 號
      //- span.key.key-enter-bottom Enter 
        //- i.fa.fa-level-down
    .row
      span.key.key-shift
        i.fa.fa-arrow-up
        |  Shift
      span.key
        span.lt Z
        span.lb 重
        span.rt ㄈ
        span.rb 心
      span.key
        span.lt X
        span.lb 難
        span.rt ㄌ
        span.rb 水
      span.key
        span.lt C
        span.lb 金
        span.rt ㄏ
        span.rb 鹿
      span.key
        span.lt V
        span.lb 女
        span.rt ㄒ
        span.rb 禾
      span.key
        span.lt B
        span.lb 月
        span.rt ㄖ
        span.rb 馬
      span.key
        span.lt N
        span.lb 弓
        span.rt ㄙ
        span.rb 魚
      span.key
        span.lt M
        span.lb 一
        span.rt ㄩ
        span.rb 雨
      span.key
        span.lt <
        span.lb ,
        span.rt ㄝ
        span.rb 力
      span.key
        span.lt >
        span.lb .
        span.rt ㄡ
        span.rb 舟
      span.key
        span.lt ?
        span.lb /
        span.rt ㄥ
        span.rb 竹
      span.key.key-shift
        i.fa.fa-arrow-up
        |  Shift
    .row
      span.key.key-ctrl Ctrl
      span.key.key-win
        i.fa.fa-windows
      span.key.key-alt Alt
      span.key.key-space
      span.key.key-alt Alt
      span.key.key-win
        i.fa.fa-windows
      span.key.key-right-click
        i.fa.fa-list-alt
      span.key.key-ctrl Ctrl
  section.dev.col-spacing
    .row
      span.key.text-small Insert
      span.key.text-small Home
      span.key.text-small Page Up
    .row
      span.key.text-small Delete
      span.key.text-small End
      span.key.text-small Page Down
    .arrow-box
      .row
        span.key
          i.fa.fa-caret-up
      .row
        span.key
          i.fa.fa-caret-left
        span.key
          i.fa.fa-caret-down
        span.key
          i.fa.fa-caret-right
  section.number
    .row
      span.key Num Lock
      span.key /
      span.key *
      span.key -
    .row
      span.key
        span.lt 7
        span.lb.text-small Home
      span.key
        span.lt 8
        span.lb.text-small
          i.fa.fa-long-arrow-up
      span.key
        span.lt 9
        span.lb.text-small PgUp
      span.key.key-long +
    .row
      span.key
        span.lt 4
        span.lb.text-small
          i.fa.fa-long-arrow-left
      span.key 5
      span.key
        span.lt 6
        span.lb.text-small
          i.fa.fa-long-arrow-right
    .row
      span.key
        span.lt 1
        span.lb.text-small End
      span.key
        span.lt 2
        span.lb.text-small
          i.fa.fa-long-arrow-down
      span.key
        span.lt 3
        span.lb.text-small PgDn
      span.key.key-long Enter
        i.fa.fa-level-down
    .row
      span.key.num-0
        span.lt 0
        span.lb.text-small Ins
      span.key
        span.lt .
        span.lb.text-small Del
View Compiled
// $key: (border: #777, cap: #555, cap-side: #444)
// $keyboard: (base: #444, hole: #222, border: #ccc, side: #333)
// $text: (padding: 3px, color: white)
// $light: (base: #333, light: #2196f3)

$key: (border: #bbb, cap: #eee, cap-side: #ddd)
$keyboard: (base: #eee, hole: #888, border: #ccc, side: #aaa)
$text: (padding: 3px, color: #555)
$light: (base: #333, light: #8bc34a)

// $key: (border: #ffac32, cap: white, cap-side: #cc5d5d)
// $keyboard: (base: #f9f0a0, hole: #ff9800, border: #ffc107, side: #78bba3)
// $text: (padding: 3px, color: #78bba3)
// $light: (base: #333, light: #d47ade)

$fillet: 5px
*
  margin: 0
  // outline: 1px solid #fac !important
  box-sizing: border-box
body, html
  background: #ddd
  font-family: 'Ubuntu','微軟正黑體', sans-serif
  font-size: 13px
  height: 100%
  width: 100%
  perspective: 3000px
.title
  text-align: center
  margin-top: 50px
.change
  &_mode
    display: block
    width: 120px
    height: 40px
    border: 2px solid #fff
    background: #eee
    box-shadow: 0 0 0 3px #aaa
    margin: 20px auto
    border-radius: 20px
    position: relative
    & .yes, & .no
      position: absolute
      display: block
      line-height: 40px
      width: 60px
      text-align: center
      font-weight: bold
    & .no
      right: 0
  &_btn
    display: block
    width: 60px
    height: 60px
    border-radius: 50%
    background: #0fa
    border: 3px solid #0ec186
    top: -11px
    position: absolute
    z-index: 1
    cursor: pointer
    &.open
      right: 0
.keyboard-wrap
  width: 1315px
  border-radius: 15px
  background: map-get($keyboard, base)
  padding: 15px
  border: 1px solid map-get($keyboard, border)
  box-shadow: 10px 7px 0px 2px map-get($keyboard, side)
  z-index: 2
  position: absolute
  transform: scale(.8) rotateX(40deg) rotateY(-40deg) rotateZ(40deg) translate(-120%, -50%)
  transform-origin: 50% 50%
  top: 50%
  left: 50%
  transition: .5s
  &.transform
    transform: scale(1) rotateX(0) rotateY(0) rotateZ(0) translate(-50%, -50%)
    box-shadow: 0px 7px 0px 2px map-get($keyboard, side)
  section
    display: inline-block
    vertical-align: top
  .col-spacing
    margin-right: 28px
  .row-spacing
    margin-bottom: 15px
  .text-small
    text-align: center
    font-size: 12px
 
  .arrow-box
    margin-top: 55px
    .row:first-of-type
      span
        margin-left: 64px
    span
      text-align: center
      font-size: 18px
      line-height: 34px
.row
  .key
    color: map-get($text, color)
    background: map-get($key, cap)
    display: inline-block
    border: 1px solid map-get($key, border)
    width: 45px
    height: 45px
    border-radius: $fillet
    padding: map-get($text, padding)
    vertical-align: top
    position: relative
    box-shadow: 0 3px 0 2px map-get($key, cap-side)
    margin-bottom: 10px
    margin-left: 10px
    cursor: pointer
    &::before
      content: ''
      width: 100%
      height: 100%
      background: map-get($keyboard, hole)
      padding: 0 4px 4px 5px
      left: -4px
      bottom: -8px
      border-radius: $fillet
      position: absolute
      z-index: -1
      box-shadow: 0px 1px 0px rgba(white, .4)
    &:active
      // background: map-get($key, cap-side)
      box-shadow: 0 1px 0 1.5px map-get($key, cap-side)
      top: 3px
      &::before
        bottom: -5px
    &-medium
      width: 72.5px
    &-esc
      margin-right: 55px
    &-shift
      width: 127.5px
    &-capslock
      width: 90px
    &-enter
      float: right
      position: relative
      height: 60px
      border-radius: $fillet $fillet 0 0
      &::after
        content: ''
        background: map-get($key, cap)
        position: absolute
        width: 100%
        height: 5px
        right: 0
        bottom: 0
        z-index: 1
      &:active
        &::after
          bottom: 3px
        span.key
          top: 54px
          box-shadow: 0 1px 0 1.5px map-get($key, cap-side)
          &::before
            bottom: -5px
      span.key
        position: absolute
        right: -1px
        top: 54px 
        width: 110px
        font-size: 18px
        border-radius: $fillet 0 $fillet $fillet
    i.fa-level-down
      transform: rotate(90deg)
    &-ctrl
      width: 90px
    &-win
      width: 60px
    &-alt
      width: 68px
    &-space
      width: 249px
    &-right-click
      width: 60px
    &-backspace
      font-size: 15px
      line-height: 40px
      text-align: center
    &-long
      height: 100px
      float: right
      padding-top: 35px
      i
        font-size: 18px
        margin-left: 10px
      &::after
        content: ''
        display: block
        height: 0
        clear: both
    &-light
      text-align: center
      background: none
      box-shadow: none
      border: 0
      cursor: default
      &::before
        display: none
      &:active
        background: none
        box-shadow: none
        top: initial
      .circle
        display: block
        margin: 5px auto
        border-radius: 50%
        width: 6px
        height: 6px
        background: map-get($light, base)
        &.active
          background: map-get($light, light)
          box-shadow: 0px 0px 3px 1px map-get($light, light)
          border: 1px solid rgba(white, .2)
    & span.underline
      text-decoration: underline
    .lt, .lb,.rt , .rb
      position: absolute
    .lb, .rb
      bottom: map-get($text, padding)
    .rt, .rb
      right: map-get($text, padding)
section
  &.top
    .key
      height: 34px
  &.dev
    .key
  &.number
    .key
      &.num-0
        width: 100px
      
View Compiled
$('.change_btn').click ->
  $(this).toggleClass 'open'
  $('.keyboard-wrap').toggleClass 'transform'
View Compiled
Run Pen

External CSS

  1. https://fonts.googleapis.com/css?family=Ubuntu
  2. https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.css

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js