Page Widget How to - Creating a clean unified border around an li and its ul with CSS








Question

We would like to know how to creating a clean unified border around an li and its ul with CSS.

Answer

Revised from question http://stackoverflow.com/questions/7778918


<!--   w  w w. j a  va2 s . c  o  m-->
<!DOCTYPE html>
<html>
<head>
<style type='text/css'>
#header {
  position: relative;
  height: 64px;
}
#nav ul {
  list-style: none;
  margin: 0;
  padding: 0em;
  float: left;
  position: relative;
}

#nav li {
  float: left;
  margin-right: 25px;
}

#nav li#thisli:hover ul {
  padding: 0px;
  z-index: 350;
}

#nav li#thisli {
  background-color: #fff;
  border-top-right-radius: 5px 5px;
  border-top-left-radius: 5px 5px;
  -moz-border-top-left-radius: 5px 5px;
  -moz-border-top-right-radius: 5px 5px;
  -webkit-border-top-left-radius: 5px 5px;
  -webkit-border-top-right-radius: 5px 5px;
  border-top: 1px solid #fff;
  border-right: 1px solid #fff;
  border-left: 1px solid #fff;
}

#nav li#thisli:hover {
  background-color: #CCD9FF;
  border-top: 1px solid #99B3FF;
  border-right: 1px solid #99B3FF;
  border-bottom: 1px solid #CCD9FF;
  border-left: 1px solid #99B3FF;
}

#children li:hover {
  background-color: #99B3FF;
}

ul#children li:first-child {
  border-top-right-radius: 5px 5px;
  -moz-border-top-right-radius: 5px 5px;
  -webkit-border-top-right-radius: 5px 5px;
  border-left: 1px solid #99B3FF;
  border-right: 1px solid #99B3FF;
  border-top: 1px solid #B4CDFF;
}

ul#children li:last-child {
  border-bottom-right-radius: 5px 5px;
  border-bottom-left-radius: 5px 5px;
  -moz-border-bottom-left-radius: 5px 5px;
  -moz-border-bottom-right-radius: 5px 5px;
  -webkit-border-bottom-left-radius: 5px 5px;
  -webkit-border-bottom-right-radius: 5px 5px;
  border-left: 1px solid #99B3FF;
  border-right: 1px solid #99B3FF;
  border-bottom: 1px solid #99B3FF;
  border-top: 1px solid #B4CDFF;
}

#nav li ul {
  display: none;
  padding-left: 0px;
  position: absolute;
  width: 120px;
}

#nav li:hover ul {
  display: block;
  z-index: 100;
  left: 0px;
}

#nav li a {
  display: block;
  padding: 0.5em;
}

#nav li li {
  width: 105%;
}
</style>
</head>
<body>
  <div id="header">
    <div id="nav">
      <ul>
        <li id="thisli"><a href="#">Main Element</a>
          <ul id="children">
            <li><a href="#">First Child</a></li>
            <li><a href="#">Second Child</a></li>
          </ul></li>
      </ul>
    </div>
  </div>
</body>
</html>

The code above is rendered as follows: