我需要显示一个图像库,每个图像上都有一个图标和一个数字。
这些元素位于叠加DIV内部,显示鼠标何时结束。
我正在尝试做两件事:
投票div应在叠加div内垂直对齐;
我希望根据图像宽度调整心脏字体大小。
这两个问题可以解决吗?
我的代码和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;
}
答案 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';
}
答案 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。