Anthony Chien
Anthony Chien

Reputation: 83

How to make text center of DIV both vetically and horizontally using percentage?

I am able to make my text in the center but using px values. When I try using percentage it is not working. I tried display:table; and display:table-cell and also display:flex; justify-content: center; //horizontal centering align-items:center; but it did not work.

My parent div has height: 7.7% .

Note: I have updated my full header code

Below is JSFIDDLE link:

https://jsfiddle.net/Anthony_Chien/f7n77068/#&togetherjs=gR8VEaLgqR

HTML:

    <div class="vav-main">
    <nav class="navbar navbar-default navheader">
        <div class="navbar-header navlogo">
            <span><a href ="#">DS</a></span>
        </div>
        <div class="navheadersec2">
            <div class="navheadermargin">
                <div class="btn-group">
                    <button class="btn btn-default btn-md dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
                        <span class="headerspanbox"> <div class="headerdivbox"></div> </span>Default <span class="caret"></span>
                    </button>
                    <ul class="dropdown-menu">
                        <li><a href="#">Action</a></li>
                        <li><a href="#">Another action</a></li>
                        <li><a href="#">Something else here</a></li>
                    </ul>
                </div>

                <!--<div class="header-icons">
                    <span class="icons-group"><img src="assets/images/icons/undo.png" /></span>
                    <span class="icons-label">Undo</span>
                </div>-->

                <span class="btn-group icons-grp"><img src="assets/images/icons/undo.png" /><br>Undo</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/redo.png" /><br>Redo</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/zoom-in.png" /><br></span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/zoom-out.png" /><br></span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/group.png" /><br>Group</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/pattern.png" /><br>Pattern</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/lock.png" /><br>Lock</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/select.png" /><br>Select</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/resize.png" /><br>Scale</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/rotate.png" /><br>Rotate</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/rotate.png" /><br>Forward</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/backward.png" /><br>Backward</span>
                <span class="btn-group icons-grp"><img src="assets/images/icons/panel.png" /><br>Panel</span>
            </div>
        </div>
        <div class="navheadersec3">
            <div class="navheadermargin">
                <div class="headersec3para">
                    <p class="headerpara">Code</p>
                    <p class="headerpara">Some text</p>
                </div>
                <p class="header-price">2,550</p>
                <span class="btn-group icons-grp info-icon"><img src="assets/images/icons/info.png" /></span>
                <p class="header-price add-to-cart">ADD</p>
            </div>
        </div>
    </nav>
</div>

CSS:

    .vav-main{
      width: 100%;
      height: 100%;
    }


    .navheader{
      width: 100%;
      height: 7.7%;
      background-color: #ffffff;
      border: solid 1px #b8b8b8;
     }

    .navlogo {
      width: 5%;
      height: 100%;
      background-color: #ffffff;
      position:relative; /* Add this property */
      transform:translate(-50% -50%); /* Add this property */
      top:50%; /* Add this property */
      left:50%; /* Add this property */
     }

    .navlogo span {
      font-family: SourceSansPro;
      font-size: 24px;
      font-weight: bold;
     }

    .navheadersec2 {
      width: 64.76%;
      display: inline-block;
      border-right: solid 1px #b8b8b8;
      height: 100%;
    }

    .navheadersec3{
      width: 30.214%;
      display: inline-block;
      margin-left: -4px;
    }

    .navheadermargin .headersec3para{
      width: 30.53%;
      height: 100%;
      float: left;
      margin-left: 6.10%;
    }

    .headersec3para .headerpara:first-child{
      font-size: 12px;
      margin: 0px !IMPORTANT;
      font-weight: bold;
    }

    .headersec3para .headerpara{
      font-size: 10px;
      margin: 0px !IMPORTANT;
    }

    .header-price{
      margin: 0px;
      height: 100%;
      width: 16.03%;
      float: left;
      text-align: center;
      line-height: 34px;
      font-weight: bold;
      font-size: 18px;
      font-family: SourceSansPro;
    }

    .info-icon{
      margin: auto;
      text-align: center;
      line-height: 34px;
    }

    .info-icon > img{
      width: 20px;
      height: 20px;
    }

    .add-to-cart{
      width: 30.534%;
      font-size: 15px;
      color: #009cff;
    }

    .navheadermargin{
      margin-top: 10px;
      height: 34px;
      margin-bottom: 10px;
    }

    .navheadermargin .btn-group{
      margin-left: 1.3%;
      height: 100%;
      width: 13.510%;
      float: left;
    }

    .navheadermargin .header-icons{
      float: left;
      width: 24px;
      height: 100%;
    }

    .header-icons .icons-group{
      height: 21px;
    }

    .header-icons .icons-group img{
      height: 20px;
      width: 20px;
    }

    .header-icons .icons-label{
      height: 15px;
      font-family: SourceSansPro;
      font-size: 10px;
    }

    .navheadermargin .btn-group button{
      height: 100%;
      width: 100%;
    }

    .headerspanbox{
      display: inline-block;
    }

    .headerspanbox .headerdivbox{
      background-color: #1fb6ff;
      margin-right: 10px;
      height: 14px;
      width: 18px;
    }

Screenshot Image:

enter image description here

Upvotes: 2

Views: 172

Answers (5)

Freelancer
Freelancer

Reputation: 887

