垂直对齐内容slickslider

22

我一直在努力让我的内容垂直居中,但真的无法解决。我尝试了adaptiveHeight参数,但它并没有做我想要的事情。

Fiddle:http://jsfiddle.net/fmo50w7n/400

这是代码的样子HTML:

<section class="slider">
    <div style="width:500px;height:200px">slide1</div>
    <div style="width:500px;height:300px;">slide2</div>
    <div style="width:500px;height:100px;">slide3</div>
</section>

CSS:

$c1: #3a8999;
$c2: #e84a69;

.slider {
    width: auto;
    margin: 30px 50px 50px;
}

.slick-slide {
    background: $c1;
    color: white;
    padding: 40px 0;
    font-size: 30px;
    font-family: "Arial", "Helvetica";
    text-align: center;
}

.slick-prev:before, 
.slick-next:before {
    color: black;    
}

.slick-dots {
    bottom: -30px;
}


.slick-slide:nth-child(odd) {
     background: $c2;
}

JS:

$(".slider").slick({
    autoplay: true,
    dots: true,
    variableWidth:true,
    responsive: [{ 
        breakpoint: 500,
        settings: {
            dots: false,
            arrows: false,
            infinite: false,
            slidesToShow: 2,
            slidesToScroll: 2
        } 
    }]
});

2
不确定CSS的可能性(滑块CSS是动态创建的,我可以看到,许多类在运行时添加),因此,您可以使用jQuery完成它:http://jsfiddle.net/fmo50w7n/403/ - sinisake
非常感谢!运行得非常好! - Sandro
3个回答

61

这个解决方案对我有效:

.slick-track {
  display: flex;
}
.slick-track .slick-slide {
  display: flex;
  height: auto;
  align-items: center;
  justify-content: center;
}

看这里的示例:

https://codepen.io/leggomuhgreggo/pen/mEmzGN


是的,弹性盒子确实有效。当更改自动生成的幻灯片CSS显示属性时,某些滑块存在问题,我认为过去使用slick时也遇到了这个问题,但今天它运行良好。 - Sambuxc

1
我认为,你需要将文本放在段落或标题中,这样可以只与特定内容进行交流,而不是整个div。
然后在你的CSS中进行如下操作:
p {
  margin: auto;
  position: absolute;
  top: 50%; left: 50%;
  -webkit-transform: translate(-50%,-50%);
      -ms-transform: translate(-50%,-50%);
          transform: translate(-50%,-50%);
}

你可能还需要指定一个宽度。这样做的作用是改变段落生成的起点,不再是从左上角,而是使用transform: translate从元素中心开始。然后使用绝对定位和top、left百分比设置为50%,使其与父元素的中心对齐。
因为我也在自学,所以我会尽力帮助你,祝你好运。 :)
来源:https://css-tricks.com/centering-percentage-widthheight-elements/

这个对图片也有效吗?我已经更新了代码。http://jsfiddle.net/fmo50w7n/404/ - Sandro

0

我一直在尝试解决这个问题。我找到了两种方法可以解决这个问题。

  1. 为每个幻灯片创建一个 div 容器

.slick-slide .slidecontainer {
    display: inline-block;
    vertical-align: middle;
    float:none;
}

  • 在 slick-track 中添加 display:flex 和 align-items:center。
  • .slick-track
    {
        position: relative;
        top: 0;
        left: 0;
        display: flex;
        align-items: center;
    }

    第二种方法适用于大多数情况。

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接