The Kinetic Lightswitch

Module 3 of 6 in the KINETIC.email developer course. Learn how to detect whether an email client supports kinetic interactivity and provide appropriate fallbacks.

What is the Kinetic Lightswitch?

The Kinetic Lightswitch is a mechanism that detects whether an email client supports interactive elements, then shows either the interactive content or a fallback version. Not every client supports the CSS selectors kinetic email needs, so the lightswitch uses a hidden checkbox as a state-detection system that decides automatically, when the email opens, which version to display.

If kinetic works

If kinetic does not work

Implementing the lightswitch

HTML structure

<input type="checkbox" class="kinetic"
       name="interactive" id="Kinetic" checked>

<table role="presentation" width="100%">
  <tr class="interactive"><td>Kinetic content</td></tr>
  <tr class="fallback"><td>Fallback content</td></tr>
</table>

CSS rules

.fallback { display: table-row !important; }
.interactive {
  display: none !important;
  max-height: 0 !important;
  overflow: hidden !important;
}
#Kinetic:checked ~ * .interactive {
  display: table-row !important;
  max-height: none !important;
  overflow: visible !important;
}
#Kinetic:checked ~ * .fallback {
  display: none !important;
}

The logic

  1. The hidden checkbox: a checkbox that is checked by default and hidden from view.
  2. Conditional display: CSS shows the interactive content only if the checkbox is checked and the client supports :checked and the general sibling selector.
  3. Automatic detection: clients that do not support those selectors ignore the rules, so the fallback stays visible.

The approach is automatic. No user interaction is needed: a client that cannot do kinetic email simply ignores the selectors it does not understand. The lesson's live demo exposes a "Toggle Lightswitch" button so you can simulate an unsupported client; unchecked means the fallback is shown. In a real email there is no toggle. For the demo's own content swap, the lesson uses the accessible hiding pattern (max-height: 0; opacity: 0; overflow: hidden) instead of display: none so content stays available to screen readers.

Hands-on exercises

Exercise 1: Build the lightswitch

Add a checkbox with class="kinetic", id="Kinetic" and the checked attribute. Then write a #Kinetic:checked ~ .interactive rule that reveals the interactive block (max-height: none, opacity: 1, overflow: visible) and a #Kinetic:checked ~ .fallback rule that hides the fallback (max-height: 0, opacity: 0, overflow: hidden).

Exercise 2: Add a preview toggle

Add a <label for="Kinetic"> reading "Toggle Preview" so you can test both versions, add transition: all 0.4s ease to both blocks for smooth switching, and color the label #10b981 while the interactive version is active.

Best practices

Implementation tips

Common pitfalls

Pro tip: use separate tracking pixels or links in each version to learn how many subscribers see the kinetic version versus the fallback.

Signing in lets you track your progress and earn course completion credits.

Previous: The Checkbox Hack. Next: Building Tabbed Elements. Back to the learning hub.