If flexbox is an option, you can make ul flexbox wrapper.
How it works?
display: flex creates a flexbox that has the ability to distribute spaces between children in different ways.
flex-wrap: wrap allows li to go to the next line depending on the content
justify-content: center has horizontal centering.
Vertically, li has the align-items: stretch property, which is the default - this allows the heights of li be equal in the row.
See the demo below:
ul { font-size: 0; max-width: 300px; text-align: center; display:flex; flex-wrap:wrap; justify-content:center; } li { vertical-align: top; display: inline-block; width: 30%; margin: 1%; background: grey; font-size: 12px; }
<ul> <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</li> <li>Lorem ipsum dolor sit amet.</li> <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</li> <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</li> <li>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</li> </ul>
source share