Best–Worst
Capture distinct strongest and weakest choices without hiding the two-selection constraint.
Canonical sourcepatterns/best-worst.html
Behavior ownerApplication / Limen
Runtime inside FormaNone
Example 1
Canonical
Canonical repository markup, namespaced only to keep examples independent.
View HTML
<fieldset class="ef-best-worst">
<legend class="ef-best-worst__legend">Choose the most important and least important item.</legend>
<p class="ef-field__description">One item must be Best and a different item must be Worst. Limen enforces the cross-column constraint.</p>
<div class="ef-best-worst__header" aria-hidden="true">
<span>Option</span><span>Best</span><span>Worst</span>
</div>
<div class="ef-best-worst__row">
<span id="ex1-best-worst-bw-reliability">Reliability</span>
<label><input type="radio" name="ex1-best-worst-best" value="reliability" aria-labelledby="ex1-best-worst-bw-reliability ex1-best-worst-bw-best-label"><span class="ef-sr-only" id="ex1-best-worst-bw-best-label">Best</span></label>
<label><input type="radio" name="ex1-best-worst-worst" value="reliability" aria-labelledby="ex1-best-worst-bw-reliability ex1-best-worst-bw-worst-label"><span class="ef-sr-only" id="ex1-best-worst-bw-worst-label">Worst</span></label>
</div>
<div class="ef-best-worst__row">
<span id="ex1-best-worst-bw-speed">Delivery speed</span>
<label><input type="radio" name="ex1-best-worst-best" value="speed" aria-label="Delivery speed, Best"></label>
<label><input type="radio" name="ex1-best-worst-worst" value="speed" aria-label="Delivery speed, Worst"></label>
</div>
<p class="ef-best-worst__status" data-ef-state="incomplete" aria-live="polite">Choose one Best and one Worst.</p>
</fieldset>
Example 2
Representative state
A browser-native state made visible without adding a runtime.
View HTML
<fieldset class="ef-best-worst">
<legend class="ef-best-worst__legend">Choose the most important and least important item.</legend>
<p class="ef-field__description">One item must be Best and a different item must be Worst. Limen enforces the cross-column constraint.</p>
<div class="ef-best-worst__header" aria-hidden="true">
<span>Option</span><span>Best</span><span>Worst</span>
</div>
<div class="ef-best-worst__row">
<span id="ex2-best-worst-bw-reliability">Reliability</span>
<label><input type="radio" name="ex2-best-worst-best" value="reliability" aria-labelledby="ex2-best-worst-bw-reliability ex2-best-worst-bw-best-label" checked><span class="ef-sr-only" id="ex2-best-worst-bw-best-label">Best</span></label>
<label><input type="radio" name="ex2-best-worst-worst" value="reliability" aria-labelledby="ex2-best-worst-bw-reliability ex2-best-worst-bw-worst-label"><span class="ef-sr-only" id="ex2-best-worst-bw-worst-label">Worst</span></label>
</div>
<div class="ef-best-worst__row">
<span id="ex2-best-worst-bw-speed">Delivery speed</span>
<label><input type="radio" name="ex2-best-worst-best" value="speed" aria-label="Delivery speed, Best"></label>
<label><input type="radio" name="ex2-best-worst-worst" value="speed" aria-label="Delivery speed, Worst"></label>
</div>
<p class="ef-best-worst__status" data-ef-state="incomplete" aria-live="polite">Choose one Best and one Worst.</p>
</fieldset>
Example 3
Constrained layout
The canonical contract inside a narrow application region.
View HTML
<fieldset class="ef-best-worst">
<legend class="ef-best-worst__legend">Choose the most important and least important item.</legend>
<p class="ef-field__description">One item must be Best and a different item must be Worst. Limen enforces the cross-column constraint.</p>
<div class="ef-best-worst__header" aria-hidden="true">
<span>Option</span><span>Best</span><span>Worst</span>
</div>
<div class="ef-best-worst__row">
<span id="ex3-best-worst-bw-reliability">Reliability</span>
<label><input type="radio" name="ex3-best-worst-best" value="reliability" aria-labelledby="ex3-best-worst-bw-reliability ex3-best-worst-bw-best-label"><span class="ef-sr-only" id="ex3-best-worst-bw-best-label">Best</span></label>
<label><input type="radio" name="ex3-best-worst-worst" value="reliability" aria-labelledby="ex3-best-worst-bw-reliability ex3-best-worst-bw-worst-label"><span class="ef-sr-only" id="ex3-best-worst-bw-worst-label">Worst</span></label>
</div>
<div class="ef-best-worst__row">
<span id="ex3-best-worst-bw-speed">Delivery speed</span>
<label><input type="radio" name="ex3-best-worst-best" value="speed" aria-label="Delivery speed, Best"></label>
<label><input type="radio" name="ex3-best-worst-worst" value="speed" aria-label="Delivery speed, Worst"></label>
</div>
<p class="ef-best-worst__status" data-ef-state="incomplete" aria-live="polite">Choose one Best and one Worst.</p>
</fieldset>