I want to build a CSS menu with some restrictions:
<div> are unknown<li> is unknown<ul> must be not smaller than <div> width<li> must contain as many <li> as possible with max-width of <ul>What I want:

The problem is: actually <ul> respects initial width too much and doesn't expand. If you click 'Run the code snippet', you will see it.
HTML can be changed; flex and tricks are welcome; JS is not welcome; IE10 support is required.
div {
background: yellow;
display: inline-block;
padding: 20px 30px;
position: relative;
}
ul {
background: lightblue;
left: 0;
margin: 0;
max-width: 450px;
min-width: 100%;
padding: 0;
position: absolute;
top: 100%;
}
li {
background: orange;
display: inline-block;
margin: 2px;
padding: 20px 25px;
}
<div>Stabat mater dolorosa
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</div>
Here's the problem with your approach:
ul is a child of the div.ul is absolutely positioned within the boundaries of the div, because the div is the nearest positioned ancestor (position: relative)ul cannot extend past the width of the div, which is set to inline-block.li items must wrap based on the width of the div and the max-width is ignored.I suggest you try a different method.
With pure CSS and HTML table elements all your requirements can be met.
tr:first-child td span {
display: inline-block;
padding: 20px 30px;
background: yellow;
}
tr:last-child td {
max-width: 450px;
}
ul {
margin: 0;
padding: 0;
list-style-type: none;
background-color: lightblue;
}
li {
background: orange;
display: inline-block;
margin: 2px;
padding: 20px 25px;
}
<table>
<tr>
<td><span>Stabat mater dolorosa</span></td>
</tr>
<tr>
<td>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
</ul>
</td>
</tr>
</table>
- height and width of the parent
<div>are unknown NO PROBLEM- the number of
<li>is unknown NO PROBLEM<ul>must be not smaller than<div>width YES- one row of
<li>must contain as many<li>as possible withmax-widthof<ul>YES- No JavaScript YES
- IE10 support YES
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With