user1729894
user1729894

Reputation: 95

Space between the items in <ul> <li> in responsive design

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

Answers (4)

Cesar Barros
Cesar Barros

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

Obsidian Age
Obsidian Age

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

Michael Coker
Michael Coker

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

Tim Barnett
Tim Barnett

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

Related Questions