如何在汉堡内垂直居中汉堡图标?

时间:2017-10-28 16:30:16

标签: html css html5 css3 responsive-design

我有一个导航菜单,其中包含一个由3 <span>制作的汉堡图标,该图标位于另一个元素中:

&#13;
&#13;
.navbar {
  width: 100%;
  color: #fff;
  background-color: #df0024;
  padding: 1% 0;
}

.tog {
  display: flex;
  cursor: pointer;
  float: right;
  width: 6%;
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  align-items: center;
  justify-content: center;
  height: auto;
}


/*This is the div that contain the burger 3 layers*/

#nav-icon {
  height: -webkit-fill-available;
  height: -moz-fill-available;
  height: -o-fill-available;
  height: fill-available;
  position: relative;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: pointer;
}

/*/The style of each of the burger icon 3 layers*/
#nav-icon span {
  display: block;
  position: absolute;
  height: 3.1vh;
  width: 100%;
  background: white;
  border-radius: 9px;
  opacity: 1;
  left: 0;
  -webkit-transform: rotate(0deg);
  -moz-transform: rotate(0deg);
  -o-transform: rotate(0deg);
  transform: rotate(0deg);
  -webkit-transition: .25s ease-in-out;
  -moz-transition: .25s ease-in-out;
  -o-transition: .25s ease-in-out;
  transition: .25s ease-in-out;
}

#nav-icon span:nth-child(1) {
  top: 0px;
}

#nav-icon span:nth-child(2) {
  top: 12px;
}

#nav-icon span:nth-child(3) {
  top: 24px;
}
&#13;
<nav class="navbar">
  <div class="logo">
    <a href="#"><img src="" alt='Logo' /></a>
  </div>
  <div id='tog' class="tog">
    <label for="toggle" id='nav-icon'>
    			 <div class='icon-container'>
    				 <span></span>
    				 <span></span>
    				 <span></span>	
    			 </div>								  
        	  </label>
  </div>
</nav>
&#13;
&#13;
&#13;

如何将#nav-icon span垂直居中#nav-icon?我想要的只是将汉堡图标居中,所以我不在乎改变包含汉堡图标的其他元素样式。

2 个答案:

答案 0 :(得分:1)

我必须进行大量调整才能完成这项工作,但我使用了一个很好的垂直居中技巧,我知道涉及top: 50%;transition: translateY(-50%);。如果您将这些应用于子div,则它将在大小的父级中垂直居中(父级也应该具有位置relativeabsolute)。

我将这些样式应用到代码中的.icon-container

&#13;
&#13;
.navbar{
    width: 100%;
    position: relative;
    color: #fff;
    background-color: #df0024;
    padding: 1% 0;
}

.tog {
    display: flex;
    cursor: pointer;
    float: right;
    width: 6%;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    align-items: center;
    justify-content: center;
    height: auto;
}

/*This is the div that contain the burger 3 layers*/
#nav-icon{
  position: absolute;
  top:0;
  bottom:0;
  left:0;
  right: 0;
  -webkit-transition: .5s ease-in-out;
  -moz-transition: .5s ease-in-out;
  -o-transition: .5s ease-in-out;
  transition: .5s ease-in-out;
  cursor: pointer;
}

.icon-container {
  padding: 0 5px;
  box-sizing: border-box;
  position: relative;
  top: 50%;
  -ms-transform: translateY(-50%); /* IE 9 */
  -webkit-transform: translateY(-50%); /* Chrome, Safari, Opera */
  transform: translateY(-50%);
}


 #nav-icon span{
        display: block;
        width: 100%;
        height: 5px;
        margin-bottom: 3px;
        background: white;
        border-radius: 9px;
        opacity: 1;
        -webkit-transition: .25s ease-in-out;
        -moz-transition: .25s ease-in-out;
        -o-transition: .25s ease-in-out;
        transition: .25s ease-in-out;
    }
&#13;
<nav class="navbar">
    <div class="logo">
          <a  href="#"><img src="" alt='Logo'/></a>
    </div>
    <div id='tog' class="tog">
          <label for="toggle" id='nav-icon'>
             <div class='icon-container'>
                 <span></span>
                 <span></span>
                 <span></span>  
             </div>                               
          </label>
    </div>
</nav>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

如果你没有反对flex,你也可以放弃绝对定位。

.navbar {
  display: flex;
  align-items: center;/* vertical-centering */
  color: #fff;
  background-color: #df0024;
  padding: 1% 0;
  /* DEMO PURPOSE ONLY to show vertical centering */
  transition:0.25s;
  height: 100px;
  background-image:linear-gradient(to top, transparent 50%, rgba(255,255,255,0.15) 50%);
}
.navbar:hover {height:200px;}
  /* end -- DEMO PURPOSE ONLY to show vertical centering */
nav a {
/* demo purpose , useless about centering  */
  margin: 0 0.5em;
  color: white;
}



.tog {
  cursor: pointer;
  width: 1.5em;
  margin-left: auto;/* goes all the way to the right side */
}


/*This is the div that contain the burger 3 layers*/

#nav-icon {
  display: block;
  transform: rotate(0deg);
  transition: .5s ease-in-out;
  cursor: pointer;
}


/*The style of each of the burger icon 3 layers*/

#nav-icon span {
  display: block;
  background: white;
  margin: 0.25em 0;
  border-radius: 9px;
  opacity: 1;
  height: 0.25em;
  transform: rotate(0deg);
  transition: .25s ease-in-out;
  box-shadow: 1px 1px 1px;
}
<nav class="navbar">
  <div class="logo">
    <a href="#"><img src="" alt='Logo' /></a>
  </div>
  <a href="#">another link ? </a>
  <div id='tog' class="tog">
    <label for="toggle" id='nav-icon'>
     <div class='icon-container'>
    	 <span></span>
    	 <span></span>
    	 <span></span>	
    	</div>								  
    </label>
  </div>
</nav>