From 34dec6c6aa7e075a7893eb238be091e97c22ba23 Mon Sep 17 00:00:00 2001
From: tangjinzhou <415800467@qq.com>
Date: Tue, 23 Jan 2018 18:55:39 +0800
Subject: [PATCH] fix site

---
 components/avatar/demo/index.vue              |  40 +-
 components/badge/demo/index.vue               |  91 ++-
 components/button/demo/basic.md               |  17 +
 components/button/demo/basic.vue              |  16 +-
 components/button/demo/button-group.vue       |  64 +--
 components/button/demo/disabled.vue           |  24 +-
 components/button/demo/ghost.vue              |  16 +-
 components/button/demo/icon.vue               |  24 +-
 components/button/demo/index.vue              |  29 +-
 components/button/demo/loading.vue            |  24 +-
 components/button/demo/multiple.vue           |  16 +-
 components/button/demo/size.vue               |  46 +-
 components/button/index.zh-CN.md              |  30 +-
 components/checkbox/demo/basic.vue            |   2 +-
 components/checkbox/demo/check-all.vue        |   6 +-
 components/checkbox/demo/controller.vue       |  14 +-
 components/checkbox/demo/disabled.vue         |   4 +-
 components/checkbox/demo/group.vue            |   8 +-
 components/checkbox/demo/layout.vue           |  14 +-
 components/index.js                           |   9 +-
 components/menu/demo/inline-collapsed.vue     |   6 +-
 components/menu/demo/switch-mode.vue          |   4 +-
 components/menu/demo/theme.vue                |   2 +-
 components/popconfirm/demo/basic.vue          |   2 +-
 .../popconfirm/demo/dynamic-trigger.vue       |   2 +-
 components/popconfirm/demo/placement.vue      |  26 +-
 .../popover/demo/arrow-point-at-center.vue    |   6 +-
 components/popover/demo/basic.vue             |   4 +-
 components/popover/demo/control.vue           |   4 +-
 components/popover/demo/placement.vue         |  26 +-
 components/popover/demo/triggerType.vue       |   8 +-
 components/radio/demo/disabled.vue            |   6 +-
 components/rate/demo/index.vue                |   6 +-
 components/tabs/demo/custom-add-trigger.vue   |   4 +-
 components/tabs/demo/extra.vue                |   4 +-
 .../tooltip/demo/arrow-point-at-center.vue    |   6 +-
 .../tooltip/demo/auto-adjust-overflow.vue     |   6 +-
 components/tooltip/demo/placement.vue         |  26 +-
 components/trigger/demo/simple.vue            |  16 +-
 examples/components/demoBox.vue               | 120 ++++
 examples/demo.vue                             |   6 +-
 examples/index.js                             |   8 +
 examples/index.less                           | 131 ++++-
 examples/md.vue                               |   2 +-
 package-lock.json                             | 521 ++++++++++++++++++
 package.json                                  |  10 +-
 site/index.html                               |  12 -
 site/index.js                                 |  17 -
 site/index.less                               |   3 -
 site/md.vue                                   |  24 -
 site/routes.js                                |  11 -
 webpack.base.config.js                        | 144 +++++
 webpack.config.js                             |  55 +-
 webpack.prod.config.js                        | 111 ++--
 54 files changed, 1296 insertions(+), 537 deletions(-)
 create mode 100644 components/button/demo/basic.md
 create mode 100644 examples/components/demoBox.vue
 delete mode 100644 site/index.html
 delete mode 100644 site/index.js
 delete mode 100644 site/index.less
 delete mode 100644 site/md.vue
 delete mode 100644 site/routes.js
 create mode 100644 webpack.base.config.js

diff --git a/components/avatar/demo/index.vue b/components/avatar/demo/index.vue
index a531471b9..6a860c9a5 100644
--- a/components/avatar/demo/index.vue
+++ b/components/avatar/demo/index.vue
@@ -1,42 +1,39 @@
 <template>
   <div>
     <div>
-      <avatar size="large" icon="user"/>
-      <avatar icon="user"/>
-      <avatar size="small" icon="user"/>
+      <a-avatar size="large" icon="user"/>
+      <a-avatar icon="user"/>
+      <a-avatar size="small" icon="user"/>
     </div>
     <br/>
     <div>
-      <avatar shape="square" size="large" icon="user" />
-      <avatar shape="square" icon="user" />
-      <avatar shape="square" size="small" icon="user" />
+      <a-avatar shape="square" size="large" icon="user" />
+      <a-avatar shape="square" icon="user" />
+      <a-avatar shape="square" size="small" icon="user" />
     </div>
     <br/>
     <div>
-      <avatar icon="user" />
-      <avatar>U</avatar>
-      <avatar>USER</avatar>
-      <avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
-      <avatar :styles="{ color: '#f56a00', backgroundColor: '#fde3cf' }">U</avatar>
-      <avatar :styles="{ backgroundColor: '#87d068' }" icon="user" />
+      <a-avatar icon="user" />
+      <a-avatar>U</a-avatar>
+      <a-avatar>USER</a-avatar>
+      <a-avatar src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" />
+      <a-avatar :styles="{ color: '#f56a00', backgroundColor: '#fde3cf' }">U</a-avatar>
+      <a-avatar :styles="{ backgroundColor: '#87d068' }" icon="user" />
     </div>
     <br/>
     <div>
-      <avatar shape="square" size="large" :styles="{'backgroundColor': color}">{{avatarValue}}</avatar>
-      <AntButton @click="changeValue">改变</AntButton>
+      <a-avatar shape="square" size="large" :styles="{'backgroundColor': color}">{{avatarValue}}</a-avatar>
+      <a-button @click="changeValue">改变</a-button>
     </div>
     <br/>
     <div>
-      <Badge count=1><Avatar shape="square" icon="user" /></Badge>
+      <a-badge count=1><a-avatar shape="square" icon="user" /></a-badge>
       <br/>
-      <Badge dot><Avatar shape="square" icon="user" /></Badge>
+      <a-badge dot><a-avatar shape="square" icon="user" /></a-badge>
     </div>
   </div>
 </template>
 <script>
-import '../style'
-import { Avatar, Button, Badge } from 'antd/index'
-
 const UserList = ['U', 'Lucy', 'Tom', 'Edward']
 const colorList = ['#f56a00', '#7265e6', '#ffbf00', '#00a2ae']
 export default {
@@ -53,10 +50,5 @@ export default {
       this.color = index < colorList.length - 1 ? colorList[index + 1] : colorList[0]
     },
   },
-  components: {
-    Avatar,
-    AntButton: Button,
-    Badge,
-  },
 }
 </script>
diff --git a/components/badge/demo/index.vue b/components/badge/demo/index.vue
index 29cffeb04..6aeb8d7ca 100644
--- a/components/badge/demo/index.vue
+++ b/components/badge/demo/index.vue
@@ -2,91 +2,89 @@
   <div>
     基本:
     <div>
-      <Badge count=5>
+      <a-badge count=5>
         <a href="#" class="head-example" />
-      </Badge>
-      <Badge count=0 showZero>
+      </a-badge>
+      <a-badge count=0 showZero>
         <a href="#" class="head-example" />
-      </Badge>
+      </a-badge>
     </div>
     <br>
     独立使用:
     <div>
-      <Badge count=25 />
-      <Badge count=4 :styles="{backgroundColor: '#fff', color: '#999', boxShadow: '0 0 0 1px #d9d9d9 inset'}" />
-      <Badge count=109 :styles= "{backgroundColor: '#52c41a'} " />
+      <a-badge count=25 />
+      <a-badge count=4 :styles="{backgroundColor: '#fff', color: '#999', boxShadow: '0 0 0 1px #d9d9d9 inset'}" />
+      <a-badge count=109 :styles= "{backgroundColor: '#52c41a'} " />
     </div>
     <br>
     封顶数字:
     <div style="margin-top: 10px">
-      <Badge count=99>
+      <a-badge count=99>
         <a href="#" class="head-example" />
-      </Badge>
-      <Badge count=100>
+      </a-badge>
+      <a-badge count=100>
         <a href="#" class="head-example" />
-      </Badge>
-      <Badge count=99 overflowCount=10>
+      </a-badge>
+      <a-badge count=99 overflowCount=10>
         <a href="#" class="head-example" />
-      </Badge>
-      <Badge count=1000 overflowCount=999>
+      </a-badge>
+      <a-badge count=1000 overflowCount=999>
         <a href="#" class="head-example" />
-      </Badge>
+      </a-badge>
     </div>
     <br>
      讨嫌的小红点:
     <div style="margin-top: 10px">
-      <Badge dot>
-        <Icon type="notification" />
-      </Badge>
-      <Badge dot>
+      <a-badge dot>
+        <a-icon type="notification" />
+      </a-badge>
+      <a-badge dot>
         <a href="#">Link something</a>
-      </Badge>
+      </a-badge>
     </div>
     <br>
     状态点:
     <div>
-      <Badge status="success" />
-      <Badge status="error" />
-      <Badge status="default" />
-      <Badge status="processing" />
-      <Badge :status="currentStatus" />
-      <ant-button @click="changeStatus">改processing</ant-button>
+      <a-badge status="success" />
+      <a-badge status="error" />
+      <a-badge status="default" />
+      <a-badge status="processing" />
+      <a-badge :status="currentStatus" />
+      <a-button @click="changeStatus">改processing</a-button>
       <br />
-      <Badge status="success" text="Success" />
+      <a-badge status="success" text="Success" />
       <br />
-      <Badge status="error" text="Error" />
+      <a-badge status="error" text="Error" />
       <br />
-      <Badge status="default" text="Default" />
+      <a-badge status="default" text="Default" />
       <br />
-      <Badge status="processing" text="Processing" />
+      <a-badge status="processing" text="Processing" />
       <br />
-      <Badge status="warning" text="Warning" />
+      <a-badge status="warning" text="Warning" />
     </div>
     <br />
     动态:
     <div>
-      <Badge :count="count">
+      <a-badge :count="count">
         <a href="#" class="head-example" />
-      </Badge>
-      <ant-button @click="changeMinsValue()">
-        <Icon type="minus" />
-      </ant-button>
-      <ant-button @click="changePlusValue(1)">
-        <Icon type="plus" />
-      </ant-button>
+      </a-badge>
+      <a-button @click="changeMinsValue()">
+        <a-icon type="minus" />
+      </a-button>
+      <a-button @click="changePlusValue(1)">
+        <a-icon type="plus" />
+      </a-button>
       <br/>
-      <Badge :dot="isShow">
+      <a-badge :dot="isShow">
         <a href="#" class="head-example" />
-      </Badge>
-      <ant-button @click="changeShow()">toggle</ant-button>
+      </a-badge>
+      <a-button @click="changeShow()">toggle</a-button>
     </div>
     <br />
   </div>
 </template>
 <script>
-import '../style'
 let i = 0
