You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Slick滑块:如何让首个元素始终与初始内容宽度一致

解决Slick滑块首个元素宽度保持初始值的问题

问题背景

我们使用Slick滑块实现可变宽度效果,当前滑块效果如图:
当前效果截图

期望实现首个元素始终保持初始宽度并左对齐的效果,如图:
期望效果截图

相关代码如下:

HTML代码

<link href='http://fonts.googleapis.com/css?family=Lato:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/slick/slick.css" />
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/slick/slick-theme.css" />
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/css/style.css">
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/css/prism.css" />

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.7.1/modernizr.min.js" type="text/javascript"></script>
<script src="https://kenwheeler.github.io/slick/js/native.js" type="text/javascript"></script>

<div class="slider variable-width">
  <div style="width: 200px;background-color:red;">
    <p>200</p>
  </div>
  <div style="width: 200px;background-color:red;">
    <p>175</p>
  </div>
  <div style="width: 200px;background-color:red;">
    <p>150</p>
  </div>
  <div style="width: 200px;background-color:red;">
    <p>300</p>
  </div>
  <div style="width: 200px;background-color:red;">
    <p>225</p>
  </div>
  <div style="width: 200px;background-color:red;">
    <p>125</p>
  </div>
</div>

<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="https://kenwheeler.github.io/slick/slick/slick.js"></script>
<script type="text/javascript" src="https://kenwheeler.github.io/slick/js/scripts.js"></script>
<script type="text/javascript" src="https://kenwheeler.github.io/slick/js/prism.js"></script>

无关的Disqus代码

var disqus_shortname = 'slickcarousel';

(function () {
    var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
    dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
    (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
})();

解决方案

1. 修正滑块元素的宽度定义

你当前所有滑块子元素都设置了width:200px,这和内部标注的宽度数值矛盾,先把每个元素的宽度改成对应数值:

<div class="slider variable-width">
  <div style="width: 200px;background-color:red;">
    <p>200</p>
  </div>
  <div style="width: 175px;background-color:red;">
    <p>175</p>
  </div>
  <div style="width: 150px;background-color:red;">
    <p>150</p>
  </div>
  <div style="width: 300px;background-color:red;">
    <p>300</p>
  </div>
  <div style="width: 225px;background-color:red;">
    <p>225</p>
  </div>
  <div style="width: 125px;background-color:red;">
    <p>125</p>
  </div>
</div>

2. 调整Slick初始化参数

问题核心是默认初始化可能开启了centerMode(居中模式),导致第一个元素被缩放或偏移。直接在页面末尾添加自定义初始化代码(替代原scripts.js的初始化):

$('.variable-width').slick({
  variableWidth: true, // 启用可变宽度
  centerMode: false, // 关闭居中模式,让元素左对齐
  slidesToShow: 1, // 初始显示1个元素
  slidesToScroll: 1,
  infinite: false, // 关闭无限滚动,避免第一个元素被隐藏
  arrows: true // 显示箭头控制
});

3. 移除默认样式干扰

添加自定义CSS消除滑块容器的默认内边距:

.variable-width {
  padding: 0 !important;
}
.variable-width .slick-slide {
  float: left;
  height: auto;
}

完整可运行代码

<link href='http://fonts.googleapis.com/css?family=Lato:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/slick/slick.css" />
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/slick/slick-theme.css" />
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/css/style.css">
<link rel="stylesheet" type="text/css" href="https://kenwheeler.github.io/slick/css/prism.css" />
<style>
  .variable-width {
    padding: 0 !important;
  }
  .variable-width .slick-slide {
    float: left;
    height: auto;
  }
</style>

<script src="//cdnjs.cloudflare.com/ajax/libs/modernizr/2.7.1/modernizr.min.js" type="text/javascript"></script>
<script src="https://kenwheeler.github.io/slick/js/native.js" type="text/javascript"></script>

<div class="slider variable-width">
  <div style="width: 200px;background-color:red;">
    <p>200</p>
  </div>
  <div style="width: 175px;background-color:red;">
    <p>175</p>
  </div>
  <div style="width: 150px;background-color:red;">
    <p>150</p>
  </div>
  <div style="width: 300px;background-color:red;">
    <p>300</p>
  </div>
  <div style="width: 225px;background-color:red;">
    <p>225</p>
  </div>
  <div style="width: 125px;background-color:red;">
    <p>125</p>
  </div>
</div>

<script src="https://code.jquery.com/jquery-1.11.0.min.js"></script>
<script src="https://code.jquery.com/jquery-migrate-1.2.1.min.js"></script>
<script type="text/javascript" src="https://kenwheeler.github.io/slick/slick/slick.js"></script>
<script type="text/javascript" src="https://kenwheeler.github.io/slick/js/prism.js"></script>
<script type="text/javascript">
  $('.variable-width').slick({
    variableWidth: true,
    centerMode: false,
    slidesToShow: 1,
    slidesToScroll: 1,
    infinite: false,
    arrows: true
  });
</script>

这样设置后,首个滑块元素会保持200px的初始宽度并左对齐,完全匹配你的期望效果。

内容的提问来源于stack exchange,提问作者user20508390

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:45:37