I don't modify on your code, I just write tinny block of code. Hope this will be helpful for you. As you see, the text inside lime block always align center by horizonal and middle by vertical.

$('#header .text').css('left', 'calc(50% - '+$('#header .text').css('width')+' / 2)');
$('#header .text').css('top', 'calc(50% - '+$('#header .text').css('height')+' / 2)');
#header{
  width:100%;
  height:200px;
  border:1px blue solid;
}
#box{
  width:30%;
  height:80%;
  background-color:lime;
  text-align:center;
  position:relative;
}
#box .text{
  border:1px red solid;
  position:absolute;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div id='header'>
<div id='box'>
  <div class='text'>abchghjghj</div>
</div>
</div>

Upvotes: 0

LKG
LKG

Reputation: 4192

.vav-main{
  width: 100%;
  height: 100%;
 }


.navheader{
  width: 100%;
  height: 7.7%;
  background-color: #ffffff;
  border: solid 1px #b8b8b8;
 }

.navlogo {
  width: 5%;
  height: 100%;
  background-color: #ffffff;
  position:relative; /* Add this property */
  transform:translate(-50% -50%); /* Add this property */
  top:50%; /* Add this property */
  left:50%; /* Add this property */
 }

.navlogo span {
  font-family: SourceSansPro;
  font-size: 24px;
  font-weight: bold;
 }
  
  .vav-main> .navbar {
   margin-bottom: 0px;
   min-height:initial;
 }
<div class="vav-main">
  <nav class="navbar navbar-default navheader">
    <div class="navbar-header navlogo">
        <span><a href ="#">DS....</a></span>
    </div>
 </nav>
</div>

You can use flex for achieve the same.

update fiddle below

working fiddle

.vav-main{
  width: 100%;
  height: 100%;
 }


.navheader{
  width: 100%;
  height: 7.7%;
  background-color: #ffffff;
  border: solid 1px #b8b8b8;
 }

.navlogo {
  height: 100%;
  width:100%;
  background-color: #ffffff;
  display:flex;
  justify-content:center;
  align-items:center;
  flex-flow:column nowrap;
 }

.navlogo span {
  font-family: SourceSansPro;
  font-size: 24px;
  font-weight: bold;
 }
 
 .navlogo span a {
   align-self:center;
 }
  .vav-main> .navbar {
   margin-bottom: 0px;
   min-height:initial;
 }
<div class="vav-main">
  <nav class="navbar navbar-default navheader">
    <div class="navbar-header navlogo">
        <span><a href ="#">DS....</a></span>
    </div>
 </nav>
</div>

Upvotes: 3

frnt
frnt

Reputation: 8795

Might be you are doing that using bootstrap if so then you could try it like as below, remove span tag as both a and span tags are inline elements, so you could use one if needed.

.nav-main {
  width: 100%;
  height: 100%;
}

.nav-main > .navheader {
  width: 100%;
  height: 7.7%;
  background-color: #ffffff;
}

.navlogo {
  width: 100%;
  height: 100%;
  background-color: #ffffff;
  text-align: center;
}

.navlogo > a {
  font-family: SourceSansPro;
  font-size: 24px;
  font-weight: bold;
  display: inline-block;
  margin-top: 8px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<div class="nav-main">
  <nav class="navbar navbar-default navheader">
    <div class="navbar-header navlogo">
      <a href="#">DS</a>
    </div>
    <div>
    </div>
  </nav>
</div>

Upvotes: 1

j-printemps
j-printemps

Reputation: 1298

You can use display: table; on your container, and display: table-cell; on your children, to center vertically and horizontally your navigation elements. Ypu can then set container and elements width based on the layout you need.

Possible example :

.vav-main{
  position: relative;
  width: 100%;
  height: 100%;
 }


.navbar{
  display: table;
  width: 100%;
  background-color: #ffffff;
  border: solid 1px #b8b8b8;
 }

.navlogo {
  height: 100;
  background-color: #ffffff;
  width: 5%;
 }

.navlogo span {
  font-family: SourceSansPro;
  font-size: 24px;
  font-weight: bold;
 }
 
 .navbar-header {
  display: table-cell;
  padding: 3.5%;
  vertical-align: middle;
  text-align: center;
 }
<div class="vav-main">
  <nav class="navbar navbar-default">
    <div class="navbar-header navlogo">
      <span><a href ="#">DS</a></span>
    </div>
    <div class="navbar-header">
       ........
    </div>
 </nav>
</div>

Upvotes: 2

Dhruvang Gajjar
Dhruvang Gajjar

Reputation: 598

.navheader{
  width: 100%;
  height: 100px;
  background-color: #ffffff;
  border: solid 1px #b8b8b8;
 }

.navlogo {
  width: 5%;
  height: 100%;
  background-color: #ffffff;
}
.navlogo span {
  font-family: SourceSansPro;
  font-size: 24px;
  font-weight: bold;
  display:table;height:100%;width:100px;
 }
 .navlogo span a{
	 display:table-cell;vertical-align:middle;text-align:center;margin:0;
 }
<div class="vav-main">
  <nav class="navbar navbar-default navheader">
    <div class="navbar-header navlogo">
        <span><a href ="#">DS</a></span>
    </div>
 </nav>
</div>

Upvotes: 1

Related Questions