diff --git a/components/avatar/Avatar.vue b/components/avatar/Avatar.vue
new file mode 100644
index 000000000..edd952354
--- /dev/null
+++ b/components/avatar/Avatar.vue
@@ -0,0 +1,102 @@
+
+  
+    ![]() +    
+    
+      
+    
+  
+
+
diff --git a/components/avatar/demo/index.vue b/components/avatar/demo/index.vue
new file mode 100644
index 000000000..9fc0f63f8
--- /dev/null
+++ b/components/avatar/demo/index.vue
@@ -0,0 +1,46 @@
+
+  
+
+
diff --git a/components/avatar/index.js b/components/avatar/index.js
new file mode 100644
index 000000000..df6e93398
--- /dev/null
+++ b/components/avatar/index.js
@@ -0,0 +1,3 @@
+import Avatar from './Avatar'
+
+export default Avatar
diff --git a/components/avatar/style/index.js b/components/avatar/style/index.js
new file mode 100644
index 000000000..cf31ed80f
--- /dev/null
+++ b/components/avatar/style/index.js
@@ -0,0 +1,2 @@
+import '../../style/index.less'
+import './index.less'
diff --git a/components/avatar/style/index.less b/components/avatar/style/index.less
new file mode 100644
index 000000000..ede8b9850
--- /dev/null
+++ b/components/avatar/style/index.less
@@ -0,0 +1,48 @@
+@import "../../style/themes/default";
+
+@avatar-prefix-cls: ~"@{ant-prefix}-avatar";
+
+.@{avatar-prefix-cls} {
+  display: inline-block;
+  text-align: center;
+  background: @avatar-bg;
+  color: @avatar-color;
+  white-space: nowrap;
+  position: relative;
+  overflow: hidden;
+
+  .avatar-size(@avatar-size-base, @avatar-font-size-base);
+
+  &-lg {
+    .avatar-size(@avatar-size-lg, @avatar-font-size-lg);
+  }
+
+  &-sm {
+    .avatar-size(@avatar-size-sm, @avatar-font-size-sm);
+  }
+
+  &-square {
+    border-radius: @avatar-border-radius;
+  }
+
+  & > img {
+    width: 100%;
+    height: 100%;
+    display: block;
+  }
+}
+
+.avatar-size(@size, @font-size) {
+  width: @size;
+  height: @size;
+  line-height: @size;
+  border-radius: @size / 2;
+
+  & > * {
+    line-height: @size;
+  }
+
+  &.@{avatar-prefix-cls}-icon {
+    font-size: @font-size;
+  }
+}
diff --git a/components/index.js b/components/index.js
index 1d7a69880..ce5dbc5d3 100644
--- a/components/index.js
+++ b/components/index.js
@@ -19,3 +19,5 @@ export { default as Row } from './grid/Row'
 export { default as Col } from './grid/Col'
 
 export { default as Tag } from './tag'
+
+export { default as Avatar } from './avatar'
diff --git a/components/pagination/demo/pagination.vue b/components/pagination/demo/index.vue
similarity index 100%
rename from components/pagination/demo/pagination.vue
rename to components/pagination/demo/index.vue
diff --git a/components/rate/Rate.vue b/components/rate/Rate.vue
index 1aa075175..6340fda71 100644
--- a/components/rate/Rate.vue
+++ b/components/rate/Rate.vue
@@ -61,7 +61,7 @@ export default {
     const { value, defaultValue } = this
     const reValue = value === undefined ? defaultValue : value
     return {
-      hoverValue: reValue,
+      hoverValue: undefined,
       stateValue: reValue,
     }
   },
