{"id":1180,"date":"2026-06-08T13:22:05","date_gmt":"2026-06-08T13:22:05","guid":{"rendered":"https:\/\/webaccessible.cat\/?post_type=guia_wcag&#038;p=1180"},"modified":"2026-06-08T13:25:15","modified_gmt":"2026-06-08T13:25:15","slug":"roles-aria-hijos-obligatorios","status":"publish","type":"guia_wcag","link":"https:\/\/webaccessible.cat\/es\/guia-wcag\/roles-aria-hijos-obligatorios\/","title":{"rendered":"Roles ARIA con hijos obligatorios"},"content":{"rendered":"<h2>\u00bfQu\u00e9 son los hijos obligatorios de un rol ARIA?<\/h2>\n<p>Cuando a\u00f1ades un rol ARIA a un elemento, la especificaci\u00f3n WAI-ARIA define qu\u00e9 roles deben tener sus hijos directos. Si no los tienes, el lector de pantalla no puede transmitir correctamente el contexto al usuario.<\/p>\n<p>El criterio WCAG 1.3.1 exige que la informaci\u00f3n, la estructura y las relaciones transmitidas visualmente tambi\u00e9n est\u00e9n disponibles para la tecnolog\u00eda de asistencia. Un rol ARIA sin los hijos esperados rompe esa relaci\u00f3n.<\/p>\n<h2>\u00bfPor qu\u00e9 es importante?<\/h2>\n<p>Imagina que el lector de pantalla anuncia \u00ablista\u00bb pero despu\u00e9s no puede identificar ning\u00fan elemento de la lista. El usuario sabe que hay una lista pero no cu\u00e1ntos elementos tiene ni d\u00f3nde se encuentra dentro de ella.<\/p>\n<p>Los roles ARIA establecen una jerarqu\u00eda sem\u00e1ntica. Un elemento con <code>role=\"list\"<\/code> necesita hijos con <code>role=\"listitem\"<\/code>. Un <code>role=\"tablist\"<\/code> necesita hijos con <code>role=\"tab\"<\/code>. Sin estos hijos esperados, la relaci\u00f3n sem\u00e1ntica queda rota y la tecnolog\u00eda de asistencia no puede hacer su trabajo.<\/p>\n<h2>C\u00f3mo corregirlo<\/h2>\n<p>La soluci\u00f3n m\u00e1s sencilla es <strong>usar HTML sem\u00e1ntico nativo<\/strong> siempre que sea posible. Los elementos HTML nativos ya incorporan los roles impl\u00edcitos correctos sin ning\u00fan atributo ARIA adicional:<\/p>\n<pre><code>&lt;!-- \u2705 HTML sem\u00e1ntico nativo \u2014 no hace falta ning\u00fan rol ARIA --&gt;\r\n&lt;ul&gt;\r\n  &lt;li&gt;Primer elemento&lt;\/li&gt;\r\n  &lt;li&gt;Segundo elemento&lt;\/li&gt;\r\n&lt;\/ul&gt;<\/code><\/pre>\n<p>Si tienes que usar ARIA personalizado, aseg\u00farate de que todos los hijos directos tengan el rol obligatorio correspondiente:<\/p>\n<pre><code>&lt;!-- \u2705 Hijos con el rol requerido --&gt;\r\n&lt;div role=\"list\"&gt;\r\n  &lt;div role=\"listitem\"&gt;Primer elemento&lt;\/div&gt;\r\n  &lt;div role=\"listitem\"&gt;Segundo elemento&lt;\/div&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>Los roles padre y sus hijos obligatorios m\u00e1s habituales:<\/p>\n<table>\n<thead>\n<tr>\n<th>Rol del padre<\/th>\n<th>Hijos requeridos<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><code>list<\/code><\/td>\n<td><code>listitem<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>listbox<\/code><\/td>\n<td><code>option<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>menu<\/code> \/ <code>menubar<\/code><\/td>\n<td><code>menuitem<\/code>, <code>menuitemcheckbox<\/code>, <code>menuitemradio<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>radiogroup<\/code><\/td>\n<td><code>radio<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>tablist<\/code><\/td>\n<td><code>tab<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>tree<\/code><\/td>\n<td><code>treeitem<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>grid<\/code><\/td>\n<td><code>row<\/code>, <code>rowgroup<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>row<\/code><\/td>\n<td><code>cell<\/code>, <code>columnheader<\/code>, <code>rowheader<\/code><\/td>\n<\/tr>\n<tr>\n<td><code>combobox<\/code><\/td>\n<td><code>listbox<\/code>, <code>tree<\/code>, <code>grid<\/code>, <code>dialog<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Errores habituales<\/h2>\n<p>El error m\u00e1s frecuente en webs WordPress con Elementor: el Loop Container a\u00f1ade autom\u00e1ticamente <code>role=\"list\"<\/code> al contenedor, pero los elementos hijos generados no tienen <code>role=\"listitem\"<\/code>:<\/p>\n<pre><code>&lt;!-- \u274c Generado por Elementor Loop Container --&gt;\r\n&lt;div class=\"elementor-loop-container elementor-grid\" role=\"list\"&gt;\r\n  &lt;div class=\"elementor-post\"&gt;...&lt;\/div&gt;\r\n&lt;\/div&gt;<\/code><\/pre>\n<p>Para corregirlo, a\u00f1ade <code>role=\"listitem\"<\/code> a los elementos hijos mediante JavaScript o, si el constructor lo permite, desde la configuraci\u00f3n del elemento. Si el <code>role=\"list\"<\/code> no aporta valor sem\u00e1ntico real, puedes eliminarlo completamente.<\/p>\n<p>Otro error habitual: eliminar el rol padre sin revisar si es necesario para la accesibilidad. Si tienes un componente de pesta\u00f1as (<code>role=\"tablist\"<\/code>), no puedes simplemente quitar el rol: tienes que asegurarte de que los hijos tambi\u00e9n est\u00e1n correctamente etiquetados.<\/p>\n<div class=\"et_pb_section_0 et_pb_section et_pb_section--fixed et_section_regular et_flex_section et-interaction-target-03o12ngdyu\" data-interaction-target=\"03o12ngdyu\"><div class=\"et_pb_row_0 et_pb_row et_flex_row\"><div class=\"et_pb_column_0 et_pb_column et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\"><div class=\"et_pb_text_0 et_pb_text et_pb_bg_layout_light et_pb_module et_flex_module preset--module--divi-text--default\"><div class=\"et_pb_text_inner\"><p>Your content goes here. Edit or remove this text inline or in the module Content settings. You can also style every aspect of this content in the module Design settings and even apply custom CSS to this text in the module Advanced settings.<\/p>\n<\/div><\/div><\/div><div class=\"et_pb_column_1 et_pb_column et-last-child et_flex_column et_pb_css_mix_blend_mode_passthrough et_flex_column_24_24 et_flex_column_24_24_tablet et_flex_column_24_24_phone\"><div class=\"et_pb_icon_0 et_pb_icon et_pb_module et_flex_module\" data-interaction-trigger=\"4bs8z0k0z5\"><span class=\"et_pb_icon_wrap\"><span class=\"et-pb-icon\">M<\/span><\/span><\/div><\/div><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>\u00bfQu\u00e9 son los hijos obligatorios de un rol ARIA? Cuando a\u00f1ades un rol ARIA a un elemento, la especificaci\u00f3n WAI-ARIA define qu\u00e9 roles deben tener sus hijos directos. Si no los tienes, el lector de pantalla no puede transmitir correctamente el contexto al usuario. El criterio WCAG 1.3.1 exige que la informaci\u00f3n, la estructura y [&hellip;]<\/p>\n","protected":false},"featured_media":0,"template":"","class_list":["post-1180","guia_wcag","type-guia_wcag","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/guia_wcag\/1180","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/guia_wcag"}],"about":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/types\/guia_wcag"}],"wp:attachment":[{"href":"https:\/\/webaccessible.cat\/es\/wp-json\/wp\/v2\/media?parent=1180"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}