Re: [csswg-drafts] [mediaqueries][css-conditional] else (#112)

The reason I didn't like `@switch` equivalents is that it still only lets you test on a single *type* of conditional at a time. If you want to test for a MQ *and* an SQ, or else do something else, you can't write that reasonably in `@switch`.

That is:

```css
@switch {
  @media A {
    @supports B {
      /* code intended for (A && B) */
    }
  }
  @media not A {
    /* code intended for (!A) 
       aka (!A && B) or (!A && !B) */
  }
  @default {
    /* code intended for (A && !B),
       the leftover case */
  }
}
```

will *never* run the @default block (because the two top-level rules fully cover `A` and `not A`), even if the intention is to have it contain code for when A is true but B is false.

Versus when/else, which would handle it well:

```css
@when media(A) and supports(B) {
  /* (A && B) */
}
@else media(not A) {
  /* (!A), which is (!A && B) || (!A && !B) */
}
@else {
  /* (A && !B) */
}
```

I don't think it's possible to mod `@switch` into doing this, because the top-level rules aren't constrained to contain only a single child conditional; it could have several, so you can't easily tell what cases it's supposed to cover (and thus what "default" should cover).

-- 
GitHub Notification of comment by tabatkins
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/112#issuecomment-499630643 using your GitHub account

Received on Thursday, 6 June 2019 19:16:53 UTC