Home > front end >  CSS heml, JS mega menu
CSS heml, JS mega menu

Time:09-26

Please help. When mouseover on "Products" tab the "services" items shifts to the right. I need help on the CSS settings.

* {
  box-sizing: border-box;
}

body {
  margin: 0;
}

.navbar {
  overflow: hidden;
  background-color: #333;
  font-family: Arial, Helvetica, sans-serif;
}

.navbar a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font: inherit;
  margin: 0;
}

.navbar a:hover,
.dropdown:hover .dropbtn {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  width: 100%;
  position: relative;
  left: 0;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}

.dropdown-content .header {
  background: red;
  padding: 4px;
  color: white;
}

.dropdown:hover .dropdown-content {
  display: block;
}


/* Create three equal columns that floats next to each other */

.column {
  float: left;
  width: 33.33%;
  padding: 10px;
  background-color: #ccc;
  height: 250px;
}

.column a {
  float: none;
  color: black;
  padding: 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.column a:hover {
  background-color: #ddd;
}


/* Clear floats after the columns */

.row:after {
  content: "";
  display: table;
  clear: both;
}
<table width=960 border=0 cellspacing=0 cellpadding=0 align=center bgcolor='#bbeeff' style='padding:10px'>
  <tr>
    <td>

      <div class="navbar">

        <div class="dropdown">
          <button class="dropbtn">Products 
          <i class="fa fa-caret-down"></i>
        </button>

          <div class="dropdown-content">
            <!-- <div class="header">
            <h2>...</h2>
          </div>   -->
            <div class="row">
              <div class="column">
                <h3>Category 1</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 2</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 3</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
            </div>
          </div>
        </div>


        <div class="dropdown">
          <button class="dropbtn">Services 
          <i class="fa fa-caret-down"></i>
        </button>

          <div class="dropdown-content">
            <!-- <div class="header">
            <h2>...</h2>
          </div>  -->
            <div class="row">
              <div class="column">
                <h3>Category 1</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 2</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 3</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
            </div>
          </div>
        </div>

      </div>

      <div style="padding:16px">
        <p>home page ....</p>
      </div>

    </td>
  </tr>
</table>

CodePudding user response:

.dropdown-content {
  position: absolute;
  position: relative;
}

These two are mutually exclusive. What you actually want is to put position: relative on the parent element, .dropdown.

You will also have to remove overflow: hidden on the parent .dropdown and .navbar or the dropdown, which is outside of the element's frame, will not show.

Finally, because you've floated everything and nothing has a defined width, you will have to set a non-% width/height on some elements. I added height: 46px to your navbar and width: 500px to your .row.

* {
  box-sizing: border-box;
}

body {
  margin: 0;
}

.navbar {
  height: 46px;
  background-color: #333;
  font-family: Arial, Helvetica, sans-serif;
}

.navbar a {
  float: left;
  font-size: 16px;
  color: white;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
}

.dropdown {
  float: left;
  position: relative;
}

.dropdown .dropbtn {
  font-size: 16px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font: inherit;
  margin: 0;
}

.navbar a:hover,
.dropdown:hover .dropbtn {
  background-color: red;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  width: 100%;
  left: 0;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}

.dropdown-content .header {
  background: red;
  padding: 4px;
  color: white;
}

.dropdown:hover .dropdown-content {
  display: block;
}


/* Create three equal columns that floats next to each other */

.row
{
  width: 500px;
}

.column {
  float: left;
  width: 33.33%;
  padding: 10px;
  background-color: #ccc;
  height: 250px;
}

.column a {
  float: none;
  color: black;
  padding: 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.column a:hover {
  background-color: #ddd;
}


/* Clear floats after the columns */

.row:after {
  content: "";
  display: table;
  clear: both;
}
<table width=960 border=0 cellspacing=0 cellpadding=0 align=center bgcolor='#bbeeff' style='padding:10px'>
  <tr>
    <td>

      <div class="navbar">

        <div class="dropdown">
          <button class="dropbtn">Products 
          <i class="fa fa-caret-down"></i>
        </button>

          <div class="dropdown-content">
            <!-- <div class="header">
            <h2>...</h2>
          </div>   -->
            <div class="row">
              <div class="column">
                <h3>Category 1</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 2</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 3</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
            </div>
          </div>
        </div>


        <div class="dropdown">
          <button class="dropbtn">Services 
          <i class="fa fa-caret-down"></i>
        </button>

          <div class="dropdown-content">
            <!-- <div class="header">
            <h2>...</h2>
          </div>  -->
            <div class="row">
              <div class="column">
                <h3>Category 1</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 2</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
              <div class="column">
                <h3>Category 3</h3>
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
            </div>
          </div>
        </div>

      </div>

      <div style="padding:16px">
        <p>home page ....</p>
      </div>

    </td>
  </tr>
</table>

  • Related