垂直居中div并调整字体大小

时间:2015-01-07 14:03:25

标签: html css

我需要显示一个图像库,每个图像上都有一个图标和一个数字。

这些元素位于叠加DIV内部,显示鼠标何时结束。

我正在尝试做两件事:

  1. 投票div应在叠加div内垂直对齐;

  2. 我希望根据图像宽度调整心脏字体大小。

  3. 这两个问题可以解决吗?

    我的代码和JSFiddle Example

    <div class="gallery">
        <div class="image">
            <img src="http://placehold.it/600x600" alt="" />
            <div class="overlay">
                <div class="vote">
                    <a href="#"><i class="fa fa-heart"></i></a>
                    <span>350</span>
                </div>
            </div>
        </div>
        <div class="image">
            <img src="http://placehold.it/600x600" alt="" />
            <div class="overlay">
                <div class="vote">
                    <a href="#"><i class="fa fa-heart"></i></a>
                    <span>350</span>
                </div>
            </div>
        </div>
        <div class="image">
            <img src="http://placehold.it/600x600" alt="" />
            <div class="overlay">
                <div class="vote">
                    <a href="#"><i class="fa fa-heart"></i></a>
                    <span>350</span>
                </div>
            </div>
        </div>
        <div class="image">
            <img src="http://placehold.it/600x600" alt="" />
            <div class="overlay">
                <div class="vote">
                    <a href="#"><i class="fa fa-heart"></i></a>
                    <span>350</span>
                </div>
            </div>
        </div>
        <div class="image">
            <img src="http://placehold.it/600x600" alt="" />
            <div class="overlay">
                <div class="vote">
                    <a href="#"><i class="fa fa-heart"></i></a>
                    <span>350</span>
                </div>
            </div>
        </div>    
    </div> 
    
    * {
      -webkit-box-sizing: box-model;
      -moz-box-sizing: box-model;
      box-sizing: box-model;
    }
    
    *:before, *:after {
        -webkit-box-sizing: inherit;
        -moz-box-sizing: inherit;
        box-sizing: inherit;
    }
    
    .gallery {  
        overflow: hidden;
    }
    
    .image {    
       position: relative;
       text-align: center;
       float: left;
       width: 100%;
    }
    
    @media screen and (min-width: 600px) {   
        .image {
            width: 50%;
        }
    }
    
    img {
      display: block;
      height: auto;  
      max-width: 100%;
      outline: 0; 
    }
    
    .overlay {    
        background-color: #404040;      
        color: #FFFFFF;
        display: none;
        height: 100%;      
        font-size: 0.75rem;      
        padding: 4px;
        position: absolute;        
        top: 0;      
        overflow: hidden;
        width: 100%;    
    }
    
    .image:hover .overlay {
        display: block;
        -moz-opacity: 0.8;
        -khtml-opacity: 0.8;
        -webkit-opacity: 0.8;
        opacity: 0.8;    
    }
    
    .vote {
    }
    
    .vote a {
        text-decoration: none;
    }
    
    .vote i {     
        color: red;   
        display: block;
        line-height: 1.0;
        font-size: 8rem;             
    }
    
    .vote span {
        display: block;
        font-size: 2rem;
    }
    

2 个答案:

答案 0 :(得分:1)

您可以将vote类放在这样的中心:

.vote {
  position: relative;
  top: 50%;
  transform: translateY(-50%)
}

请参阅http://zerosixthree.se/vertical-align-anything-with-just-3-lines-of-css/了解其工作原理。

缩放字体比较棘手,因为你使用的字体非常棒。我认为你不能用CSS做到这一点。

这是一个JavaScript解决方案,它将字体大小设置为每个图像高度的30%:

var images= document.querySelectorAll('.image');

for(var i = 0 ; i < images.length ; i++) {
  var height= images[i].offsetHeight;
  var heart= images[i].querySelector('.fa');
  var span= images[i].querySelector('span');
  heart.style.fontSize= span.style.fontSize= (height*0.3)+'px';
}

Fiddle

答案 1 :(得分:0)

好的,#1很简单:有多种可能的解决方案。实际上在不久前在互联网上发表了一篇非常好的文章:Vertical Centering With CSS

或者,您可以使用像flexbox这样的现代解决方案:

<div class="wrapper">
  <div>
    Centered vertically and horizontally
  </div>
</div>


.wrapper {
  display: flex;
  align-items: center;
  justify-content: center;
}

请记住在需要时添加前缀版本并检查caniuse.com以查看哪些浏览器在部署之前不支持此解决方案。

至于#2:我花了很长时间才弄清楚它实际上比我想象的容易得多:

.vote {
  font-size: 30vw; 
}
@media screen and (min-width: 600px) {   
  .vote {
    font-size:15vw;
  }
}

根据您的喜好调整值。同样:所有浏览器都不完全支持视口单元(咳嗽IE咳嗽),请检查caniuse。我刚才没有IE的副本,但我认为vw应该得到支持,所以我认为这里没有任何问题。请记住,iOS上的Safari会做一些奇怪的事情,虽然据我所知,这只影响vh而不是vw。