Reputation: 95
I have made a simple menu but the list items cannot be seen properly in portrait view. They overlap each other.
I tried to add font-size: 0;
to the <ul>
but that doesn't change anything.
How can I create spaces between the list items in mobile view when they are vertical?
ul#minimenu {
padding: 0;
margin-left: 8%;
}
ul#minimenu li {
display: inline;
}
ul#minimenu li a {
background-color: green;
color: white;
padding: 10px 10px;
text-decoration: none;
border-radius: 4px 4px 0 0;
}
ul#minimenu li a:hover {
background-color: orange;
}
/*-------------------mobile-------------------*/
@media screen and (max-width: 900px) {
ul#minimenu li {
display: block;
}
}
<br>
<DIV style="text-align : center;">
<ul id="minimenu">
<li>
<B>levels :</B>
</li>
<li><a href="level1.html">Level 1</a>
</li>
<li><a href="level2.html">Level 2</a>
</li>
<li><a href="level3.html" style="background-color: #c0c0c0; color: black;padding: 10px 10px;text-decoration: none;border-radius: 4px 4px 0 0;cursor:default;">Level 3</a>
</li>
</ul>
Upvotes: 0
Views: 2560
Reputation: 96
how are you?
I have made some changes in the html structure / semantics because some tags are deprecated and inline css is not recommended.
It is possible to be done in several ways, I made two of them so that you can choose the best one for you.
V2
- (Recommended)
http://codepen.io/CesarCEARA/pen/OWggJX http://codepen.io/CesarCEARA/pen/OWggJX
ul#minimenu {
display: inline-block;
list-style: none;
padding: 0;
}
ul#minimenu li {
float: left;
margin-right: 5px;
}
ul#minimenu li a {
background-color: green;
border-radius: 4px 4px 0 0;
color: #fff;
padding: 10px;
text-decoration: none;
}
ul#minimenu li a:hover {
background-color: orange;
}
ul#minimenu li a.disabled {
background-color: #c0c0c0;
color: #000;
cursor: default;
}
/*-------------------mobile-------------------*/
@media screen and (max-width: 900px) {
ul#minimenu li {
clear: both;
display: flex;
margin-right: 0;
margin-bottom: 5px;
}
ul#minimenu li:last-child {
margin-bottom: 0;
}
}
<div style="text-align: center;">
<ul id="minimenu">
<li>
<strong>levels: </strong>
</li>
<li>
<a href="level1.html">Level 1</a>
</li>
<li>
<a href="level2.html">Level 2</a>
</li>
<li>
<a href="level3.html" class="disabled">Level 3</a>
</li>
</ul>
</div>
V1
http://codepen.io/CesarCEARA/pen/LxLyqq http://codepen.io/CesarCEARA/pen/LxLyqq
Regards, Cesar Barros
Upvotes: 1
Reputation: 42304
What you are missing is overflow:hidden
in your menu's li
elements:
@media screen and (max-width: 900px)
ul#minimenu li {
display: block;
overflow: hidden;
margin-bottom: 2px;
}
}
You may also wish to add some margin-bottom
, as above. I've created a Stack Snippet showcasing this below.
Hope this helps! :)
ul#minimenu {
padding: 0;
margin-left: 8%;
}
ul#minimenu li {
display: inline;
}
ul#minimenu li a {
background-color: green;
color: white;
padding: 10px 10px;
text-decoration: none;
border-radius: 4px 4px 0 0;
}
ul#minimenu li a:hover {
background-color: orange;
}
/*-------------------mobile-------------------*/
@media screen and (max-width: 900px) {
ul#minimenu li {
display: block;
overflow: hidden;
margin-bottom: 2px;
}
}
<br>
<DIV style="text-align : center;">
<ul id="minimenu">
<li>
<B>levels :</B>
</li>
<li><a href="level1.html">Level 1</a>
</li>
<li><a href="level2.html">Level 2</a>
</li>
<li><a href="level3.html" style="background-color: #c0c0c0; color: black;padding: 10px 10px;text-decoration: none;border-radius: 4px 4px 0 0;cursor:default;">Level 3</a>
</li>
</ul>
Upvotes: 1
Reputation: 53674
The a
elements in the li
are what have the background colors that are overlapping, and the a
element is set to display: inline;
by default. Inline elements do not affect the position of other elements in the DOM with vertical values (like vertical margin/padding/etc). To have the element take up vertical space, either make it display: block;
or display: inline-block;
.
ul#minimenu {
padding: 0;
margin-left: 8%;
}
ul#minimenu li {
display: inline;
}
ul#minimenu li a {
background-color: green;
color: white;
padding: 10px 10px;
text-decoration: none;
border-radius: 4px 4px 0 0;
}
ul#minimenu li a:hover {
background-color: orange;
}
/*-------------------mobile-------------------*/
@media screen and (max-width: 900px) {
ul#minimenu li {
display: block;
}
ul#minimenu li a {
display: inline-block;
}
}
<br>
<DIV style="text-align : center;">
<ul id="minimenu">
<li>
<B>levels :</B>
</li>
<li><a href="level1.html">Level 1</a>
</li>
<li><a href="level2.html">Level 2</a>
</li>
<li><a href="level3.html" style="background-color: #c0c0c0; color: black;padding: 10px 10px;text-decoration: none;border-radius: 4px 4px 0 0;cursor:default;">Level 3</a>
</li>
</ul>
Upvotes: 2
Reputation: 1013
Try adding a display: inline-block;
to your links like this;
ul#minimenu {
padding: 0;
margin-left:8%;
}
ul#minimenu li {
display: inline;
}
ul#minimenu li a {
background-color: green;
color: white;
padding: 10px 10px;
text-decoration: none;
border-radius: 4px 4px 0 0;
}
ul#minimenu li a:hover {
background-color: orange;
}
/*-------------------mobile-------------------*/
@media screen and (max-width:900px)
{
ul#minimenu li {
display: block;
}
ul#minimenu li a{
display:inline-block;
}
}
<ul id="minimenu">
<li><B>levels :</B></li>
<li><a href="level1.html" >Level 1</a></li>
<li><a href="level2.html" >Level 2</a></li>
<li><a href="level3.html" style="background-color: #c0c0c0; color: black;padding: 10px 10px;text-decoration: none;border-radius: 4px 4px 0 0;cursor:default;">Level 3</a></li>
</ul>
Upvotes: 2