cssmenuhorizontallist

How to display menu subitems as a block


I have a menu that displays sub-items in a vertical list. I would like to display them horizontally but can't see how to do that. Here is my jsfiddle. So instead of displaying as

First sub-item
Second sub-item

It should be

First sub-item  Second sub-item

The width for the list should be whatever is available so that the items will appear correctly in a phone as well as a desktop. here's the code I'm using. Would someone please explain how to do this?

    <style>
    ul {
        list-style-type: none;
        margin: 0;
        padding: 0;
    }

    ul li {
        display: inline-block;
        width: 10em;
        height: 2em;
        line-height: 2em;
        position: relative;
        border-bottom: 2px solid #ccc;
    }

    ul li:hover {
        background-color: #ffa;
    }

    ul li ul {
        display: none;
        position: absolute;
        top: 2em;
        left: 0;
    }

    ul li:hover ul {
        display: block;
    }

    ul li ul li {
        display: list-item;
        position: relative;
    }

    ul li ul li ul {
        display: none;
        position: absolute;
        top: 0;
        left: 10em;
    }

    ul li ul li ul li {
        display: none;
    }

    ul li ul li:hover ul {
        display: block;
    }

    ul li ul li:hover ul li {
        display: list-item;
    }
    </style>

    <ul>
        <li>First list item</li>
        <li>Second list item</li>
        <li>Third, with a dropdown
            <ul>
                <li>First sub-item</li>
                <li>Second sub-item</li>
                <li>Third, with a fly-out
                    <ul>
                        <li>Flyout one</li>
                        <li>Flyout two</li>
                        <li>Flyout three</li>
                    </ul>
                </li>
                <li>Fourth sub-item</li>
            </ul>
        </li>
        <li>Fourth list item</li>
    </ul>

Solution

  • To show them horizontally you just need to add display:flex on hover instead of display:block. Hope this is helpful to you.

    ul {
        list-style-type: none;
        margin: 0;
        padding: 0;
    }
    
    ul li {
        display: inline-block;
        width: 10em;
        height: 2em;
        line-height: 2em;
        position: relative;
        border-bottom: 2px solid #ccc;
    }
    
    ul li:hover {
        background-color: #ffa;
    }
    
    ul li ul {
        display: none;
        position: absolute;
        top: 2em;
        left: 0;
    }
    
    ul li:hover ul {
        display: flex;
    }
    
    ul li ul li {
        display: list-item;
        position: relative;
    }
    
    ul li ul li ul {
        display: none;
        position: absolute;
        top: 2em;
        left: 0em;
    }
    
    ul li ul li ul li {
        display: none;
    }
    
    ul li ul li:hover ul {
        display: flex;
    }
    
    ul li ul li:hover ul li {
        display: list-item;
    }
    <ul>
        <li>Main Menu
            <ul>
                <li>First sub-item</li>
                <li>Second sub-item</li>
                <li>Third sub-item</li>
                <li>Fourth sub-item
                    <ul>
                        <li>first flyout</li>
                        <li>second flyout</li>
                        <li>third flyout</li>
                    </ul>
                </li>
            </ul>
        </li> 
    </ul>