Reputation: 655
Getting some strange behaviour with nowrap and list items. How do I get the padding to apply to the "Testing 123" li properly in chrome? (The "3" from testing 123 is outside the defined width and encroaches on the padding).
Essentially what I'm trying to achieve is that the ul will be as wide as the widest li, hence the use of float: left. But at the same time I want to keep the dashed border, li padding and keep the text of each item on the same line, hence white-space: nowrap.
HTML:
<ul>
<li>Some</li>
<li>Content</li>
<li>Testing 123</li>
</ul>
CSS:
ul {
float: left;
padding: 0;
margin: 0;
}
li {
padding: 10% 15%;
border-bottom: 1px dashed #333;
list-style-type: none;
white-space: nowrap;
font-size: 2em;
}
Upvotes: 0
Views: 135
Reputation: 10070
OK, extending from comment:
The root problem is that, your ul
is auto-width-ed, but your li
s use percentage padding, so when browsers come to render li
, it needs to calculate how many actual padding should give, but then find that it can't, for there's no width info on their parent.
On this fiddle: http://jsfiddle.net/T9emf/3/, use Chrome DevTools to toggle display:inline-block
and width:auto
on and off repeatedly and observe the li
s getting different size. The reason for that is since browser can't directly decide how many padding should give, it may try to decide later, so whenever layout changes, the li
s may shift.
To fix this problem one possible way would be to give absolute padding to li
s, like this:
ul {
/* float: left;*/
display:inline-block;
}
li {
padding: 1ex 1em;
}
Adjust the padding value to meet visual sweet spot.
The upside of em
is that it has the possible to zoom in and out nicely, as it is a percentage unit bind to font size.
Upvotes: 1
Reputation: 191
Adding the width:100%;
to the style of "li" will resolve your problem.
The reason is that, the "li" element has a "10" left padding, but the border is drawn with the exact width of the text. Then it looks like the text overflows.
Upvotes: 0