chriseppstein/compass — pull request #1227 by robwierzbowski (2013-03-25 04:49:37+00:00)
Title: Added support for prefixing properties and values to experimental()

This pull request adds functionality to complete issue #1202: sometimes you need to prefix both a name and a property for experimental css3 support. I revised the `experimental()` mixin so that each prefix argument (`$moz`, $`webkit`, etc.) accepts either a single boolean for "prefix-property", or a space separated list of two booleans for "prefix-property" and "prefix-value" respectively.

Now, private css3-feature-support variables would include a list of 5 booleans or pairs of booleans. A list with optional pairs would look like

```scss
$transition-support: not -moz, -webkit -webkit, (not -ms) -ms, not -o, not -khtml;
// Note those parenthesis. Required if you have two values, one of which is a not.
```

No need for any changes to current functions and mixins that use `experimental()`, since the second boolean is optional.

### A couple notes
- Originally I wanted to use variable arguments for the prefixes, but that won't work because the current ecosystem relies on booleans with named variables.
- The mixin had to be a little verbose; no `@each` statements because we need to call the `$experimental-support-for-*` variables manually.
- I suggest that this mixin replaces `experimental()`, but if we're worried about the extra overhead added, it could be a separate mixin called `experimental-property-value`().
- We can also rewrite `experimental-values()` as a wrapper for this mixin, like `experimental-only-for` is now.
- Docs and tests will need to be updated.