diff --git a/Base/res/html/misc/checkbox.html b/Base/res/html/misc/checkbox.html index 9264dcc488..a4126f5742 100644 --- a/Base/res/html/misc/checkbox.html +++ b/Base/res/html/misc/checkbox.html @@ -1,12 +1,29 @@ - -

+    
+    

+
+    
+    

+
     
 
diff --git a/Userland/Libraries/LibWeb/Layout/Label.cpp b/Userland/Libraries/LibWeb/Layout/Label.cpp
index 07e5578d14..10d7a41973 100644
--- a/Userland/Libraries/LibWeb/Layout/Label.cpp
+++ b/Userland/Libraries/LibWeb/Layout/Label.cpp
@@ -89,28 +89,35 @@ bool Label::is_associated_label_hovered(LabelableNode& control)
     return false;
 }
 
+// https://html.spec.whatwg.org/multipage/forms.html#labeled-control
 Label* Label::label_for_control_node(LabelableNode& control)
 {
-    Label* label = nullptr;
-
     if (!control.document().layout_node())
-        return label;
+        return nullptr;
 
-    String id = control.dom_node().attribute(HTML::AttributeNames::id);
-    if (id.is_empty())
-        return label;
+    // The for attribute may be specified to indicate a form control with which the caption is to be associated.
+    // If the attribute is specified, the attribute's value must be the ID of a labelable element in the
+    // same tree as the label element. If the attribute is specified and there is an element in the tree
+    // whose ID is equal to the value of the for attribute, and the first such element in tree order is
+    // a labelable element, then that element is the label element's labeled control.
+    if (auto id = control.dom_node().attribute(HTML::AttributeNames::id); !id.is_empty()) {
+        Label* label = nullptr;
 
-    control.document().layout_node()->for_each_in_inclusive_subtree_of_type