diff --git a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp
index 27066a9544..333cde11d6 100644
--- a/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp
+++ b/Userland/Libraries/LibWeb/HTML/HTMLInputElement.cpp
@@ -159,7 +159,19 @@ void HTMLInputElement::create_shadow_tree_if_needed()
if (shadow_root())
return;
- // FIXME: This assumes that we want a text box. Is that always true?
+ // FIXME: This could be better factored. Everything except the below types becomes a text input.
+ switch (type_state()) {
+ case TypeAttributeState::RadioButton:
+ case TypeAttributeState::Checkbox:
+ case TypeAttributeState::Button:
+ case TypeAttributeState::SubmitButton:
+ case TypeAttributeState::ResetButton:
+ case TypeAttributeState::ImageButton:
+ return;
+ default:
+ break;
+ }
+
auto shadow_root = adopt_ref(*new DOM::ShadowRoot(document(), *this));
auto initial_value = attribute(HTML::AttributeNames::value);
if (initial_value.is_null())