Though solved, I add some more information for you to read :)
Content and attributes
Each element has a content model:
``[…] a description of the element's expected contents. An HTML element must have contents that match the requirements described in the element's content model.[…]''
As such the <ul>
element has a content model. Looking at the specs we find it to be:
By this we can conclude that we can not have an anchor, a
, inside the ul
element. But what about adding a href
attribute to the ul
?
Then we look at the Content attributes.
A normative list of attributes that may be specified on the element
(except where otherwise disallowed), along with non-normative
descriptions of those attributes. (The content to the left of the dash
is normative, the content to the right of the dash is not.)
For ul
we find:
The Global attributes are the following:
- accesskey
- class
- contenteditable
- dir
- draggable
- dropzone
- hidden
- id
- lang
- spellcheck
- style
- tabindex
- title
- translate
In addition it can have various event handler attributes, like onmouseover
, onclick
, on...
and ARIA attributes. But, as we see, no href
attribute.
In conclusion we now know that:
ul
can not have an anchor as a child.
ul
can not have the href
attribute.
But, the question was about href
on li
element!
As li
and ul
/ ol
are intertwined we first had a look at ul
. For li
we follow the same procedure: The content model for li
is:
Now, that opens up a wide range of possibilities. Here we find a
at top of the list.
And what about the attributes? For li
we find:
- Global attributes
If the element is a child of an ol element: value - Ordinal value of the list item
In other words, we now know:
ul
can not have an anchor as a child.
ul
can not have the href
attribute.
li
can have an anchor as a child.
li
can not have the href
attribute.
Solution
As pointed out by others, is to add it to an anchor that we put as a child of a li
element:
<ul>
<li><a href="myurl">Hello</a></li>
</ul>
li
inside an anchor but the other way around. – Murderous