diff --git a/packages/color-picker/src/components/picker-dropdown.vue b/packages/color-picker/src/components/picker-dropdown.vue
index e9572b8f5..6dc48abe2 100644
--- a/packages/color-picker/src/components/picker-dropdown.vue
+++ b/packages/color-picker/src/components/picker-dropdown.vue
@@ -9,7 +9,14 @@
       
       
       
@@ -23,6 +30,7 @@
   import AlphaSlider from './alpha-slider';
   import Popper from 'element-ui/src/utils/vue-popper';
   import Locale from 'element-ui/src/mixins/locale';
+  import ElInput from 'element-ui/packages/input';
 
   export default {
     name: 'el-color-picker-dropdown',
@@ -32,7 +40,8 @@
     components: {
       SvPanel,
       HueSlider,
-      AlphaSlider
+      AlphaSlider,
+      ElInput
     },
 
     props: {
@@ -42,6 +51,12 @@
       showAlpha: Boolean
     },
 
+    data() {
+      return {
+        customInput: ''
+      };
+    },
+
     computed: {
       currentColor() {
         const parent = this.$parent;
@@ -52,6 +67,29 @@
     methods: {
       confirmValue() {
         this.$emit('pick');
+      },
+
+      handleConfirm() {
+        const valid = this.showAlpha ? this.validRGBA(this.customInput) : this.validRGBHex(this.customInput);
+        if (valid) {
+          this.color.fromString(this.customInput);
+        } else {
+          this.customInput = this.currentColor;
+        }
+      },
+
+      validRGBHex(color) {
+        return /^#[A-Fa-f0-9]{6}$/.test(color);
+      },
+
+      validRGBA(color) {
+        const matches = color.match(/^rgba\((\d+), ?(\d+), ?(\d+), ?([.0-9]+)\)$/);
+        if (!matches) return false;
+        const list = matches.map(v => parseInt(v, 10)).slice(1);
+        if (list.some(v => isNaN(v))) return false;
+        const [r, g, b, a] = list;
+        if ([r, g, b].some(v => v < 0 || v > 255) || a < 0 || a > 1) return false;
+        return true;
       }
     },
 
@@ -70,6 +108,10 @@
             alpha && alpha.update();
           });
         }
+      },
+
+      currentColor(val) {
+        this.customInput = val;
       }
     }
   };
diff --git a/test/unit/specs/color-picker.spec.js b/test/unit/specs/color-picker.spec.js
index c2191f286..cd4fd2e4e 100644
--- a/test/unit/specs/color-picker.spec.js
+++ b/test/unit/specs/color-picker.spec.js
@@ -97,8 +97,8 @@ describe('ColorPicker', () => {
     trigger.click();
 
     setTimeout(() => {
-      const value = document.querySelector('.el-color-dropdown__value');
-      expect(value.innerText.trim().toUpperCase()).to.equal('#20A0FF');
+      const input = document.querySelector('.el-color-dropdown__value input');
+      expect(input.value.trim().toUpperCase()).to.equal('#20A0FF');
       done();
     }, ANIMATION_TIME);
   });