I’m working on a custom email editor that uses special placeholder components. Users can delete these placeholders by hitting the backspace key, but I’m running into a weird issue with Gmail.
When someone deletes the content of the last placeholder element, Gmail doesn’t remove the whole thing. Instead it keeps the empty span wrapper and adds a br tag inside it. This creates visual problems in the email template.
Here’s what my placeholder HTML looks like before deletion:
<span id="wrapper1" data-placeholder="" style="text-size-adjust: 100%;">
<span id="wrapper2" data-placeholder="" style="text-size-adjust: 100%;">
<span id="token::a1b2c3d4-5e6f-7890-abcd-ef1234567890" style="color: #ff6b35;" data-placeholder-id="token::a1b2c3d4-5e6f-7890-abcd-ef1234567890" class="placeholder">
<span class="placeholder-icon">📧</span>
<span class="placeholder-wrapper">[</span>
<span class="placeholder-text">
User Name
</span>
<span class="placeholder-wrapper">]</span>
</span>
</span>
</span>
After the user deletes everything, Gmail leaves this behind:
<span id="wrapper1" data-placeholder="" style="text-size-adjust: 100%;">
<span id="wrapper2" data-placeholder="" style="text-size-adjust: 100%;">
<span id="token::a1b2c3d4-5e6f-7890-abcd-ef1234567890" style="color: #ff6b35;" data-placeholder-id="token::a1b2c3d4-5e6f-7890-abcd-ef1234567890" class="placeholder">
<br>
</span>
</span>
</span>
I tried switching the outer span to a div with inline-block display but that didn’t help. Setting contenteditable to false works but breaks other functionality when multiple placeholders are next to each other. How can I prevent Gmail from keeping these empty containers?