diff --git a/components/rate/demo/rate.vue b/components/rate/demo/index.vue
similarity index 97%
rename from components/rate/demo/rate.vue
rename to components/rate/demo/index.vue
index 2902b7434..5d46666cf 100644
--- a/components/rate/demo/rate.vue
+++ b/components/rate/demo/index.vue
@@ -56,7 +56,7 @@ export default {
       this.hoverValueAH = val
     },
     changeValue () {
-      this.initValue = undefined
+      this.initValue = 4
     },
     getValue () {
       console.log(this.initValue)
diff --git a/components/rate/style/index.js b/components/rate/style/index.js
index 3a3ab0de5..cf31ed80f 100644
--- a/components/rate/style/index.js
+++ b/components/rate/style/index.js
@@ -1,2 +1,2 @@
-import '../../style/index.less';
-import './index.less';
+import '../../style/index.less'
+import './index.less'
diff --git a/components/style.js b/components/style.js
index bd87c8bbc..5dc17fc10 100644
--- a/components/style.js
+++ b/components/style.js
@@ -4,3 +4,6 @@ import './radio/style'
 import './checkbox/style'
 import './grid/style'
 import './tag/style'
+import './rate/style'
+import './pagination/style'
+import './avatar/style'
+    
+    
+      
+    
+  
+
+
diff --git a/components/avatar/demo/index.vue b/components/avatar/demo/index.vue
new file mode 100644
index 000000000..9fc0f63f8
--- /dev/null
+++ b/components/avatar/demo/index.vue
@@ -0,0 +1,46 @@
+
+  
+
+
diff --git a/components/avatar/index.js b/components/avatar/index.js
new file mode 100644
index 000000000..df6e93398
--- /dev/null
+++ b/components/avatar/index.js
@@ -0,0 +1,3 @@
+import Avatar from './Avatar'
+
+export default Avatar
diff --git a/components/avatar/style/index.js b/components/avatar/style/index.js
new file mode 100644
index 000000000..cf31ed80f
--- /dev/null
+++ b/components/avatar/style/index.js
@@ -0,0 +1,2 @@
+import '../../style/index.less'
+import './index.less'
diff --git a/components/avatar/style/index.less b/components/avatar/style/index.less
new file mode 100644
index 000000000..ede8b9850
--- /dev/null
+++ b/components/avatar/style/index.less
@@ -0,0 +1,48 @@
+@import "../../style/themes/default";
+
+@avatar-prefix-cls: ~"@{ant-prefix}-avatar";
+
+.@{avatar-prefix-cls} {
+  display: inline-block;
+  text-align: center;
+  background: @avatar-bg;
+  color: @avatar-color;
+  white-space: nowrap;
+  position: relative;
+  overflow: hidden;
+
+  .avatar-size(@avatar-size-base, @avatar-font-size-base);
+
+  &-lg {
+    .avatar-size(@avatar-size-lg, @avatar-font-size-lg);
+  }
+
+  &-sm {
+    .avatar-size(@avatar-size-sm, @avatar-font-size-sm);
+  }
+
+  &-square {
+    border-radius: @avatar-border-radius;
+  }
+
+  & > img {
+    width: 100%;
+    height: 100%;
+    display: block;
+  }
+}
+
+.avatar-size(@size, @font-size) {
+  width: @size;
+  height: @size;
+  line-height: @size;
+  border-radius: @size / 2;
+
+  & > * {
+    line-height: @size;
+  }
+
+  &.@{avatar-prefix-cls}-icon {
+    font-size: @font-size;
+  }
+}
diff --git a/components/index.js b/components/index.js
index 1d7a69880..ce5dbc5d3 100644
--- a/components/index.js
+++ b/components/index.js
@@ -19,3 +19,5 @@ export { default as Row } from './grid/Row'
 export { default as Col } from './grid/Col'
 
 export { default as Tag } from './tag'
+
+export { default as Avatar } from './avatar'
diff --git a/components/pagination/demo/pagination.vue b/components/pagination/demo/index.vue
similarity index 100%
rename from components/pagination/demo/pagination.vue
rename to components/pagination/demo/index.vue
diff --git a/components/rate/Rate.vue b/components/rate/Rate.vue
index 1aa075175..6340fda71 100644
--- a/components/rate/Rate.vue
+++ b/components/rate/Rate.vue
@@ -61,7 +61,7 @@ export default {
     const { value, defaultValue } = this
     const reValue = value === undefined ? defaultValue : value
     return {
-      hoverValue: reValue,
+      hoverValue: undefined,
       stateValue: reValue,
     }
   },
diff --git a/components/rate/demo/rate.vue b/components/rate/demo/index.vue
similarity index 97%
rename from components/rate/demo/rate.vue
rename to components/rate/demo/index.vue
index 2902b7434..5d46666cf 100644
--- a/components/rate/demo/rate.vue
+++ b/components/rate/demo/index.vue
@@ -56,7 +56,7 @@ export default {
       this.hoverValueAH = val
     },
     changeValue () {
-      this.initValue = undefined
+      this.initValue = 4
     },
     getValue () {
       console.log(this.initValue)
diff --git a/components/rate/style/index.js b/components/rate/style/index.js
index 3a3ab0de5..cf31ed80f 100644
--- a/components/rate/style/index.js
+++ b/components/rate/style/index.js
@@ -1,2 +1,2 @@
-import '../../style/index.less';
-import './index.less';
+import '../../style/index.less'
+import './index.less'
diff --git a/components/style.js b/components/style.js
index bd87c8bbc..5dc17fc10 100644
--- a/components/style.js
+++ b/components/style.js
@@ -4,3 +4,6 @@ import './radio/style'
 import './checkbox/style'
 import './grid/style'
 import './tag/style'
+import './rate/style'
+import './pagination/style'
+import './avatar/style'