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.
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.
<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>
.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;
}
:checked and the general sibling selector.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.
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).
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.
<tr> with display: table-row, a <div> or <td> with display: block; hiding is always display: none. KineticAI puts the interactive and fallback pair on table rows, so production emails use table-row. Using block on a row pops it out of the table layout and renders it at content width instead of full width.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.