HTML Lists

(blog.frankmtaylor.com)

301 points | by speckx 12 hours ago ago

74 comments

  • appplication 11 hours ago ago

    This was a fun little read. Just through testing the examples, I also learned datalist does not seem to work well on mobile safari (which is a large enough market I might even say there’s essentially no scenario in which it’s worth using if there’s a compatibility issue).

    • tshaddox 9 hours ago ago

      The datalist examples definitely work on my iPhone. They integrate into the autocomplete suggestions above the native iOS keyboard. There’s no way to browse all the suggestions, but I suppose that’s not an intended use case for datalist.

      However, the disabled attr on group definitely does not work!

      • king_geedorah 8 hours ago ago

        It seems the autofill bar only populates with the first three items in the datalist and also does not clear when navigating to a regular text field like this one. Kind of an interesting way to have screwed it up.

      • appplication 8 hours ago ago

        That’s funny, in my case it tries to autofill my contact information

    • VorpalWay 9 hours ago ago

      Doesn't work with Firefox on Android either.

    • MattGaiser 11 hours ago ago

      Way back when I was working my first job, datalist didn’t work on Firefox. That’s what got Firefox removed from the list of supported browsers.

      It has been a problem for a long time if you want to support anything other than Chrome.

      • Levitating 10 hours ago ago

        > It has been a problem for a long time if you want to support anything other than Chrome.

        That's partially because Chrome keeps adopting standards nobody else wants to support.

        • afavour 10 hours ago ago

          Both things can be true. Chrome supports a bunch of non standard APIs but it also has some of the best coverage of standard APIs.

    • carlosjobim 10 hours ago ago

      They work well but not with GBoard on iOS.

    • masswerk 9 hours ago ago

      Mind that input + datalist is the HTML equivalent of the Windows combobox, once generally regarded as the worst UI element ever. (This was enjoying meme status in usability related articles and write-ups. So probably not a recommendation.)

  • VladVladikoff 11 hours ago ago

    >What if there’s a bunch of options, but for [reasons] we don’t want a user to be able to select a subset of them? Let’s add the disabled attribute to an optgroup

    Seems broken in mobile safari, not actually disabled I can still select the disabled items.

    • p2detar 11 hours ago ago

      Not broken, but strange since it should be working on latest Safari.

      https://caniuse.com/mdn-html_elements_optgroup_disabled

      I think it may be a Safari bug.

      • quantumleaper 11 hours ago ago

        Your link states it's not supported in iOS Safari at all, even though it has been supported in macOS Safari since 2013.

        • p2detar 9 hours ago ago

          Ha! You're right. Ironically, I was viewing it on my phone and I only saw the "Safari" column and not "Safari on iOS".

      • tvmalsv 10 hours ago ago

        Came here to mention the same thing. Very well be on me, tho. I’m using the Brave browser (is it safari-powered?) and on iOS 18.7.9, which is the newest my old iPhone X supports.

        • somewhatgoated 10 hours ago ago

          I think on iphone everything is safari powered(?)

          Also doesnt work for me on iPhone Firefox

    • zamadatix 6 hours ago ago

      This is the kind of thing I struggle with on using native HtML for more than the basics. Even if you do enough reading and have enough confidence to write an article like this the comments end up with quirks, limitations, or notes on lack of support about different browser+device combos.

      Div soup is probably a bit far in the opposite direction, but even then it's at least pretty consistent and apparent what the quirks and limitations are because it aligns with what you or the framework wrote much more consistently.

  • dzonga 10 hours ago ago

    this was a dope & comprehensive.

    unfortunately we have a new class of dev's that never learned html but went straight for React. Now with LLMs they will never learn HTML.

    hence they reach for react components where simple html would have been sufficient.

    • Ancapistani 10 hours ago ago

      I think that’s OK.

      When I first had to use XML, I had to learn the XML spec and output it manually - serialization libraries didn’t really exist yet. I’ve since seen generation of juniors come up through the ranks using XML as an interchange format (and then JSON) without ever learning it fully. It was fine, and nothing terrible happened.

      I’ve seen AJAX go from the hot new thing to people not knowing what it stood for, to now most people not even recognizing the term. AJAX didn’t die; it became so common we don’t need a word for it anymore.

      • tyre 7 hours ago ago

        Kind of like JQuery. I know why it was such an incredible library and am happy no new devs I work with (a) know what it is (b) understand why it was necessary.

        Thank god the underlying language, libraries, and browser support have moved forward. And IE6 is dead. God, what a nightmare.

        • Ancapistani 7 hours ago ago

          I remember when IE6 was the shiny new solution that we desperately wanted :).

          IE 5.5 was much, much worse, and there was a long time there when it didn’t get any updates at all.

    • anotherevan 5 hours ago ago

      My problem is I thoroughly learned HTML twenty years ago and am only incidentally aware of how it has changed and improved since. Doubly so for CSS.

    • zarzavat 9 hours ago ago

      To be honest HTML is a pain.

      For example the HTML approach to style parts of a control is to use pseudoclasses. Sometimes the selectors are different across browsers! Then you have to test across browsers because who knows if it will actually work correctly.

      React is not just easier it's more dependable. If I make something with React and some divs I know it's going to work the same in all browsers.

      • recursive 6 hours ago ago

        The selectors are not different. Whatever problems you have applying styles to html elements also exist in react.

  • montroser 11 hours ago ago

    Good stuff, except don't get too excited about `datalist`. It just doesn't have enough hooks to be actually useful for anything other than a little prototype.

    • voidnap 9 hours ago ago

      I've used a datalist for autocomplete suggestions and it's worked great.

      • theandrewbailey 8 hours ago ago

        I've had problems with <datalist> not showing when the input is misspelled, or when none of the <options> strictly begin with the input. I gave up and used an <ol> instead.

    • iammrpayments 11 hours ago ago

      I think I’ve tried building a combobox using datalist once but it didn’t work

      • bombcar 10 hours ago ago

        As you learn more about “raw” html you find all sorts of very fun things that are - ah - not very well implemented if at all.

        • jazzypants 9 hours ago ago

          The neat thing about HTML is that it's a living standard and anyone can contribute. Old bugs get corrected all the time simply because it annoyed a certain person enough for them to push a fix through the standards process.

          Unfortunately, it could be around a decade before all three major browsers finally implement the standard, and the fix might not be quite as clean as you originally imagined.

  • jdw64 11 hours ago ago

    HTML linters actually help distinguish things like that? I'm curious if there are any linters out there that can enforce this kind of semantic tag selection.

  • vivzkestrel 2 hours ago ago

    - you guys write such nice blogs but i cant seem to ever get a list of all the posts on your blog in 1 go

    - https://blog.frankmtaylor.com/archive doesnt work

    - https://blog.frankmtaylor.com/archives nope

    - https://blog.frankmtaylor.com/posts nada

    - https://blog.frankmtaylor.com/all nil

    - https://blog.frankmtaylor.com/blog nyet

    - do you understand that most of us got 10000+ bookmarks and it would be really really handy if you could make a single page on your website that lists every post every written without the description or the entire article on it?

  • nektro 9 hours ago ago

    TIL <menu>, I wonder why more frameworks don't make use of it.

    • extra88 5 hours ago ago

      Because for the user experience, it is identical to <ul>. Use <menu> if it helps you to understand your code but in the browser's accessibility tree and in all other respects, it's just an unordered list.

      Conveying that something is a list of actions requires adding ARIA attributes. The article mentions `role=menu` but that's not enough, each item also needs the `menuitem` role. The WAI Authoring Practices Guide explains the roles and interaction expectations; don't copy their coded examples and definitely don't use the roles for navigation menus.

      https://www.w3.org/WAI/ARIA/apg/patterns/menubar/

    • pphysch 9 hours ago ago

      big brain no learn hyperspeak when many div do trick

    • stirfish 8 hours ago ago

      <menu>, <dialog>, lots of fun stuff in html now.

      I like to ask people what they imagine <ruby> does, because I certainly didn't guess right.

      • paceaux 3 hours ago ago

        <ruby> is going to be featured in my next article: You don't know HTML…Semantics.

        I'm debating whether that one will be one or two articles because I'm going to be covering everything from <ruby>, <bdi>, <bdo> all the way through <var>, <kbd>, <samp>, <cite>, and <q>.

        After that one, I'll probably have something like, "You don't know HTML interactions" or something to cover <dialog>, <popover>, and the Invoker API.

        So sit tight; it's all coming.

      • extra88 5 hours ago ago

        <dialog> is awesome, especially when combined with Invoker commands or `popover`. <menu> does nothing, it's just another name for <ul>.

  • jimmaswell 11 hours ago ago

    Lots of useful information I wasn't aware of after being a front-end lead for years. I'll start using these at work for sure.

  • tuzemec 7 hours ago ago

    Only if we had designers who like the default datalist appearance...

    • joshmoody24 an hour ago ago

      In my experience, lack of style customizability is the biggest obstacle to using native HTML features

  • kevinh456 6 hours ago ago

    DL is a definition list not a description list.

    • melncat 5 hours ago ago

      It was changed to description list in HTML5, which you would've learned if you actually read the article

    • paceaux 4 hours ago ago

      This is called out explicitly in the article as a shift from HTML4 to HTML5.

    • timando 5 hours ago ago

      In HTML 4. HTML 5 redefined it.

  • reconnecting 11 hours ago ago

    This is how real HTML magic should look like:

    <MARQUEE>

      <OL>
          <LI>One</LI>
          <LI>Two</LI>
          <LI>Three</LI>
      </OL>
    
    </MARQUEE>
    • recroad 11 hours ago ago

          <BLINK>
            <MARQUEE>
              <OL>
                <LI>One</LI>
                <LI>Two</LI>
                <LI>Three</LI>
              </OL>
            </MARQUEE>
          </BLINK>
      
      FTFY
      • Trufa 10 hours ago ago

        blink wont work, but marquee will

        • wwweston 10 hours ago ago

          Not with that attitude:

              <style>
              @keyframes blink {
                  0% { opacity: 1; }
                  50% { opacity: 0; }
                  100% { opacity: 1; }
              }
              
              blink { animation: blink 0.7s infinite; }
              </style>
          
              <blink>This guy blinks.</blink>
          • panzi 6 hours ago ago

            Wasn't it more like this?

                <style>
                @keyframes blink {
                    0% { visibility: visible; }
                    50% { visibility: hidden; }
                    100% { visibility: visible; }
                }
                
                blink { animation: blink 0.7s steps(1, end) infinite; }
                </style>
            
                <blink>This guy blinks.</blink>
          • reconnecting 10 hours ago ago

            What version of Macromedia Dreamweaver did you use to make this?

          • Trufa 10 hours ago ago

            people who use css are not welcome here.

            • Ancapistani 10 hours ago ago

              It’s OK if it’s a polyfill.

              Wait, not far enough back…

              It’s OK if it’s a shim.

        • reconnecting 9 hours ago ago

          Since <BLINK> is gone, `BEHAVIOR=SLIDE` is the closest you'll get.

          <MARQUEE DIRECTION="DOWN" BEHAVIOR="SLIDE">Slide</MARQUEE>

      • reconnecting 11 hours ago ago

        <MARK>FTFY</MARK>

  • WA 10 hours ago ago

    And yet, no native select + search combined, which is a very common kind of list. The datalist is basically unusable, because you don't know any of the options.

  • ksec 9 hours ago ago

    Sigh. Just when I was cheering Safari, finally both on Desktop and on Mobile have gotten to the point of good enough.

    And then to find out the list don't work on Safari iOS.

  • zombot 11 hours ago ago

    What I always wanted to know about lists and never dared to ask!

  • ale 7 hours ago ago

    Now i need one that explains the css counters

    • paceaux 4 hours ago ago

      I will probably write an entirely separate article just on the CSS options for lists. So ... don't hold your breath. But that will come. Eventually.

  • einpoklum 10 hours ago ago

    tl;dr: You _do_ know HTML lists, they're basicaly like they used to be 20 years ago. But there are HTML form controls which are list-like and this will tell you about them: <select> and <datalist> which have <option> elements and <menu> which has <li> elements.

    It's a nice read, not very long and you can kind of leisurely skim it.

  • MagicMoonlight 11 hours ago ago

    That’s a really good article. It’s nice to see something which isn’t slop.

    • paceaux 4 hours ago ago

      I'm writing articles like this just because I think the internet deserves some humanity for a change. Thanks for noticing.

    • zamadatix 6 hours ago ago

      Yet the article and comments still feel the need to talk about AI when it was not otherwise involved. The inescapable topic!

      • paceaux 4 hours ago ago

        I'm not quite sure what you mean about that… I do have a disclaimer in the sidebar that makes it clear that I'm not using AI — but that's solely so that people can appreciate that I put actual effort into writing it.

        • zamadatix an hour ago ago

          The reply was meant to be on the GP, I must have-mis tapped, but since we're here now :D

          > No need to ask AI for a summary; I’ll just give you the ending up front.

          It's easy to miss how often we bring AI up about in conversation or writing given just how dominating a topic it can be in every circle these days.

          • paceaux 22 minutes ago ago

            ahhh.

            Yeah I put it there just to discourage folks from asking some LLM to summarize it.

            I really don't want my content fed to Sam Altman.

    • lucb1e 9 hours ago ago

      Somehow I'm still in the mode where I'm surprised where it is, rather than when it isn't, but yeah it's annoyingly often. Do you come across it so much that it's your default expectation now?

  • asveikau 11 hours ago ago

    Title reminds me of Joni Mitchell.

        I've looked at lists from both sides now
        From give and take and still somehow
        It's HTML lists' illusions I recall 
        I really don't know HTML lists at all
    • ale 10 hours ago ago

      I thought of the 2000 version first which made this much funnier in my head