diff --git a/lib/parser.js b/lib/parser.js
index <HASH>..<HASH> 100644
--- a/lib/parser.js
+++ b/lib/parser.js
@@ -360,18 +360,35 @@ Parser.prototype = {
   },
 
   /**
-   * keyframes name (unit block)+
+   * keyframes name ((unit | from | to) block)+
    */
    
   get keyframes() {
     this.expect('keyframes');
-    var name = this.expect('ident').val.name
+    var pos
+      , name = this.expect('ident').val.name
       , keyframes = new nodes.Keyframes(name);
     this.expect('indent');
-    while ('unit' == this.peek.type) {
+    while (pos = this.accept('unit') || this.accept('ident')) {
+      // from | to
+      if ('ident' == pos.type) {
+        switch (pos.val.name) {
+          case 'from':
+            pos = new nodes.Unit(0, '%');
+            break;
+          case 'to':
+            pos = new nodes.Unit(100, '%');
+            break;
+          default:
+            throw new Error('invalid ident "' + pos.val.name + '" in selector');
+        }
+      } else {
+        pos = pos.val;
+      }
+
+      // block
       this.state.push('keyframe');
-      var pos = this.expect('unit').val
-        , block = this.block(keyframes);
+      var block = this.block(keyframes);
       keyframes.push(pos, block);
       this.state.pop();
     }
Supporting from/to in keyframes