-import { Badge, Button, Icon } from 'antd/index'
 export default {
   data () {
     return {
@@ -120,11 +118,6 @@ export default {
       this.isShow = !this.isShow
     },
   },
-  components: {
-    Badge,
-    AntButton: Button,
-    Icon,
-  },
 }
 </script>
 <style scoped>
diff --git a/components/button/demo/basic.md b/components/button/demo/basic.md
new file mode 100644
index 000000000..4ecf15f1c
--- /dev/null
+++ b/components/button/demo/basic.md
@@ -0,0 +1,17 @@
+::: demo
+<summary>
+  #### 按钮类型
+  按钮有四种类型:主按钮、次按钮、虚线按钮、危险按钮。主按钮在同一个操作区域最多出现一次。
+</summary>
+
+```html
+<template>
+  <div class='test'>
+    <a-button type="primary">Primary</a-button>
+    <a-button>Default</a-button>
+    <a-button type="dashed">Dashed</a-button>
+    <a-button type="danger">Danger</a-button>
+  </div>
+</template>
+```
+:::
diff --git a/components/button/demo/basic.vue b/components/button/demo/basic.vue
index d79bb4641..d2deb5fb8 100644
--- a/components/button/demo/basic.vue
+++ b/components/button/demo/basic.vue
@@ -1,16 +1,8 @@
 <template>
   <div>
-    <AntButton type="primary">Primary</AntButton>
-    <AntButton>Default</AntButton>
-    <AntButton type="dashed">Dashed</AntButton>
-    <AntButton type="danger">Danger</AntButton>
+    <a-button type="primary">Primary</a-button>
+    <a-button>Default</a-button>
+    <a-button type="dashed">Dashed</a-button>
+    <a-button type="danger">Danger</a-button>
   </div>
 </template>
-<script>
-import { Button } from 'antd'
-export default {
-  components: {
-    AntButton: Button,
-  },
-}
-</script>
diff --git a/components/button/demo/button-group.vue b/components/button/demo/button-group.vue
index 8c8d41ea1..678fff8d5 100644
--- a/components/button/demo/button-group.vue
+++ b/components/button/demo/button-group.vue
@@ -1,47 +1,37 @@
 <template>
   <div id="components-button-demo-button-group">
     <h4>Basic</h4>
-    <ButtonGroup>
-      <AntButton>Cancel</AntButton>
-      <AntButton type="primary">OK</AntButton>
-    </ButtonGroup>
-    <ButtonGroup>
-      <AntButton disabled>L</AntButton>
-      <AntButton disabled>M</AntButton>
-      <AntButton disabled>R</AntButton>
-    </ButtonGroup>
-    <ButtonGroup>
-      <AntButton type="primary">L</AntButton>
-      <AntButton>M</AntButton>
-      <AntButton>M</AntButton>
-      <AntButton type="dashed">R</AntButton>
-    </ButtonGroup>
+    <a-button-group>
+      <a-button>Cancel</a-button>
+      <a-button type="primary">OK</a-button>
+    </a-button-group>
+    <a-button-group>
+      <a-button disabled>L</a-button>
+      <a-button disabled>M</a-button>
+      <a-button disabled>R</a-button>
+    </a-button-group>
+    <a-button-group>
+      <a-button type="primary">L</a-button>
+      <a-button>M</a-button>
+      <a-button>M</a-button>
+      <a-button type="dashed">R</a-button>
+    </a-button-group>
 
     <h4>With Icon</h4>
-    <ButtonGroup>
-      <AntButton type="primary">
-        <Icon type="left" />Go back
-      </AntButton>
-      <AntButton type="primary">
-        Go forward<Icon type="right" />
-      </AntButton>
-    </ButtonGroup>
-    <ButtonGroup>
-      <AntButton type="primary" icon="cloud" />
-      <AntButton type="primary" icon="cloud-download" />
-    </ButtonGroup>
+    <a-button-group>
+      <a-button type="primary">
+        <a-icon type="left" />Go back
+      </a-button>
+      <a-button type="primary">
+        Go forward<a-icon type="right" />
+      </a-button>
+    </a-button-group>
+    <a-button-group>
+      <a-button type="primary" icon="cloud" />
+      <a-button type="primary" icon="cloud-download" />
+    </a-button-group>
   </div>
 </template>
-<script>
-import { Button, Icon } from 'antd'
-export default {
-  components: {
-    AntButton: Button,
-    ButtonGroup: Button.Group,
-    Icon,
-  },
-}
-</script>
 <style>
 #components-button-demo-button-group h4 {
   margin: 16px 0;
diff --git a/components/button/demo/disabled.vue b/components/button/demo/disabled.vue
index 1ae12909f..4703665c8 100644
--- a/components/button/demo/disabled.vue
+++ b/components/button/demo/disabled.vue
@@ -1,23 +1,15 @@
 <template>
   <div>
-    <AntButton type="primary">Primary</AntButton>
-    <AntButton type="primary" disabled>Primary(disabled)</AntButton>
+    <a-button type="primary">Primary</a-button>
+    <a-button type="primary" disabled>Primary(disabled)</a-button>
     <br />
-    <AntButton>Default</AntButton>
-    <AntButton disabled>Default(disabled)</AntButton>
+    <a-button>Default</a-button>
+    <a-button disabled>Default(disabled)</a-button>
     <br />
-    <AntButton>Ghost</AntButton>
-    <AntButton disabled>Ghost(disabled)</AntButton>
+    <a-button>Ghost</a-button>
+    <a-button disabled>Ghost(disabled)</a-button>
     <br />
-    <AntButton type="dashed">Dashed</AntButton>
-    <AntButton type="dashed" disabled>Dashed(disabled)</AntButton>
+    <a-button type="dashed">Dashed</a-button>
+    <a-button type="dashed" disabled>Dashed(disabled)</a-button>
   </div>
 </template>
-<script>
-import { Button } from 'antd'
-export default {
-  components: {
-    AntButton: Button,
-  },
-}
-</script>
diff --git a/components/button/demo/ghost.vue b/components/button/demo/ghost.vue
index 3b474225b..1b837f01f 100644
--- a/components/button/demo/ghost.vue
+++ b/components/button/demo/ghost.vue
@@ -1,16 +1,8 @@
 <template>
   <div :style="{ background: 'rgb(190, 200, 200)', padding: '26px 16px 16px' }">
-    <AntButton type="primary" ghost>Primary</AntButton>
-    <AntButton ghost>Default</AntButton>
-    <AntButton type="dashed" ghost>Dashed</AntButton>
-    <AntButton type="danger" ghost>danger</AntButton>
+    <a-button type="primary" ghost>Primary</a-button>
+    <a-button ghost>Default</a-button>
+    <a-button type="dashed" ghost>Dashed</a-button>
+    <a-button type="danger" ghost>danger</a-button>
   </div>
 </template>
-<script>
-import { Button } from 'antd'
-export default {
-  components: {
-    AntButton: Button,
-  },
-}
-</script>
diff --git a/components/button/demo/icon.vue b/components/button/demo/icon.vue
index 471b07a80..758b853c4 100644
--- a/components/button/demo/icon.vue
+++ b/components/button/demo/icon.vue
@@ -1,21 +1,13 @@
 <template>
   <div>
-    <AntButton type="primary" shape="circle" icon="search" />
-    <AntButton type="primary" icon="search">Search</AntButton>
-    <AntButton shape="circle" icon="search" />
-    <AntButton icon="search">Search</AntButton>
+    <a-button type="primary" shape="circle" icon="search" />
+    <a-button type="primary" icon="search">Search</a-button>
+    <a-button shape="circle" icon="search" />
+    <a-button icon="search">Search</a-button>
     <br />
-    <AntButton shape="circle" icon="search" />
-    <AntButton icon="search">Search</AntButton>
-    <AntButton type="dashed" shape="circle" icon="search" />
-    <AntButton type="dashed" icon="search">Search</AntButton>
+    <a-button shape="circle" icon="search" />
+    <a-button icon="search">Search</a-button>
+    <a-button type="dashed" shape="circle" icon="search" />
+    <a-button type="dashed" icon="search">Search</a-button>
   </div>
 </template>
-<script>
-import { Button } from 'antd'
-export default {
-  components: {
-    AntButton: Button,
-  },
-}
-</script>
diff --git a/components/button/demo/index.vue b/components/button/demo/index.vue
index 1c633c5f9..2990c6a85 100644
--- a/components/button/demo/index.vue
+++ b/components/button/demo/index.vue
@@ -1,25 +1,27 @@
 <template>
   <div>
-    <h1>Basic</h1>
+    <md>
+    # Button 按钮
+    按钮用于开始一个即时操作。
+    ## 何时使用
+    标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。
+
+    ## 代码演示
+    </md>
     <Basic />
-    <h1>ButtonGroup</h1>
     <ButtonGroup />
-    <h1>Disabled</h1>
     <Disabled />
-    <h1>Ghost</h1>
     <Ghost />
-    <h1>Icon</h1>
     <Icon />
-    <h1>Loading</h1>
     <Loading />
     <h1>TODO : Multiple</h1>
     <Multiple />
-    <h1>Size</h1>
     <Size />
+    <Doc class="markdown"/>
   </div>
 </template>
 <script>
-import Basic from './basic'
+import Basic from './basic.md'
 import ButtonGroup from './button-group'
 import Disabled from './disabled'
 import Ghost from './ghost'
@@ -27,6 +29,7 @@ import Icon from './icon'
 import Loading from './loading'
 import Multiple from './multiple'
 import Size from './size'
+import Doc from '../index.zh-CN.md'
 export default {
   components: {
     Basic,
@@ -37,6 +40,16 @@ export default {
     Loading,
     Multiple,
     Size,
+    Doc,
   },
 }
 </script>
+<style>
+[id^="components-button-demo-"] .ant-btn {
+  margin-right: 8px;
+  margin-bottom: 12px;
+}
+[id^="components-button-demo-"] .ant-btn-group > .ant-btn {
+  margin-right: 0;
+}
+</style>
diff --git a/components/button/demo/loading.vue b/components/button/demo/loading.vue
index 5e0ec2136..81ce18b3f 100644
--- a/components/button/demo/loading.vue
+++ b/components/button/demo/loading.vue
@@ -1,25 +1,24 @@
 <template>
   <div>
-    <AntButton type="primary" loading>
+    <a-button type="primary" loading>
       Loading
-    </AntButton>
-    <AntButton type="primary" size="small" loading>
+    </a-button>
+    <a-button type="primary" size="small" loading>
       Loading
-    </AntButton>
+    </a-button>
     <br />
-    <AntButton type="primary" :loading="loading" @mouseenter="enterLoading">
+    <a-button type="primary" :loading="loading" @mouseenter="enterLoading">
       mouseenter me!
-    </AntButton>
-    <AntButton type="primary" icon="poweroff" :loading="iconLoading" @click="enterIconLoading">
+    </a-button>
+    <a-button type="primary" icon="poweroff" :loading="iconLoading" @click="enterIconLoading">
       延迟1s
-    </AntButton>
+    </a-button>
     <br />
-    <AntButton shape="circle" loading />
-    <AntButton type="primary" shape="circle" loading />
+    <a-button shape="circle" loading />
+    <a-button type="primary" shape="circle" loading />
   </div>
 </template>
 <script>
-import { Button } from 'antd'
 export default {
   data () {
     return {
@@ -35,8 +34,5 @@ export default {
       this.iconLoading = { delay: 1000 }
     },
   },
-  components: {
-    AntButton: Button,
-  },
 }
 </script>
diff --git a/components/button/demo/multiple.vue b/components/button/demo/multiple.vue
index f27a4fb5e..ab88c92aa 100644
--- a/components/button/demo/multiple.vue
+++ b/components/button/demo/multiple.vue
@@ -1,17 +1,9 @@
 // TODO: 依赖组件开发中
 <template>
   <div>
-    <AntButton type="primary">Primary</AntButton>
-    <AntButton>Default</AntButton>
-    <AntButton type="dashed">Dashed</AntButton>
-    <AntButton type="danger">Danger</AntButton>
+    <a-button type="primary">Primary</a-button>
+    <a-button>Default</a-button>
+    <a-button type="dashed">Dashed</a-button>
+    <a-button type="danger">Danger</a-button>
   </div>
 </template>
-<script>
-import { Button } from 'antd'
-export default {
-  components: {
-    AntButton: Button,
-  },
-}
-</script>
diff --git a/components/button/demo/size.vue b/components/button/demo/size.vue
index 50fafe069..e1e6b65e3 100644
--- a/components/button/demo/size.vue
+++ b/components/button/demo/size.vue
@@ -1,31 +1,30 @@
 <template>
   <div>
-    <RadioGroup :value="size" @change="handleSizeChange">
-      <RadioButton value="large">Large</RadioButton>
-      <RadioButton value="default">Default</RadioButton>
-      <RadioButton value="small">Small</RadioButton>
-    </RadioGroup>
+    <a-radio-group :value="size" @change="handleSizeChange">
+      <a-radio-button value="large">Large</a-radio-button>
+      <a-radio-button value="default">Default</a-radio-button>
+      <a-radio-button value="small">Small</a-radio-button>
+    </a-radio-group>
     <br /><br />
-    <AntButton type="primary" :size="size">Primary</AntButton>
-    <AntButton :size="size">Normal</AntButton>
-    <AntButton type="dashed" :size="size">Dashed</AntButton>
-    <AntButton type="danger" :size="size">Danger</AntButton>
+    <a-button type="primary" :size="size">Primary</a-button>
+    <a-button :size="size">Normal</a-button>
+    <a-button type="dashed" :size="size">Dashed</a-button>
+    <a-button type="danger" :size="size">Danger</a-button>
     <br />
-    <AntButton type="primary" shape="circle" icon="download" :size="size" />
-    <AntButton type="primary" icon="download" :size="size">Download</AntButton>
+    <a-button type="primary" shape="circle" icon="download" :size="size" />
+    <a-button type="primary" icon="download" :size="size">Download</a-button>
     <br />
-    <ButtonGroup :size="size">
-      <AntButton type="primary">
-        <Icon type="left" />Backward
-      </AntButton>
-      <AntButton type="primary">
-        Forward<Icon type="right" />
-      </AntButton>
-    </ButtonGroup>
+    <a-button-group :size="size">
+      <a-button type="primary">
+        <a-icon type="left" />Backward
+      </a-button>
+      <a-button type="primary">
+        Forward<a-icon type="right" />
+      </a-button>
+    </a-button-group>
   </div>
 </template>
 <script>
-import { Button, Radio, Icon } from 'antd'
 export default {
   data () {
     return {
@@ -37,12 +36,5 @@ export default {
       this.size = e.target.value
     },
   },
-  components: {
-    AntButton: Button,
-    ButtonGroup: Button.Group,
-    RadioButton: Radio.Button,
-    RadioGroup: Radio.Group,
-    Icon,
-  },
 }
 </script>
diff --git a/components/button/index.zh-CN.md b/components/button/index.zh-CN.md
index 5c8562658..ddaf6b72e 100644
--- a/components/button/index.zh-CN.md
+++ b/components/button/index.zh-CN.md
@@ -1,16 +1,3 @@
----
-category: Components
-type: General
-title: Button
-subtitle: 按钮
----
-
-按钮用于开始一个即时操作。
-
-## 何时使用
-
-标记了一个(或封装一组)操作命令,响应用户点击行为,触发相应的业务逻辑。
-
 ## API
 
 通过设置 Button 的属性来产生不同的按钮样式,推荐顺序为:`type` -> `shape` -> `size` -> `loading` -> `disabled`
@@ -25,17 +12,12 @@ subtitle: 按钮
 | loading | 设置按钮载入状态 | boolean \| { delay: number } | `false` |
 | shape | 设置按钮形状,可选值为 `circle` 或者不设 | string | - |
 | size | 设置按钮大小,可选值为 `small` `large` 或者不设 | string | `default` |
-| type | 设置按钮类型,可选值为 `primary` `dashed` `danger`(版本 2.7 中增加) 或者不设 | string | - |
-| onClick | `click` 事件的 handler | function | - |
+| type | 设置按钮类型,可选值为 `primary` `dashed` `danger` | string | - |
+
+### 事件
+| 事件名称 | 说明 | 回调参数 |
+| --- | --- | --- |
+| click | `click` 事件的 handler  | function(e) |
 
 `<Button>Hello world!</Button>` 最终会被渲染为 `<button><span>Hello world!</span></button>`,并且除了上表中的属性,其它属性都会直接传到 `<button></button>`。
 
-<style>
-[id^="components-button-demo-"] .ant-btn {
-  margin-right: 8px;
-  margin-bottom: 12px;
-}
-[id^="components-button-demo-"] .ant-btn-group > .ant-btn {
-  margin-right: 0;
-}
-</style>
diff --git a/components/checkbox/demo/basic.vue b/components/checkbox/demo/basic.vue
index 825ff1fd4..f360e66ef 100644
--- a/components/checkbox/demo/basic.vue
+++ b/components/checkbox/demo/basic.vue
@@ -1,6 +1,6 @@
 <template>
   <div>
-    <Checkbox @change="onChange">Checkbox</Checkbox>
+    <a-checkbox @change="onChange">Checkbox</a-checkbox>
   </div>
 </template>
 <script>
diff --git a/components/checkbox/demo/check-all.vue b/components/checkbox/demo/check-all.vue
index 44b6b3e84..db46903e6 100644
--- a/components/checkbox/demo/check-all.vue
+++ b/components/checkbox/demo/check-all.vue
@@ -1,16 +1,16 @@
 <template>
   <div>
     <div :style="{ borderBottom: '1px solid #E9E9E9' }">
-      <Checkbox
+      a-checkbox
         :indeterminate="indeterminate"
         @change="onCheckAllChange"
         :checked="checkAll"
       >
         Check all
-      </Checkbox>
+      </a-checkbox>
     </div>
     <br />
-    <CheckboxGroup :options="plainOptions" v-model="checkedList" @change="onChange" />
+    a-checkboxGroup :options="plainOptions" v-model="checkedList" @change="onChange" />
   </div>
 </template>
 <script>
diff --git a/components/checkbox/demo/controller.vue b/components/checkbox/demo/controller.vue
index d1e1efe14..154a7efec 100644
--- a/components/checkbox/demo/controller.vue
+++ b/components/checkbox/demo/controller.vue
@@ -1,30 +1,30 @@
 <template>
   <div>
     <p :style="{ marginBottom: '20px' }">
-      <Checkbox
+      a-checkbox
         :checked="checked"
         :disabled="disabled"
         @change="onChange"
       >
         {{label}}
-      </Checkbox>
+      </a-checkbox>
     </p>
     <p>
-      <AntButton
+      <a-button
         type="primary"
         size="small"
         @click="toggleChecked"
       >
         {{!checked ? 'Check' : 'Uncheck'}}
-      </AntButton>
-      <AntButton
+      </a-button>
+      <a-button
         :style="{ marginLeft: '10px' }"
         type="primary"
         size="small"
         @click="toggleDisable"
       >
         {{!disabled ? 'Disable' : 'Enable'}}
-      </AntButton>
+      </a-button>
     </p>
   </div>
 </template>
@@ -56,7 +56,7 @@ export default {
   },
   components: {
     Checkbox,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/checkbox/demo/disabled.vue b/components/checkbox/demo/disabled.vue
index 3bcf0837c..fac1e9399 100644
--- a/components/checkbox/demo/disabled.vue
+++ b/components/checkbox/demo/disabled.vue
@@ -1,8 +1,8 @@
 <template>
   <div>
-    <Checkbox :defaultChecked="false" disabled />
+    <a-checkbox :defaultChecked="false" disabled />
     <br />
-    <Checkbox defaultChecked disabled />
+    <a-checkbox defaultChecked disabled />
   </div>
 </template>
 <script>
diff --git a/components/checkbox/demo/group.vue b/components/checkbox/demo/group.vue
index 7a944effa..586f843fa 100644
--- a/components/checkbox/demo/group.vue
+++ b/components/checkbox/demo/group.vue
@@ -1,12 +1,12 @@
 <template>
   <div>
-    <CheckboxGroup :options="plainOptions" v-model="value" @change="onChange" />
+    a-checkboxGroup :options="plainOptions" v-model="value" @change="onChange" />
     <br />
-    <CheckboxGroup :options="plainOptions" :defaultValue="['Apple']" @change="onChange" />
+    a-checkboxGroup :options="plainOptions" :defaultValue="['Apple']" @change="onChange" />
     <br />
-    <CheckboxGroup :options="options" :value="['Pear']" @change="onChange" />
+    a-checkboxGroup :options="options" :value="['Pear']" @change="onChange" />
     <br />
-    <CheckboxGroup :options="optionsWithDisabled" disabled :defaultValue="['Apple']" @change="onChange" />
+    a-checkboxGroup :options="optionsWithDisabled" disabled :defaultValue="['Apple']" @change="onChange" />
   </div>
 </template>
 <script>
diff --git a/components/checkbox/demo/layout.vue b/components/checkbox/demo/layout.vue
index 9da57ce8e..ebc74eef0 100644
--- a/components/checkbox/demo/layout.vue
+++ b/components/checkbox/demo/layout.vue
@@ -1,13 +1,13 @@
 <template>
-  <CheckboxGroup @change="onChange">
+  <a-checkbox-group @change="onChange">
     <AntRow>
-      <AntCol :span="8"><Checkbox value="A">A</Checkbox></AntCol>
-      <AntCol :span="8"><Checkbox value="B">B</Checkbox></AntCol>
-      <AntCol :span="8"><Checkbox value="C">C</Checkbox></AntCol>
-      <AntCol :span="8"><Checkbox value="D">D</Checkbox></AntCol>
-      <AntCol :span="8"><Checkbox value="E">E</Checkbox></AntCol>
+      <AntCol :span="8"><a-checkbox value="A">A</a-checkbox></AntCol>
+      <AntCol :span="8"><a-checkbox value="B">B</a-checkbox></AntCol>
+      <AntCol :span="8"><a-checkbox value="C">C</a-checkbox></AntCol>
+      <AntCol :span="8"><a-checkbox value="D">D</a-checkbox></AntCol>
+      <AntCol :span="8"><a-checkbox value="E">E</a-checkbox></AntCol>
     </AntRow>
-  </CheckboxGroup>
+  </a-checkbox-group>
 </template>
 <script>
 import { Checkbox, Row, Col } from 'antd'
diff --git a/components/index.js b/components/index.js
index 89b5709d7..9ec887a8c 100644
--- a/components/index.js
+++ b/components/index.js
@@ -1,10 +1,15 @@
-export { default as Button } from './button'
+import Button from './button'
+const ButtonGroup = Button.Group
+export { Button, ButtonGroup }
 
 export { default as Checkbox } from './checkbox'
 
 export { default as Icon } from './icon'
 
-export { default as Radio } from './radio'
+import Radio from './radio'
+const RadioGroup = Radio.Group
+const RadioButton = Radio.Button
+export { Radio, RadioGroup, RadioButton }
 
 export { default as Grid } from './grid'
 
diff --git a/components/menu/demo/inline-collapsed.vue b/components/menu/demo/inline-collapsed.vue
index 5737221e6..95f82884a 100644
--- a/components/menu/demo/inline-collapsed.vue
+++ b/components/menu/demo/inline-collapsed.vue
@@ -6,9 +6,9 @@
   你可以在 [Layout](/components/layout/#components-layout-demo-side) 里查看侧边布局结合的完整示例。
   </md>
   <div style="width: 256px">
-    <AntButton type="primary" @click="toggleCollapsed" style="margin-bottom: 16px">
+    <a-button type="primary" @click="toggleCollapsed" style="margin-bottom: 16px">
       <Icon :type="collapsed ? 'menu-unfold' : 'menu-fold'" />
-    </AntButton>
+    </a-button>
     <Menu
       :defaultSelectedKeys="['1']"
       :defaultOpenKeys="['sub1']"
@@ -70,7 +70,7 @@ export default {
     SubMenu,
     MenuItemGroup,
     MenuItem,
-    AntButton: Button,
+
   },
 }
 
diff --git a/components/menu/demo/switch-mode.vue b/components/menu/demo/switch-mode.vue
index 6476270e4..70369031c 100644
--- a/components/menu/demo/switch-mode.vue
+++ b/components/menu/demo/switch-mode.vue
@@ -4,9 +4,9 @@
   ## 切换菜单类型
   展示动态切换模式。
   </md>
-  <Checkbox @change="changeMode" /> Change Mode
+  <a-checkbox @change="changeMode" /> Change Mode
   <span className="ant-divider" style="margin: 0 1em"/>
-  <Checkbox @change="changeTheme" /> Change Theme
+  <a-checkbox @change="changeTheme" /> Change Theme
   <br />
   <br />
   <Menu
diff --git a/components/menu/demo/theme.vue b/components/menu/demo/theme.vue
index f0b66e65e..15352d49d 100644
--- a/components/menu/demo/theme.vue
+++ b/components/menu/demo/theme.vue
@@ -4,7 +4,7 @@
   ## 主题
   内建了两套主题 `light|dark`,默认 `light`。
   </md>
-  <Checkbox @change="changeTheme" /> Change Theme
+  <a-checkbox @change="changeTheme" /> Change Theme
   <br />
   <br />
   <Menu
diff --git a/components/popconfirm/demo/basic.vue b/components/popconfirm/demo/basic.vue
index 95f6bbb29..abe2f96a8 100644
--- a/components/popconfirm/demo/basic.vue
+++ b/components/popconfirm/demo/basic.vue
@@ -23,7 +23,7 @@ export default {
   },
   components: {
     Popconfirm,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/popconfirm/demo/dynamic-trigger.vue b/components/popconfirm/demo/dynamic-trigger.vue
index d2a6a4f40..162a08e5d 100644
--- a/components/popconfirm/demo/dynamic-trigger.vue
+++ b/components/popconfirm/demo/dynamic-trigger.vue
@@ -17,7 +17,7 @@
   </Popconfirm>
   <br />
   <br />
-  Whether directly execute:<Checkbox defaultChecked @change="changeCondition" />
+  Whether directly execute:<a-checkbox defaultChecked @change="changeCondition" />
 </div>
 </template>
 
diff --git a/components/popconfirm/demo/placement.vue b/components/popconfirm/demo/placement.vue
index e635afc17..c1e1a97a5 100644
--- a/components/popconfirm/demo/placement.vue
+++ b/components/popconfirm/demo/placement.vue
@@ -10,21 +10,21 @@
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>TL</AntButton>
+      <a-button>TL</a-button>
     </Popconfirm>
     <Popconfirm placement="top" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>Top</AntButton>
+      <a-button>Top</a-button>
     </Popconfirm>
     <Popconfirm placement="topRight" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>TR</AntButton>
+      <a-button>TR</a-button>
     </Popconfirm>
   </div>
   <div :style="{ width: `${buttonWidth}px`, float: 'left' }">
@@ -33,21 +33,21 @@
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>LT</AntButton>
+      <a-button>LT</a-button>
     </Popconfirm>
     <Popconfirm placement="left" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>Left</AntButton>
+      <a-button>Left</a-button>
     </Popconfirm>
     <Popconfirm placement="leftBottom" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>LB</AntButton>
+      <a-button>LB</a-button>
     </Popconfirm>
   </div>
   <div :style="{ width: `${buttonWidth}px`, marginLeft: `${buttonWidth * 4 + 24 }px`}">
@@ -56,21 +56,21 @@
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>RT</AntButton>
+      <a-button>RT</a-button>
     </Popconfirm>
     <Popconfirm placement="right" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>Right</AntButton>
+      <a-button>Right</a-button>
     </Popconfirm>
     <Popconfirm placement="rightBottom" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>RB</AntButton>
+      <a-button>RB</a-button>
     </Popconfirm>
   </div>
   <div :style="{ marginLeft: `${buttonWidth}px`, clear: 'both', whiteSpace: 'nowrap' }">
@@ -79,21 +79,21 @@
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>BL</AntButton>
+      <a-button>BL</a-button>
     </Popconfirm>
     <Popconfirm placement="bottom" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
           <p>Are you sure delete this task?</p>
           <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>Bottom</AntButton>
+      <a-button>Bottom</a-button>
     </Popconfirm>
     <Popconfirm placement="bottomRight" okText="Yes" cancelText="No" @confirm="confirm">
       <template slot="title">
         <p>Are you sure delete this task?</p>
         <p>Are you sure delete this task?</p>
       </template>
-      <AntButton>BR</AntButton>
+      <a-button>BR</a-button>
     </Popconfirm>
   </div>
 </div>
@@ -114,7 +114,7 @@ export default {
   },
   components: {
     Popconfirm,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/popover/demo/arrow-point-at-center.vue b/components/popover/demo/arrow-point-at-center.vue
index a85de89bc..a05855424 100644
--- a/components/popover/demo/arrow-point-at-center.vue
+++ b/components/popover/demo/arrow-point-at-center.vue
@@ -10,7 +10,7 @@
       <p>Content</p>
     </template>
     <span slot="title">Title</span>
-    <AntButton>Align edge / 边缘对齐</AntButton>
+    <a-button>Align edge / 边缘对齐</a-button>
   </Popover>
   <Popover placement="topLeft" arrowPointAtCenter>
     <template slot="content">
@@ -18,7 +18,7 @@
       <p>Content</p>
     </template>
     <span slot="title">Title</span>
-    <AntButton>Arrow points to center / 箭头指向中心</AntButton>
+    <a-button>Arrow points to center / 箭头指向中心</a-button>
   </Popover>
 </div>
 </template>
@@ -28,7 +28,7 @@ import { Popover, Button } from 'antd'
 export default {
   components: {
     Popover,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/popover/demo/basic.vue b/components/popover/demo/basic.vue
index d15e4dc7e..991b33d11 100644
--- a/components/popover/demo/basic.vue
+++ b/components/popover/demo/basic.vue
@@ -9,7 +9,7 @@
       <p>Content</p>
       <p>Content</p>
     </template>
-    <AntButton type="primary">Hover me</AntButton>
+    <a-button type="primary">Hover me</a-button>
   </Popover>
 </div>
 </template>
@@ -19,7 +19,7 @@ import { Popover, Button } from 'antd'
 export default {
   components: {
     Popover,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/popover/demo/control.vue b/components/popover/demo/control.vue
index c1af76516..52ab814d5 100644
--- a/components/popover/demo/control.vue
+++ b/components/popover/demo/control.vue
@@ -10,7 +10,7 @@
     v-model="visible"
   >
     <a @click="hide" slot="content">Close</a>
-    <AntButton type="primary">Click me</AntButton>
+    <a-button type="primary">Click me</a-button>
   </Popover>
 </div>
 </template>
@@ -31,7 +31,7 @@ export default {
   },
   components: {
     Popover,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/popover/demo/placement.vue b/components/popover/demo/placement.vue
index e2d4077f6..e1a8ef95a 100644
--- a/components/popover/demo/placement.vue
+++ b/components/popover/demo/placement.vue
@@ -13,7 +13,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>TL</AntButton>
+      <a-button>TL</a-button>
     </Popover>
     <Popover placement="top">
       <template slot="content">
@@ -23,7 +23,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>Top</AntButton>
+      <a-button>Top</a-button>
     </Popover>
     <Popover placement="topRight">
       <template slot="content">
@@ -33,7 +33,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>TR</AntButton>
+      <a-button>TR</a-button>
     </Popover>
   </div>
   <div :style="{ width: `${buttonWidth}px`, float: 'left' }">
@@ -45,7 +45,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>LT</AntButton>
+      <a-button>LT</a-button>
     </Popover>
     <Popover placement="left">
       <template slot="content">
@@ -55,7 +55,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>Left</AntButton>
+      <a-button>Left</a-button>
     </Popover>
     <Popover placement="leftBottom">
       <template slot="content">
@@ -65,7 +65,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>LB</AntButton>
+      <a-button>LB</a-button>
     </Popover>
   </div>
   <div :style="{ width: `${buttonWidth}px`, marginLeft: `${buttonWidth * 4 + 24 }px`}">
@@ -77,7 +77,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>RT</AntButton>
+      <a-button>RT</a-button>
     </Popover>
     <Popover placement="right">
       <template slot="content">
@@ -87,7 +87,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>Right</AntButton>
+      <a-button>Right</a-button>
     </Popover>
     <Popover placement="rightBottom">
       <template slot="content">
@@ -97,7 +97,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>RB</AntButton>
+      <a-button>RB</a-button>
     </Popover>
   </div>
   <div :style="{ marginLeft: `${buttonWidth}px`, clear: 'both', whiteSpace: 'nowrap' }">
@@ -109,7 +109,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>BL</AntButton>
+      <a-button>BL</a-button>
     </Popover>
     <Popover placement="bottom">
       <template slot="content">
@@ -119,7 +119,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>Bottom</AntButton>
+      <a-button>Bottom</a-button>
     </Popover>
     <Popover placement="bottomRight">
       <template slot="content">
@@ -129,7 +129,7 @@
       <template slot="title">
         <span>Title</span>
       </template>
-      <AntButton>BR</AntButton>
+      <a-button>BR</a-button>
     </Popover>
   </div>
 </div>
@@ -145,7 +145,7 @@ export default {
   },
   components: {
     Popover,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/popover/demo/triggerType.vue b/components/popover/demo/triggerType.vue
index e8676ae3a..a466cbccb 100644
--- a/components/popover/demo/triggerType.vue
+++ b/components/popover/demo/triggerType.vue
@@ -9,21 +9,21 @@
       <p>Content</p>
       <p>Content</p>
     </template>
-    <AntButton type="primary">Hover me</AntButton>
+    <a-button type="primary">Hover me</a-button>
   </Popover>
   <Popover title="Title" trigger="focus">
     <template slot="content">
       <p>Content</p>
       <p>Content</p>
     </template>
-    <AntButton type="primary">Focus me</AntButton>
+    <a-button type="primary">Focus me</a-button>
   </Popover>
   <Popover title="Title" trigger="click">
     <template slot="content">
       <p>Content</p>
       <p>Content</p>
     </template>
-    <AntButton type="primary">Click me</AntButton>
+    <a-button type="primary">Click me</a-button>
   </Popover>
 </div>
 </template>
@@ -33,7 +33,7 @@ import { Popover, Button } from 'antd'
 export default {
   components: {
     Popover,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/radio/demo/disabled.vue b/components/radio/demo/disabled.vue
index d21f027ac..25c099c59 100644
--- a/components/radio/demo/disabled.vue
+++ b/components/radio/demo/disabled.vue
@@ -4,9 +4,9 @@
     <br />
     <Radio defaultChecked :disabled="disabled">Disabled</Radio>
     <div :style="{ marginTop: 20 }">
-      <AntButton type="primary" @click="toggleDisabled">
+      <a-button type="primary" @click="toggleDisabled">
         Toggle disabled
-      </AntButton>
+      </a-button>
     </div>
   </div>
 </template>
@@ -25,7 +25,7 @@ export default {
   },
   components: {
     Radio,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/rate/demo/index.vue b/components/rate/demo/index.vue
index 141d0ad31..131dc3ed2 100644
--- a/components/rate/demo/index.vue
+++ b/components/rate/demo/index.vue
@@ -8,8 +8,8 @@
     </br>
     默认3颗星
     <Rate v-model="initValue"></Rate>
-    <AntButton type="primary" @click="changeValue">改变</AntButton>
-    <AntButton type="primary" @click="getValue">当前值</AntButton>
+    <a-button type="primary" @click="changeValue">改变</a-button>
+    <a-button type="primary" @click="getValue">当前值</a-button>
     </br>
     只读
     <Rate :value="initValue" :disabled="disabled"></Rate>
@@ -72,7 +72,7 @@ export default {
   components: {
     Rate,
     Icon,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/tabs/demo/custom-add-trigger.vue b/components/tabs/demo/custom-add-trigger.vue
index d90cbb8a5..f991744d7 100644
--- a/components/tabs/demo/custom-add-trigger.vue
+++ b/components/tabs/demo/custom-add-trigger.vue
@@ -1,7 +1,7 @@
 <template>
 <div>
     <div :style="{ marginBottom: '16px' }">
-      <AntButton @click="add">ADD</AntButton>
+      <a-button @click="add">ADD</a-button>
     </div>
     <Tabs
       hideAdd
@@ -63,7 +63,7 @@ export default {
   components: {
     Tabs,
     TabPane: Tabs.TabPane,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/tabs/demo/extra.vue b/components/tabs/demo/extra.vue
index a6da74b9a..33b7bf6b1 100644
--- a/components/tabs/demo/extra.vue
+++ b/components/tabs/demo/extra.vue
@@ -9,7 +9,7 @@
     <TabPane tab="Tab 1" key="1">Content of tab 1</TabPane>
     <TabPane tab="Tab 2" key="2">Content of tab 2</TabPane>
     <TabPane tab="Tab 3" key="3">Content of tab 3</TabPane>
-    <AntButton slot="tabBarExtraContent">Extra Action</AntButton>
+    <a-button slot="tabBarExtraContent">Extra Action</a-button>
   </Tabs>
 </div>
 
@@ -25,7 +25,7 @@ export default {
   components: {
     Tabs,
     TabPane: Tabs.TabPane,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/tooltip/demo/arrow-point-at-center.vue b/components/tooltip/demo/arrow-point-at-center.vue
index 643386649..ce3de704c 100644
--- a/components/tooltip/demo/arrow-point-at-center.vue
+++ b/components/tooltip/demo/arrow-point-at-center.vue
@@ -5,10 +5,10 @@
 设置了 `arrowPointAtCenter` 后,箭头将指向目标元素的中心。
 </md>
   <Tooltip placement="topLeft" title="Prompt Text">
-    <AntButton>Align edge / 边缘对齐</AntButton>
+    <a-button>Align edge / 边缘对齐</a-button>
   </Tooltip>
   <Tooltip placement="topLeft" title="Prompt Text" arrowPointAtCenter>
-    <AntButton>Arrow points to center / 箭头指向中心</AntButton>
+    <a-button>Arrow points to center / 箭头指向中心</a-button>
   </Tooltip>
 </div>
 </template>
@@ -18,7 +18,7 @@ import { Tooltip, Button } from 'antd'
 export default {
   components: {
     Tooltip,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/tooltip/demo/auto-adjust-overflow.vue b/components/tooltip/demo/auto-adjust-overflow.vue
index 585815999..d53416155 100644
--- a/components/tooltip/demo/auto-adjust-overflow.vue
+++ b/components/tooltip/demo/auto-adjust-overflow.vue
@@ -6,11 +6,11 @@
   </md>
   <div :style="wrapStyles">
     <Tooltip placement="left" title="Prompt Text" :getPopupContainer="getPopupContainer">
-      <AntButton>Adjust automatically / 自动调整</AntButton>
+      <a-button>Adjust automatically / 自动调整</a-button>
     </Tooltip>
     <br />
     <Tooltip placement="left" title="Prompt Text" :getPopupContainer="getPopupContainer" :autoAdjustOverflow="false">
-      <AntButton>Ingore / 不处理</AntButton>
+      <a-button>Ingore / 不处理</a-button>
     </Tooltip>
   </div>
 </div>
@@ -37,7 +37,7 @@ export default {
   },
   components: {
     Tooltip,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/tooltip/demo/placement.vue b/components/tooltip/demo/placement.vue
index 36aec0438..8454fa8d6 100644
--- a/components/tooltip/demo/placement.vue
+++ b/components/tooltip/demo/placement.vue
@@ -9,19 +9,19 @@
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>TL</AntButton>
+      <a-button>TL</a-button>
     </Tooltip>
     <Tooltip placement="top">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>Top</AntButton>
+      <a-button>Top</a-button>
     </Tooltip>
     <Tooltip placement="topRight">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>TR</AntButton>
+      <a-button>TR</a-button>
     </Tooltip>
   </div>
   <div :style="{ width: `${buttonWidth}px`, float: 'left' }">
@@ -29,19 +29,19 @@
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>LT</AntButton>
+      <a-button>LT</a-button>
     </Tooltip>
     <Tooltip placement="left">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>Left</AntButton>
+      <a-button>Left</a-button>
     </Tooltip>
     <Tooltip placement="leftBottom">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>LB</AntButton>
+      <a-button>LB</a-button>
     </Tooltip>
   </div>
   <div :style="{ width: `${buttonWidth}px`, marginLeft: `${buttonWidth * 4 + 24 }px`}">
@@ -49,19 +49,19 @@
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>RT</AntButton>
+      <a-button>RT</a-button>
     </Tooltip>
     <Tooltip placement="right">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>Right</AntButton>
+      <a-button>Right</a-button>
     </Tooltip>
     <Tooltip placement="rightBottom">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>RB</AntButton>
+      <a-button>RB</a-button>
     </Tooltip>
   </div>
   <div :style="{ marginLeft: `${buttonWidth}px`, clear: 'both', whiteSpace: 'nowrap' }">
@@ -69,19 +69,19 @@
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>BL</AntButton>
+      <a-button>BL</a-button>
     </Tooltip>
     <Tooltip placement="bottom">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>Bottom</AntButton>
+      <a-button>Bottom</a-button>
     </Tooltip>
     <Tooltip placement="bottomRight">
       <template slot="title">
         <span>prompt text</span>
       </template>
-      <AntButton>BR</AntButton>
+      <a-button>BR</a-button>
     </Tooltip>
   </div>
 </div>
@@ -97,7 +97,7 @@ export default {
   },
   components: {
     Tooltip,
-    AntButton: Button,
+
   },
 }
 </script>
diff --git a/components/trigger/demo/simple.vue b/components/trigger/demo/simple.vue
index b6ff2b3a2..10287e047 100644
--- a/components/trigger/demo/simple.vue
+++ b/components/trigger/demo/simple.vue
@@ -159,7 +159,7 @@ export default {
         </label>
         &nbsp;&nbsp;&nbsp;&nbsp;
         <label>
-          <Checkbox
+          a-checkbox
             value='rc-trigger-popup-zoom'
             onChange={this.onTransitionChange}
             checked={state.transitionName === 'rc-trigger-popup-zoom'}
@@ -172,7 +172,7 @@ export default {
         trigger:
 
         <label>
-          <Checkbox
+          a-checkbox
             value='hover'
             checked={!!trigger.hover}
             onChange={this.onTriggerChange}
@@ -180,7 +180,7 @@ export default {
           hover
         </label>
         <label>
-          <Checkbox
+          a-checkbox
             value='focus'
             checked={!!trigger.focus}
             onChange={this.onTriggerChange}
@@ -188,7 +188,7 @@ export default {
           focus
         </label>
         <label>
-          <Checkbox
+          a-checkbox
             value='click'
             checked={!!trigger.click}
             onChange={this.onTriggerChange}
@@ -196,7 +196,7 @@ export default {
           click
         </label>
         <label>
-          <Checkbox
+          a-checkbox
             value='contextMenu'
             checked={!!trigger.contextMenu}
             onChange={this.onTriggerChange}
@@ -205,7 +205,7 @@ export default {
         </label>
         &nbsp;&nbsp;&nbsp;&nbsp;
         <label>
-          <Checkbox
+          a-checkbox
             checked={!!state.destroyPopupOnHide}
             onChange={this.handleDestroyPopupOnHide}
           />
@@ -214,7 +214,7 @@ export default {
 
         &nbsp;&nbsp;&nbsp;&nbsp;
         <label>
-          <Checkbox
+          a-checkbox
             checked={!!state.mask}
             onChange={this.onMask}
           />
@@ -223,7 +223,7 @@ export default {
 
         &nbsp;&nbsp;&nbsp;&nbsp;
         <label>
-          <Checkbox
+          a-checkbox
             checked={!!state.maskClosable}
             onChange={this.onMaskClosable}
           />
diff --git a/examples/components/demoBox.vue b/examples/components/demoBox.vue
new file mode 100644
index 000000000..225100586
--- /dev/null
+++ b/examples/components/demoBox.vue
@@ -0,0 +1,120 @@
+<template>
+  <div class="box box-demo">
+    <slot name="component"></slot>
+    <div class="box-demo-description">
+      <slot name="description"></slot>
+      <span class="btn-toggle" :class="{open: isOpen}" @click="toggle"><i class="anticon anticon-down-circle-o"></i></span>
+    </div>
+    <transition appear :css="false" @enter="enter" @leave="leave">
+      <div class="box-demo-code" v-show="isOpen">
+        <slot name="code"></slot>
+      </div>
+    </transition>
+  </div>
+</template>
+<script>
+import animate from 'antd/_util/openAnimation'
+export default {
+  name: 'demoBox',
+  props: {
+    jsfiddle: Object,
+  },
+  data () {
+    return {
+      isOpen: false,
+    }
+  },
+  methods: {
+    toggle () {
+      this.isOpen = !this.isOpen
+    },
+    enter: animate.enter,
+    leave: animate.leave,
+  },
+}
+</script>
+<style scoped lang="less">
+.box-demo{
+  padding: 0;
+  border: 1px solid #e9e9e9;
+  border-radius: 4px;
+  box-shadow: none;
+  margin-top: 20px;
+  margin-bottom: 20px;
+}
+.box-demo-show{
+  padding: 20px 25px 30px;
+  border-bottom: 1px solid #e9e9e9;
+}
+.box-demo-description{
+  position: relative;
+  padding: 17px 16px 15px 20px;
+  border-radius: 0 0 6px 6px;
+  -webkit-transition: background-color 0.4s ease;
+  transition: background-color 0.4s ease;
+  width: 100%;
+  font-size: 12px;
+  &.bordered{
+    border-bottom: 1px dashed #e9e9e9;
+  }
+  h3, h4{
+    position: absolute;
+    top: -14px;
+    padding: 1px 8px;
+    margin-left: -8px;
+    margin-top: 0;
+    margin-bottom: 0;
+    color: #777;
+    border-radius: 4px;
+    border-top-left-radius: 0;
+    background: #fff;
+    -webkit-transition: background-color 0.4s ease;
+    transition: background-color 0.4s ease;
+    .header-anchor{
+      display: none;
+    }
+  }
+  li{
+    line-height: 21px;
+  }
+}
+.box-demo-code{
+  -webkit-transition: height .2s ease-in-out;
+  transition: height .2s ease-in-out;
+  overflow: auto;
+  border-top: 1px dashed #e9e9e9;
+  pre {
+    margin: 0;
+  }
+  code{
+    margin: 0;
+    background: #f7f7f7;
+    padding: .2em .4em;
+    border-radius: 3px;
+    font-size: .9em;
+    border: 1px solid #eee;
+  }
+}
+.btn-toggle{
+  position: absolute;
+  right: 16px;
+  bottom: 17px;
+  cursor: pointer;
+  width: 18px;
+  height: 18px;
+  font-size: 18px;
+  line-height: 18px;
+  color: #999;
+  i{
+    -webkit-transition: all 0.3s;
+    transition: all 0.3s;
+  }
+  &.open{
+    i{
+      -webkit-transform: rotate(-180deg);
+      -ms-transform: rotate(-180deg);
+      transform: rotate(-180deg);
+    }
+  }
+}
+</style>
diff --git a/examples/demo.vue b/examples/demo.vue
index 39665deb0..5c70385e2 100644
--- a/examples/demo.vue
+++ b/examples/demo.vue
@@ -3,15 +3,11 @@ import { Menu } from 'antd'
 import * as AllDemo from './demo'
 const MenuItem = Menu.Item
 export default {
-  data () {
-    console.log('routes', this.$route.params)
-    return {}
-  },
   render () {
     const { name, demo } = this.$route.params // eslint-disable-line
     const Demo = AllDemo[name]
     return (
-      <div class='site'>
+      <div class='site page-container'>
         <Menu class='nav' selectedKeys={[name]}>
           {Object.keys(AllDemo).map(d => <MenuItem key={d}>
             <router-link to={{ path: `/components/${d}` }}>{d}</router-link>
diff --git a/examples/index.js b/examples/index.js
index cf1f9a502..407c359ed 100644
--- a/examples/index.js
+++ b/examples/index.js
@@ -1,11 +1,19 @@
 import 'antd/style.js'
 import './index.less'
+import 'highlight.js/styles/solarized-light.css'
 import Vue from 'vue'
 import VueRouter from 'vue-router'
 import routes from './routes'
 import Md from './md'
+import * as Components from '../components/index'
+import demoBox from './components/demoBox'
 Vue.use(VueRouter)
 Vue.component(Md.name, Md)
+Vue.component('demo-box', demoBox)
+Object.keys(Components).forEach(k => {
+  const name = `a${k.replace(/([A-Z])/g, '-$1').toLowerCase()}`
+  Vue.component(name, Components[k])
+})
 
 const router = new VueRouter({
   mode: 'hash',
diff --git a/examples/index.less b/examples/index.less
index 4536ba98e..5469c2e81 100644
--- a/examples/index.less
+++ b/examples/index.less
@@ -1,12 +1,135 @@
 #app {
 }
-.site{
+.site {
   display: flex;
-  .nav{
+  .nav {
     width: 200px;
   }
-  .content{
+  .content {
     flex: 1;
     padding: 20px;
   }
-}
\ No newline at end of file
+}
+.code-section,
+.box-demo + summary {
+  display: none;
+}
+.highlight > .code-section {
+  display: block;
+  margin: 0;
+}
+
+.main-wrapper {
+  background: #fff;
+  width: 92%;
+  margin: 0 auto;
+  border-radius: 4px;
+  overflow: hidden;
+  padding: 24px 0 0;
+  margin-bottom: 24px;
+  position: relative;
+}
+
+.main-container {
+  padding: 0 6% 120px 4% !important;
+  margin-left: -1px;
+  min-height: 500px;
+  border-left: 1px solid #e9e9e9;
+}
+
+.page-container {
+  /*color: #666;*/
+  font-size: 14px;
+  line-height: 1.5;
+
+  .table {
+      font-size: 13px;
+      border-collapse: collapse;
+      border-spacing: 0px;
+      empty-cells: show;
+      border: 1px solid #e9e9e9;
+      width: 100%;
+      margin: 16px 0;
+
+      th{
+          background: #F7F7F7;
+          white-space: nowrap;
+          color: #5C6B77;
+          font-weight: 600;
+      }
+      td:first-child {
+          background: #fcfcfc;
+          font-weight: 500;
+          width: 20%;
+          font-family: "Lucida Console", Consolas, Menlo, Courier, monospace;
+      }
+      th,td{
+          border: 1px solid #e9e9e9;
+          padding: 8px 16px;
+          text-align: left;
+      }
+  }
+}
+
+.code-boxes-col-2-1 {
+  display: inline-block;
+  vertical-align: top;
+  padding: 0 8px;
+}
+
+.aside-container {
+  padding-bottom: 50px;
+}
+
+.aside-container .ant-menu-item a, .aside-container .ant-menu-submenu-name span, .aside-container > .ant-menu-item {
+  font-size: 14px;
+  text-overflow: ellipsis;
+  overflow: hidden;
+}
+
+.header-anchor {
+  margin-left: -18px;
+}
+
+.markdown {
+  & > ul{
+      margin-top: 1rem;
+      margin-bottom: 1rem;
+      & > li {
+          list-style: circle;
+          margin-left: 1rem;
+      }
+  }
+  h1, h2, h3{
+      a{
+          font-size: .8em;
+          opacity: 0;
+          font-weight: normal;
+          transition: opacity .2s ease-in-out;
+      }
+
+      &:hover a {
+          opacity: 1;
+      }
+  }
+  blockquote {
+      font-size: 90%;
+      color: #999;
+      border-left: 4px solid #e9e9e9;
+      padding-left: 0.8em;
+      margin: 1em 0;
+  }
+  code {
+      margin: 0;
+      background: #f7f7f7;
+      padding: .2em .4em;
+      border-radius: 3px;
+      font-size: .9em;
+      border: 1px solid #eee;
+  }
+
+  & > p, & > pre {
+      margin-top: 1rem;
+      margin-bottom: 1rem;
+  }
+}
diff --git a/examples/md.vue b/examples/md.vue
index c907d5dda..08e147819 100644
--- a/examples/md.vue
+++ b/examples/md.vue
@@ -1,5 +1,5 @@
 <template>
-  <div style="padding: 10px 0;" v-html="marked($slots.default[0].text.trim() || '')" />
+  <div v-html="marked($slots.default[0].text.trim() || '')" />
 </template>
 <script>
 import marked from 'marked'
diff --git a/package-lock.json b/package-lock.json
index 030f137e2..1cff8caae 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -135,6 +135,53 @@
                 }
             }
         },
+        "@types/node": {
+            "version": "9.3.0",
+            "resolved": "http://registry.npm.taobao.org/@types/node/download/@types/node-9.3.0.tgz",
+            "integrity": "sha1-OhKc2nxOXfJAlwJiaJLLS5ZUbdU=",
+            "dev": true
+        },
+        "@types/tapable": {
+            "version": "0.2.4",
+            "resolved": "http://registry.npm.taobao.org/@types/tapable/download/@types/tapable-0.2.4.tgz",
+            "integrity": "sha1-gYGiKNpGGFQ5MA5gDFrjs7OYJYU=",
+            "dev": true
+        },
+        "@types/uglify-js": {
+            "version": "2.6.30",
+            "resolved": "http://registry.npm.taobao.org/@types/uglify-js/download/@types/uglify-js-2.6.30.tgz",
+            "integrity": "sha1-JX0rbdhmc9YNpHZoD7qQ8uMMbu8=",
+            "dev": true,
+            "requires": {
+                "source-map": "0.6.1"
+            },
+            "dependencies": {
+                "source-map": {
+                    "version": "0.6.1",
+                    "resolved": "http://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz",
+                    "integrity": "sha1-dHIq8y6WFOnCh6jQu95IteLxomM=",
+                    "dev": true
+                }
+            }
+        },
+        "@types/webpack": {
+            "version": "3.8.3",
+            "resolved": "http://registry.npm.taobao.org/@types/webpack/download/@types/webpack-3.8.3.tgz",
+            "integrity": "sha1-klAanH5BpWCqmzVDRXaLc0jYB2Q=",
+            "dev": true,
+            "requires": {
+                "@types/node": "9.3.0",
+                "@types/tapable": "0.2.4",
+                "@types/uglify-js": "2.6.30"
+            }
+        },
+        "abab": {
+            "version": "1.0.4",
+            "resolved": "http://registry.npm.taobao.org/abab/download/abab-1.0.4.tgz",
+            "integrity": "sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4=",
+            "dev": true,
+            "optional": true
+        },
         "abbrev": {
             "version": "1.0.9",
             "resolved": "http://10.134.27.134:7001/abbrev/download/abbrev-1.0.9.tgz",
@@ -173,6 +220,25 @@
                 }
             }
         },
+        "acorn-globals": {
+            "version": "1.0.9",
+            "resolved": "http://registry.npm.taobao.org/acorn-globals/download/acorn-globals-1.0.9.tgz",
+            "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=",
+            "dev": true,
+            "optional": true,
+            "requires": {
+                "acorn": "2.7.0"
+            },
+            "dependencies": {
+                "acorn": {
+                    "version": "2.7.0",
+                    "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-2.7.0.tgz",
+                    "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+                    "dev": true,
+                    "optional": true
+                }
+            }
+        },
         "acorn-jsx": {
             "version": "3.0.1",
             "resolved": "http://r.cnpmjs.org/acorn-jsx/download/acorn-jsx-3.0.1.tgz",
@@ -1843,6 +1909,20 @@
             "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
             "dev": true
         },
+        "cheerio": {
+            "version": "1.0.0-rc.2",
+            "resolved": "http://registry.npm.taobao.org/cheerio/download/cheerio-1.0.0-rc.2.tgz",
+            "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
+            "dev": true,
+            "requires": {
+                "css-select": "1.2.0",
+                "dom-serializer": "0.1.0",
+                "entities": "1.1.1",
+                "htmlparser2": "3.9.2",
+                "lodash": "4.17.4",
+                "parse5": "3.0.3"
+            }
+        },
         "chokidar": {
             "version": "1.7.0",
             "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz",
@@ -2614,6 +2694,22 @@
                 "source-map": "0.5.7"
             }
         },
+        "cssom": {
+            "version": "0.3.2",
+            "resolved": "http://registry.npm.taobao.org/cssom/download/cssom-0.3.2.tgz",
+            "integrity": "sha1-uANhcMefB6kP8vFuIihAJ6JDhIs=",
+            "dev": true
+        },
+        "cssstyle": {
+            "version": "0.2.37",
+            "resolved": "http://registry.npm.taobao.org/cssstyle/download/cssstyle-0.2.37.tgz",
+            "integrity": "sha1-VBCXI0yyUTyDzu06zdwn/yeYfVQ=",
+            "dev": true,
+            "optional": true,
+            "requires": {
+                "cssom": "0.3.2"
+            }
+        },
         "currently-unhandled": {
             "version": "0.4.1",
             "resolved": "http://10.134.27.134:7001/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
@@ -3804,6 +3900,29 @@
                 "is-extglob": "1.0.0"
             }
         },
+        "extract-text-webpack-plugin": {
+            "version": "3.0.2",
+            "resolved": "http://registry.npm.taobao.org/extract-text-webpack-plugin/download/extract-text-webpack-plugin-3.0.2.tgz",
+            "integrity": "sha1-XwQ+qgL5dQqSWLeMCm4NwUCPsvc=",
+            "dev": true,
+            "requires": {
+                "async": "2.6.0",
+                "loader-utils": "1.1.0",
+                "schema-utils": "0.3.0",
+                "webpack-sources": "1.1.0"
+            },
+            "dependencies": {
+                "async": {
+                    "version": "2.6.0",
+                    "resolved": "http://registry.npm.taobao.org/async/download/async-2.6.0.tgz",
+                    "integrity": "sha1-YaKau2/MAm/qd+VtHG7FOnlZUfQ=",
+                    "dev": true,
+                    "requires": {
+                        "lodash": "4.17.4"
+                    }
+                }
+            }
+        },
         "extract-zip": {
             "version": "1.6.6",
             "resolved": "https://registry.npm.taobao.org/extract-zip/download/extract-zip-1.6.6.tgz",
@@ -5490,6 +5609,12 @@
             "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
             "dev": true
         },
+        "highlight.js": {
+            "version": "9.12.0",
+            "resolved": "http://registry.npm.taobao.org/highlight.js/download/highlight.js-9.12.0.tgz",
+            "integrity": "sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4=",
+            "dev": true
+        },
         "hmac-drbg": {
             "version": "1.0.1",
             "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
@@ -6575,6 +6700,46 @@
             "dev": true,
             "optional": true
         },
+        "jsdom": {
+            "version": "7.2.2",
+            "resolved": "http://registry.npm.taobao.org/jsdom/download/jsdom-7.2.2.tgz",
+            "integrity": "sha1-QLQCdwwr2iNGkJa+6Rq2deOx/G4=",
+            "dev": true,
+            "optional": true,
+            "requires": {
+                "abab": "1.0.4",
+                "acorn": "2.7.0",
+                "acorn-globals": "1.0.9",
+                "cssom": "0.3.2",
+                "cssstyle": "0.2.37",
+                "escodegen": "1.8.1",
+                "nwmatcher": "1.4.3",
+                "parse5": "1.5.1",
+                "request": "2.83.0",
+                "sax": "1.2.4",
+                "symbol-tree": "3.2.2",
+                "tough-cookie": "2.3.3",
+                "webidl-conversions": "2.0.1",
+                "whatwg-url-compat": "0.6.5",
+                "xml-name-validator": "2.0.1"
+            },
+            "dependencies": {
+                "acorn": {
+                    "version": "2.7.0",
+                    "resolved": "http://registry.npm.taobao.org/acorn/download/acorn-2.7.0.tgz",
+                    "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=",
+                    "dev": true,
+                    "optional": true
+                },
+                "parse5": {
+                    "version": "1.5.1",
+                    "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-1.5.1.tgz",
+                    "integrity": "sha1-m387DeMr543CQBsXVzzK8Pb1nZQ=",
+                    "dev": true,
+                    "optional": true
+                }
+            }
+        },
         "jsesc": {
             "version": "1.3.0",
             "resolved": "http://registry.npm.sogou/jsesc/download/jsesc-1.3.0.tgz",
@@ -7119,6 +7284,15 @@
                 "type-check": "0.3.2"
             }
         },
+        "linkify-it": {
+            "version": "2.0.3",
+            "resolved": "http://registry.npm.taobao.org/linkify-it/download/linkify-it-2.0.3.tgz",
+            "integrity": "sha1-2UpGSPmxwXnWT6lykSaL22zpQ08=",
+            "dev": true,
+            "requires": {
+                "uc.micro": "1.0.3"
+            }
+        },
         "load-json-file": {
             "version": "1.1.0",
             "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
@@ -7466,6 +7640,34 @@
             "integrity": "sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg=",
             "dev": true
         },
+        "markdown-it": {
+            "version": "8.4.0",
+            "resolved": "http://registry.npm.taobao.org/markdown-it/download/markdown-it-8.4.0.tgz",
+            "integrity": "sha1-4kAIgb8XH3AY7RvZ2kQdrIr2MG0=",
+            "dev": true,
+            "requires": {
+                "argparse": "1.0.9",
+                "entities": "1.1.1",
+                "linkify-it": "2.0.3",
+                "mdurl": "1.0.1",
+                "uc.micro": "1.0.3"
+            }
+        },
+        "markdown-it-anchor": {
+            "version": "4.0.0",
+            "resolved": "http://registry.npm.taobao.org/markdown-it-anchor/download/markdown-it-anchor-4.0.0.tgz",
+            "integrity": "sha1-6H+1VD4BllrfcVBsa/ewSRhBt+M=",
+            "dev": true,
+            "requires": {
+                "string": "3.3.3"
+            }
+        },
+        "markdown-it-container": {
+            "version": "2.0.0",
+            "resolved": "http://registry.npm.taobao.org/markdown-it-container/download/markdown-it-container-2.0.0.tgz",
+            "integrity": "sha1-ABm0P9Au7+zi8ZYKKJX7qBpARpU=",
+            "dev": true
+        },
         "markdown-table": {
             "version": "1.1.1",
             "resolved": "https://registry.npm.taobao.org/markdown-table/download/markdown-table-1.1.1.tgz",
@@ -7522,6 +7724,12 @@
                 "unist-util-visit": "1.3.0"
             }
         },
+        "mdurl": {
+            "version": "1.0.1",
+            "resolved": "http://registry.npm.taobao.org/mdurl/download/mdurl-1.0.1.tgz",
+            "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=",
+            "dev": true
+        },
         "media-typer": {
             "version": "0.3.0",
             "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
@@ -8016,6 +8224,13 @@
             "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
             "dev": true
         },
+        "nwmatcher": {
+            "version": "1.4.3",
+            "resolved": "http://registry.npm.taobao.org/nwmatcher/download/nwmatcher-1.4.3.tgz",
+            "integrity": "sha1-ZDSOOz2A8DW0CsEVY9J4+LctuJw=",
+            "dev": true,
+            "optional": true
+        },
         "oauth-sign": {
             "version": "0.8.2",
             "resolved": "http://10.134.27.134:7001/oauth-sign/download/oauth-sign-0.8.2.tgz",
@@ -8402,6 +8617,15 @@
                 "error-ex": "1.3.1"
             }
         },
+        "parse5": {
+            "version": "3.0.3",
+            "resolved": "http://registry.npm.taobao.org/parse5/download/parse5-3.0.3.tgz",
+            "integrity": "sha1-BC95L/3TaFFVHPTp4Gazh0q0W1w=",
+            "dev": true,
+            "requires": {
+                "@types/node": "9.3.0"
+            }
+        },
         "parsejson": {
             "version": "0.0.3",
             "resolved": "https://registry.npm.taobao.org/parsejson/download/parsejson-0.0.3.tgz",
@@ -11360,6 +11584,12 @@
             "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=",
             "dev": true
         },
+        "string": {
+            "version": "3.3.3",
+            "resolved": "http://registry.npm.taobao.org/string/download/string-3.3.3.tgz",
+            "integrity": "sha1-XqIRzZLSKOGEKUmQpsyXs2anfLA=",
+            "dev": true
+        },
         "string_decoder": {
             "version": "1.0.3",
             "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
@@ -11868,6 +12098,13 @@
                 "whet.extend": "0.9.9"
             }
         },
+        "symbol-tree": {
+            "version": "3.2.2",
+            "resolved": "http://registry.npm.taobao.org/symbol-tree/download/symbol-tree-3.2.2.tgz",
+            "integrity": "sha1-rifbOPZgp64uHDt9G8KQgZuFGeY=",
+            "dev": true,
+            "optional": true
+        },
         "table": {
             "version": "4.0.2",
             "resolved": "https://registry.npm.taobao.org/table/download/table-4.0.2.tgz",
@@ -12128,6 +12365,138 @@
                 "punycode": "1.4.1"
             }
         },
+        "tr46": {
+            "version": "0.0.3",
+            "resolved": "http://registry.npm.taobao.org/tr46/download/tr46-0.0.3.tgz",
+            "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=",
+            "dev": true,
+            "optional": true
+        },
+        "transliteration": {
+            "version": "1.6.2",
+            "resolved": "http://registry.npm.taobao.org/transliteration/download/transliteration-1.6.2.tgz",
+            "integrity": "sha1-M1yRv3DzshG7gejQOZKyB4wNrJY=",
+            "dev": true,
+            "requires": {
+                "yargs": "8.0.2"
+            },
+            "dependencies": {
+                "camelcase": {
+                    "version": "4.1.0",
+                    "resolved": "http://registry.npm.taobao.org/camelcase/download/camelcase-4.1.0.tgz",
+                    "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+                    "dev": true
+                },
+                "cliui": {
+                    "version": "3.2.0",
+                    "resolved": "http://registry.npm.taobao.org/cliui/download/cliui-3.2.0.tgz",
+                    "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+                    "dev": true,
+                    "requires": {
+                        "string-width": "1.0.2",
+                        "strip-ansi": "3.0.1",
+                        "wrap-ansi": "2.1.0"
+                    },
+                    "dependencies": {
+                        "string-width": {
+                            "version": "1.0.2",
+                            "resolved": "http://registry.npm.taobao.org/string-width/download/string-width-1.0.2.tgz",
+                            "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+                            "dev": true,
+                            "requires": {
+                                "code-point-at": "1.1.0",
+                                "is-fullwidth-code-point": "1.0.0",
+                                "strip-ansi": "3.0.1"
+                            }
+                        }
+                    }
+                },
+                "is-fullwidth-code-point": {
+                    "version": "1.0.0",
+                    "resolved": "http://registry.npm.taobao.org/is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz",
+                    "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+                    "dev": true,
+                    "requires": {
+                        "number-is-nan": "1.0.1"
+                    }
+                },
+                "load-json-file": {
+                    "version": "2.0.0",
+                    "resolved": "http://registry.npm.taobao.org/load-json-file/download/load-json-file-2.0.0.tgz",
+                    "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
+                    "dev": true,
+                    "requires": {
+                        "graceful-fs": "4.1.11",
+                        "parse-json": "2.2.0",
+                        "pify": "2.3.0",
+                        "strip-bom": "3.0.0"
+                    }
+                },
+                "path-type": {
+                    "version": "2.0.0",
+                    "resolved": "http://registry.npm.taobao.org/path-type/download/path-type-2.0.0.tgz",
+                    "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+                    "dev": true,
+                    "requires": {
+                        "pify": "2.3.0"
+                    }
+                },
+                "pify": {
+                    "version": "2.3.0",
+                    "resolved": "http://registry.npm.taobao.org/pify/download/pify-2.3.0.tgz",
+                    "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+                    "dev": true
+                },
+                "read-pkg": {
+                    "version": "2.0.0",
+                    "resolved": "http://registry.npm.taobao.org/read-pkg/download/read-pkg-2.0.0.tgz",
+                    "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+                    "dev": true,
+                    "requires": {
+                        "load-json-file": "2.0.0",
+                        "normalize-package-data": "2.4.0",
+                        "path-type": "2.0.0"
+                    }
+                },
+                "read-pkg-up": {
+                    "version": "2.0.0",
+                    "resolved": "http://registry.npm.taobao.org/read-pkg-up/download/read-pkg-up-2.0.0.tgz",
+                    "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+                    "dev": true,
+                    "requires": {
+                        "find-up": "2.1.0",
+                        "read-pkg": "2.0.0"
+                    }
+                },
+                "strip-bom": {
+                    "version": "3.0.0",
+                    "resolved": "http://registry.npm.taobao.org/strip-bom/download/strip-bom-3.0.0.tgz",
+                    "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+                    "dev": true
+                },
+                "yargs": {
+                    "version": "8.0.2",
+                    "resolved": "http://registry.npm.taobao.org/yargs/download/yargs-8.0.2.tgz",
+                    "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+                    "dev": true,
+                    "requires": {
+                        "camelcase": "4.1.0",
+                        "cliui": "3.2.0",
+                        "decamelize": "1.2.0",
+                        "get-caller-file": "1.0.2",
+                        "os-locale": "2.1.0",
+                        "read-pkg-up": "2.0.0",
+                        "require-directory": "2.1.1",
+                        "require-main-filename": "1.0.1",
+                        "set-blocking": "2.0.0",
+                        "string-width": "2.1.1",
+                        "which-module": "2.0.0",
+                        "y18n": "3.2.1",
+                        "yargs-parser": "7.0.0"
+                    }
+                }
+            }
+        },
         "trim": {
             "version": "0.0.1",
             "resolved": "http://r.cnpmjs.org/trim/download/trim-0.0.1.tgz",
@@ -12211,6 +12580,12 @@
             "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
             "dev": true
         },
+        "uc.micro": {
+            "version": "1.0.3",
+            "resolved": "http://registry.npm.taobao.org/uc.micro/download/uc.micro-1.0.3.tgz",
+            "integrity": "sha1-ftUNXg+an7ClczeSWfKndFjVAZI=",
+            "dev": true
+        },
         "uglify-js": {
             "version": "3.3.7",
             "resolved": "https://registry.npm.taobao.org/uglify-js/download/uglify-js-3.3.7.tgz",
@@ -12842,6 +13217,110 @@
                 }
             }
         },
+        "vue-markdown-loader": {
+            "version": "2.3.0",
+            "resolved": "http://registry.npm.taobao.org/vue-markdown-loader/download/vue-markdown-loader-2.3.0.tgz",
+            "integrity": "sha1-MWmEvHqEQZ7zCyu510kZxF9GBZE=",
+            "dev": true,
+            "requires": {
+                "cheerio": "0.20.0",
+                "highlight.js": "9.12.0",
+                "loader-utils": "0.2.17",
+                "markdown-it": "8.4.0"
+            },
+            "dependencies": {
+                "cheerio": {
+                    "version": "0.20.0",
+                    "resolved": "http://registry.npm.taobao.org/cheerio/download/cheerio-0.20.0.tgz",
+                    "integrity": "sha1-XHEPK6uVZTJyhCugHG6mGzVF7DU=",
+                    "dev": true,
+                    "requires": {
+                        "css-select": "1.2.0",
+                        "dom-serializer": "0.1.0",
+                        "entities": "1.1.1",
+                        "htmlparser2": "3.8.3",
+                        "jsdom": "7.2.2",
+                        "lodash": "4.17.4"
+                    }
+                },
+                "domhandler": {
+                    "version": "2.3.0",
+                    "resolved": "http://registry.npm.taobao.org/domhandler/download/domhandler-2.3.0.tgz",
+                    "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=",
+                    "dev": true,
+                    "requires": {
+                        "domelementtype": "1.3.0"
+                    }
+                },
+                "domutils": {
+                    "version": "1.5.1",
+                    "resolved": "http://registry.npm.taobao.org/domutils/download/domutils-1.5.1.tgz",
+                    "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+                    "dev": true,
+                    "requires": {
+                        "dom-serializer": "0.1.0",
+                        "domelementtype": "1.3.0"
+                    }
+                },
+                "htmlparser2": {
+                    "version": "3.8.3",
+                    "resolved": "http://registry.npm.taobao.org/htmlparser2/download/htmlparser2-3.8.3.tgz",
+                    "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=",
+                    "dev": true,
+                    "requires": {
+                        "domelementtype": "1.3.0",
+                        "domhandler": "2.3.0",
+                        "domutils": "1.5.1",
+                        "entities": "1.0.0",
+                        "readable-stream": "1.1.14"
+                    },
+                    "dependencies": {
+                        "entities": {
+                            "version": "1.0.0",
+                            "resolved": "http://registry.npm.taobao.org/entities/download/entities-1.0.0.tgz",
+                            "integrity": "sha1-sph6o4ITR/zeZCsk/fyeT7cSvyY=",
+                            "dev": true
+                        }
+                    }
+                },
+                "isarray": {
+                    "version": "0.0.1",
+                    "resolved": "http://registry.npm.taobao.org/isarray/download/isarray-0.0.1.tgz",
+                    "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+                    "dev": true
+                },
+                "loader-utils": {
+                    "version": "0.2.17",
+                    "resolved": "http://registry.npm.taobao.org/loader-utils/download/loader-utils-0.2.17.tgz",
+                    "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
+                    "dev": true,
+                    "requires": {
+                        "big.js": "3.2.0",
+                        "emojis-list": "2.1.0",
+                        "json5": "0.5.1",
+                        "object-assign": "4.1.1"
+                    }
+                },
+                "readable-stream": {
+                    "version": "1.1.14",
+                    "resolved": "http://registry.npm.taobao.org/readable-stream/download/readable-stream-1.1.14.tgz",
+                    "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+                    "dev": true,
+                    "requires": {
+                        "core-util-is": "1.0.2",
+                        "inherits": "2.0.3",
+                        "isarray": "0.0.1",
+                        "string_decoder": "0.10.31"
+                    }
+                },
+                "string_decoder": {
+                    "version": "0.10.31",
+                    "resolved": "http://registry.npm.taobao.org/string_decoder/download/string_decoder-0.10.31.tgz",
+                    "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+                    "dev": true
+                }
+            }
+        },
         "vue-router": {
             "version": "3.0.1",
             "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz",
@@ -12921,6 +13400,13 @@
                 "minimalistic-assert": "1.0.0"
             }
         },
+        "webidl-conversions": {
+            "version": "2.0.1",
+            "resolved": "http://registry.npm.taobao.org/webidl-conversions/download/webidl-conversions-2.0.1.tgz",
+            "integrity": "sha1-O/glj30xjHRDw28uFpQCoaZwNQY=",
+            "dev": true,
+            "optional": true
+        },
         "webpack": {
             "version": "3.10.0",
             "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz",
@@ -13085,6 +13571,15 @@
                 }
             }
         },
+        "webpack-chunk-hash": {
+            "version": "0.5.0",
+            "resolved": "http://registry.npm.taobao.org/webpack-chunk-hash/download/webpack-chunk-hash-0.5.0.tgz",
+            "integrity": "sha1-Hbo4ID1zwearBptoEKWjdAI5new=",
+            "dev": true,
+            "requires": {
+                "@types/webpack": "3.8.3"
+            }
+        },
         "webpack-dev-middleware": {
             "version": "1.12.2",
             "resolved": "https://registry.npm.taobao.org/webpack-dev-middleware/download/webpack-dev-middleware-1.12.2.tgz",
@@ -13581,6 +14076,15 @@
                 }
             }
         },
+        "webpack-merge": {
+            "version": "4.1.1",
+            "resolved": "http://registry.npm.taobao.org/webpack-merge/download/webpack-merge-4.1.1.tgz",
+            "integrity": "sha1-8Rl6Cpc+acb77rbWWCGaqMDBNVU=",
+            "dev": true,
+            "requires": {
+                "lodash": "4.17.4"
+            }
+        },
         "webpack-sources": {
             "version": "1.1.0",
             "resolved": "https://registry.npm.taobao.org/webpack-sources/download/webpack-sources-1.1.0.tgz",
@@ -13615,6 +14119,16 @@
             "integrity": "sha1-XS/yKXcAPsaHpLhwc9+7rBRszyk=",
             "dev": true
         },
+        "whatwg-url-compat": {
+            "version": "0.6.5",
+            "resolved": "http://registry.npm.taobao.org/whatwg-url-compat/download/whatwg-url-compat-0.6.5.tgz",
+            "integrity": "sha1-AImBEa9om7CXVBzVpFymyHmERb8=",
+            "dev": true,
+            "optional": true,
+            "requires": {
+                "tr46": "0.0.3"
+            }
+        },
         "whet.extend": {
             "version": "0.9.9",
             "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz",
@@ -13729,6 +14243,13 @@
             "integrity": "sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0=",
             "dev": true
         },
+        "xml-name-validator": {
+            "version": "2.0.1",
+            "resolved": "http://registry.npm.taobao.org/xml-name-validator/download/xml-name-validator-2.0.1.tgz",
+            "integrity": "sha1-TYuPHszTQZqjYgYb7O9RXh5VljU=",
+            "dev": true,
+            "optional": true
+        },
         "xmlhttprequest-ssl": {
             "version": "1.5.3",
             "resolved": "https://registry.npm.taobao.org/xmlhttprequest-ssl/download/xmlhttprequest-ssl-1.5.3.tgz",
diff --git a/package.json b/package.json
index 31fe47d7e..2d4060e29 100644
--- a/package.json
+++ b/package.json
@@ -42,11 +42,13 @@
     "babel-polyfill": "^6.26.0",
     "babel-preset-env": "^1.6.0",
     "chai": "^4.1.2",
+    "cheerio": "^1.0.0-rc.2",
     "css-loader": "^0.28.7",
     "eslint": "^4.7.2",
     "eslint-plugin-html": "^3.2.2",
     "eslint-plugin-vue-libs": "^1.2.1",
     "extract-text-webpack-plugin": "^3.0.2",
+    "highlight.js": "^9.12.0",
     "html-webpack-plugin": "^2.30.1",
     "istanbul-instrumenter-loader": "^3.0.0",
     "karma": "^1.4.1",
@@ -61,6 +63,9 @@
     "karma-webpack": "^2.0.2",
     "less": "^2.7.2",
     "less-loader": "^4.0.5",
+    "markdown-it": "^8.4.0",
+    "markdown-it-anchor": "^4.0.0",
+    "markdown-it-container": "^2.0.0",
     "marked": "^0.3.7",
     "mocha": "^3.2.0",
     "pre-commit": "^1.2.2",
@@ -71,12 +76,15 @@
     "style-loader": "^0.18.2",
     "stylelint": "^8.1.1",
     "stylelint-config-standard": "^17.0.0",
+    "transliteration": "^1.6.2",
     "vue-loader": "^13.0.5",
+    "vue-markdown-loader": "^2.3.0",
     "vue-router": "^3.0.1",
     "vue-template-compiler": "^2.5.13",
     "webpack": "^3.6.0",
     "webpack-chunk-hash": "^0.5.0",
-    "webpack-dev-server": "^2.8.2"
+    "webpack-dev-server": "^2.8.2",
+    "webpack-merge": "^4.1.1"
   },
   "dependencies": {
     "add-dom-event-listener": "^1.0.2",
diff --git a/site/index.html b/site/index.html
deleted file mode 100644
index 314ab2220..000000000
--- a/site/index.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!doctype html>
-<html>
-<head>
-</head>
-
-<body>
-    <div id="app">
-      <router-view></router-view>
-    </div>
-</body>
-
-</html>
diff --git a/site/index.js b/site/index.js
deleted file mode 100644
index cf1f9a502..000000000
--- a/site/index.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import 'antd/style.js'
-import './index.less'
-import Vue from 'vue'
-import VueRouter from 'vue-router'
-import routes from './routes'
-import Md from './md'
-Vue.use(VueRouter)
-Vue.component(Md.name, Md)
-
-const router = new VueRouter({
-  mode: 'hash',
-  routes,
-})
-new Vue({
-  el: '#app',
-  router,
-})
diff --git a/site/index.less b/site/index.less
deleted file mode 100644
index ac6ec4a44..000000000
--- a/site/index.less
+++ /dev/null
@@ -1,3 +0,0 @@
-#app {
-  padding: 50px;
-}
diff --git a/site/md.vue b/site/md.vue
deleted file mode 100644
index c907d5dda..000000000
--- a/site/md.vue
+++ /dev/null
@@ -1,24 +0,0 @@
-<template>
-  <div style="padding: 10px 0;" v-html="marked($slots.default[0].text.trim() || '')" />
-</template>
-<script>
-import marked from 'marked'
-marked.setOptions({
-  renderer: new marked.Renderer(),
-  gfm: true,
-  tables: true,
-  breaks: false,
-  pedantic: true,
-  sanitize: true,
-  smartLists: true,
-  smartypants: true,
-})
-export default {
-  name: 'md',
-  data () {
-    return {
-      marked,
-    }
-  },
-}
-</script>
diff --git a/site/routes.js b/site/routes.js
deleted file mode 100644
index d5a5cc86d..000000000
--- a/site/routes.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const AsyncComp = () => {
-  const pathnameArr = window.location.pathname.split('/')
-    const com = pathnameArr[1] || 'button' // eslint-disable-line
-  const demo = pathnameArr[2] || 'index'
-  return {
-    component: import(`../components/card/demo/${demo}.vue`),
-  }
-}
-export default [
-  { path: '/*', component: AsyncComp },
-]
diff --git a/webpack.base.config.js b/webpack.base.config.js
new file mode 100644
index 000000000..8ab966d54
--- /dev/null
+++ b/webpack.base.config.js
@@ -0,0 +1,144 @@
+const path = require('path')
+const slugify = require('transliteration').slugify
+const hljs = require('highlight.js')
+
+const cheerio = require('cheerio')
+
+const fetch = (str, tag) => {
+  const $ = cheerio.load(str, { decodeEntities: false })
+  if (!tag) return str
+
+  return $(tag).html()
+}
+
+/**
+ * `{{ }}` => `<span>{{</span> <span>}}</span>`
+ * @param  {string} str
+ * @return {string}
+ */
+const replaceDelimiters = function (str) {
+  return str.replace(/({{|}})/g, '<span>$1</span>')
+}
+
+/**
+ * renderHighlight
+ * @param  {string} str
+ * @param  {string} lang
+ */
+
+const renderHighlight = function (str, lang) {
+  if (!(lang && hljs.getLanguage(lang))) {
+    return ''
+  }
+
+  try {
+    return replaceDelimiters(hljs.highlight(lang, str, true).value)
+  } catch (err) {}
+}
+
+function wrap (render) {
+  return function () {
+    return render.apply(this, arguments)
+      .replace('<code class="', '<code class="hljs ')
+      .replace('<code>', '<code class="hljs">')
+      .replace('<pre>', '<pre class="code-section">')
+  }
+};
+
+const md = require('markdown-it')('default', {
+  html: true,
+  breaks: true,
+  highlight: renderHighlight,
+})
+md.use(require('markdown-it-anchor'), {
+  level: 2,
+  slugify: slugify,
+  permalink: true,
+  permalinkBefore: true,
+}).use(require('markdown-it-container'), 'demo', {
+
+  validate: function (params) {
+    return params.trim().match(/^demo\s*(.*)$/)
+  },
+  render: function (tokens, idx) {
+    if (tokens[idx].nesting === 1) {
+      const summaryContent = tokens[idx + 1].content
+      const summary = fetch(summaryContent, 'summary')
+      const summaryHTML = summary ? md.render(summary) : ''
+
+      const content = tokens[idx + 2].content
+      const html = fetch(content, 'template')
+      const script = fetch(content, 'script') || ''
+      const style = fetch(content, 'style') || ''
+      const code = tokens[idx + 2].markup + tokens[idx + 2].info + '\n' + content + tokens[idx + 2].markup
+      const codeHtml = code ? md.render(code) : ''
+
+      let jsfiddle = { html: html, script: script, style: style }
+      jsfiddle = md.utils.escapeHtml(JSON.stringify(jsfiddle))
+      // opening tag
+      return `<template>
+                <demo-box :jsfiddle="${jsfiddle}">
+                  <div class="box-demo-show" slot="component">${html}</div>
+                  <template slot="description">${summaryHTML}</template>
+                  <div class="highlight" slot="code">${codeHtml}</div>
+                </demo-box>
+              </template>
+              <script>
+              ${script}
+              </script>
+              <style>
+              ${style}
+              </style>
+              `
+    } else {
+      return '\n'
+    }
+  },
+})
+md.renderer.rules.table_open = function () {
+  return '<table class="table">'
+}
+md.renderer.rules.fence = wrap(md.renderer.rules.fence)
+
+module.exports = {
+  entry: {
+    index: [
+      './examples/index.js',
+    ],
+  },
+  module: {
+    rules: [
+      {
+        test: /\.md/,
+        use: [
+          {
+            loader: 'vue-markdown-loader',
+            options: Object.assign(md, { wrapper: 'section', preventExtract: true }),
+          },
+        ],
+      },
+      {
+        test: /\.vue$/,
+        loader: 'vue-loader',
+      },
+      {
+        test: /\.js$/,
+        loader: 'babel-loader', exclude: /node_modules/,
+      },
+      {
+        test: /\.(png|jpg|gif|svg)$/,
+        loader: 'file-loader',
+        options: {
+          name: '[name].[ext]?[hash]',
+        },
+      },
+    ],
+  },
+  resolve: {
+    extensions: ['.js', '.vue'],
+    alias: {
+      'vue$': 'vue/dist/vue.esm.js',
+      'antd': path.join(__dirname, 'components'),
+    },
+  },
+}
diff --git a/webpack.config.js b/webpack.config.js
index 0bc6addc2..ab71254d6 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,13 +1,10 @@
 const path = require('path')
 // const webpack = require('webpack')
 const HtmlWebpackPlugin = require('html-webpack-plugin')
+const merge = require('webpack-merge')
+const baseWebpackConfig = require('./webpack.base.config')
 
-module.exports = {
-  entry: {
-    index: [
-      './examples/index.js',
-    ],
-  },
+module.exports = merge(baseWebpackConfig, {
   output: {
     path: path.resolve(__dirname, './dist'),
     publicPath: '/',
@@ -15,21 +12,6 @@ module.exports = {
   },
   module: {
     rules: [
-      {
-        test: /\.vue$/,
-        loader: 'vue-loader',
-      },
-      {
-        test: /\.js$/,
-        loader: 'babel-loader', exclude: /node_modules/,
-      },
-      {
-        test: /\.(png|jpg|gif|svg)$/,
-        loader: 'file-loader',
-        options: {
-          name: '[name].[ext]?[hash]',
-        },
-      },
       {
         test: /\.less$/,
         use: [
@@ -43,15 +25,15 @@ module.exports = {
           },
         ],
       },
+      {
+        test: /\.css$/,
+        use: [
+          'style-loader',
+          'css-loader',
+        ],
+      },
     ],
   },
-  resolve: {
-    extensions: ['.js', '.vue'],
-    alias: {
-      'vue$': 'vue/dist/vue.esm.js',
-      'antd': path.join(__dirname, 'components'),
-    },
-  },
   devServer: {
     port: 3000,
     historyApiFallback: {
@@ -66,12 +48,11 @@ module.exports = {
     hints: false,
   },
   devtool: '#source-map',
-}
-
-module.exports.plugins = (module.exports.plugins || []).concat([
-  new HtmlWebpackPlugin({
-    template: 'examples/index.html',
-    filename: 'index.html',
-    inject: true,
-  }),
-])
+  plugins: [
+    new HtmlWebpackPlugin({
+      template: 'examples/index.html',
+      filename: 'index.html',
+      inject: true,
+    }),
+  ],
+})
diff --git a/webpack.prod.config.js b/webpack.prod.config.js
index 4c23f740c..1f4c8cd9f 100644
--- a/webpack.prod.config.js
+++ b/webpack.prod.config.js
@@ -3,18 +3,15 @@ const webpack = require('webpack')
 const ExtractTextPlugin = require('extract-text-webpack-plugin')
 const WebpackChunkHash = require('webpack-chunk-hash')
 const HtmlWebpackPlugin = require('html-webpack-plugin')
+const merge = require('webpack-merge')
+const baseWebpackConfig = require('./webpack.base.config')
 
 const modulePlugin = new ExtractTextPlugin({
   filename: '[name].[chunkhash].css',
   allChunks: true,
 })
 
-module.exports = {
-  entry: {
-    index: [
-      './examples/index.js',
-    ],
-  },
+module.exports = merge(baseWebpackConfig, {
   output: {
     path: path.resolve(__dirname, './dist'),
     publicPath: './',
@@ -23,21 +20,6 @@ module.exports = {
   },
   module: {
     rules: [
-      {
-        test: /\.vue$/,
-        loader: 'vue-loader',
-      },
-      {
-        test: /\.js$/,
-        loader: 'babel-loader', exclude: /node_modules/,
-      },
-      {
-        test: /\.(png|jpg|gif|svg)$/,
-        loader: 'file-loader',
-        options: {
-          name: '[name].[ext]?[hash]',
-        },
-      },
       {
         test: /\.less$/,
         use: modulePlugin.extract({
@@ -51,47 +33,50 @@ module.exports = {
           ],
         }),
       },
+      {
+        test: /\.css$/,
+        use: modulePlugin.extract({
+          fallback: 'style-loader',
+          use: [
+            {
+              loader: 'css-loader',
+            },
+          ],
+        }),
+      },
     ],
   },
-  resolve: {
-    extensions: ['.js', '.vue'],
-    alias: {
-      'vue$': 'vue/dist/vue.esm.js',
-      'antd': path.join(__dirname, 'components'),
-    },
-  },
-}
-// http://vue-loader.vuejs.org/en/workflow/production.html
-module.exports.plugins = (module.exports.plugins || []).concat([
-  new webpack.DefinePlugin({
-    'process.env': {
-      NODE_ENV: '"production"',
-    },
-  }),
-  new webpack.optimize.CommonsChunkPlugin({
-    name: 'manifest',
-    minChunks: Infinity,
-  }),
-  new webpack.optimize.CommonsChunkPlugin({
-    name: 'vender',
-    minChunks: function (module) {
-      return module.context && ~module.context.indexOf('node_modules')
-    },
-  }),
-  new webpack.optimize.UglifyJsPlugin({
-    compress: {
-      warnings: false,
-    },
-  }),
-  new HtmlWebpackPlugin({
-    template: './examples/index.html',
-    inject: true,
-    minify: { collapseWhitespace: true },
-    production: true,
-  }),
-  new webpack.LoaderOptionsPlugin({
-    minimize: true,
-  }),
-  modulePlugin,
-  new WebpackChunkHash({ algorithm: 'md5' }),
-])
+  plugins: [
+    new webpack.DefinePlugin({
+      'process.env': {
+        NODE_ENV: '"production"',
+      },
+    }),
+    new webpack.optimize.CommonsChunkPlugin({
+      name: 'manifest',
+      minChunks: Infinity,
+    }),
+    new webpack.optimize.CommonsChunkPlugin({
+      name: 'vender',
+      minChunks: function (module) {
+        return module.context && ~module.context.indexOf('node_modules')
+      },
+    }),
+    new webpack.optimize.UglifyJsPlugin({
+      compress: {
+        warnings: false,
+      },
+    }),
+    new HtmlWebpackPlugin({
+      template: './examples/index.html',
+      inject: true,
+      minify: { collapseWhitespace: true },
+      production: true,
+    }),
+    new webpack.LoaderOptionsPlugin({
+      minimize: true,
+    }),
+    modulePlugin,
+    new WebpackChunkHash({ algorithm: 'md5' }),
+  ],
+})