【问题标题】:Centering image on Nivo Slider using default theme?使用默认主题在 Nivo Slider 上居中图像?
【发布时间】:2012-02-25 19:34:20
【问题描述】:

对于使用 Nivo Slider 的任何人,是否有任何直接的方法(或不)使图像在滑块上居中?我知道 Nivo Slider 旨在显示完美“适合”盒子的图像(与我使用它的方式不同),但出于技术原因,我宁愿尝试将图像居中而不是使我的所有图像完美适合 Nivo 盒子的宽度和高度。目前我的 Nivo 幻灯片如下所示:

http://dl.dropbox.com/u/12453703/nivo.png

抱歉,我没有提供任何代码示例让我尝试此操作。我的 CSS 知识不是太丰富,我解决问题的大部分尝试要么是查看网络上的解决方案(并尝试应用上述解决方案),要么尝试在我的样式表中随机添加一行以尝试修复问题。

如果您想知道我正在使用哪些 CSS 文件,我使用的是默认主题,可以在此处下载: http://cloud.github.com/downloads/gilbitron/Nivo-Slider/nivo-slider2.7.1.zip

谢谢,我很感激。

【问题讨论】:

    标签: jquery css nivo-slider


    【解决方案1】:

    创建一个包装 div 并在该 div 中居中 nivoslider。

    HTML:

    <div id="wrap">
        <div id="slider" class="nivoSlider">
            <img src="images/slide.jpg" alt="" />
        </div>
    </div>
    

    CSS:

    #wrap { 
        position: relative;
        height: 500px; 
        width: 500px; 
    }
    #slider { 
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -125px; // Half the height
        margin-left: -125px; // Half the width
        height: 250px;
        width: 250px;
    }
    

    编辑:

    编辑demo.html 并添加一个额外的包装器,如下所示:

    <div class="slider-wrapper theme-default">
        <div class="ribbon"></div>
            <div id="slider-wrap"> <!-- Extra wrapper -->
                <div id="slider" class="nivoSlider">
                    <img src="images/toystory.jpg" alt="" />
                    <a href="http://dev7studios.com"><img src="images/up.jpg" alt="" title="This is an example of a caption" /></a>
                    <img src="images/walle.jpg" alt="" data-transition="slideInLeft" />
                    <img src="images/nemo.jpg" alt="" title="#htmlcaption" />
                </div>
                <div id="htmlcaption" class="nivo-html-caption">
                    <strong>This</strong> is an example of a <em>HTML</em> caption with <a href="#">a link</a>.
                </div>
            </div>
    </div>
    

    在演示文件中的style.css 内添加:

    #slider-wrap {
        position: absolute;
        top: 50%;
        left: 50%;
        margin-top: -123px; /* 246/2 */
        margin-left: -309px;/ /* 618/2 */
    }
    
    .slider-wrapper {
        position: relative;
        height: 500px;
        width: 1000px;
        background: red;
    }
    

    找到这一行并注释边距规则:

    .theme-default #slider {
        /* margin:100px auto 0 auto; */
        width:618px; /* Make sure your images are the same size */
        height:246px; /* Make sure your images are the same size */
    }
    

    下载修改后的例子,研究代码http://www.mediafire.com/?9f7z9ku4n1ikiba

    【讨论】:

    • 如果我应用您的示例,整个页面似乎都在播放并且看起来很奇怪。我已经从 zip 中的演示示例中嵌套了 div,即:
    • 我用解决方案编辑了我的答案。您可以找到修改后的演示的下载链接。
    • 哇 - 努力!但是您的解决方案并不完全符合我的预期(很抱歉,当我这样做时感觉很糟糕)。在您展示的示例中,您已将红色框内的所有内容居中。而我想要尝试做的是,将图像居中放置在框内。我用你的例子尝试了一些随机图像,图像仍然位于幻灯片框的左上角,而不是居中。如果您不清楚,请查看我原帖中的图片,除了汽车的图片,我希望将其放在盒子的中心位置。
    • 但是这样做有什么意义呢?我不明白。您不能像我说的那样将 nivoslider 居中,然后将箭头和子弹绝对定位到包装器的边缘吗?无论如何,您都需要使用与 nivoslider 相同大小的图像。
    【解决方案2】:

    试试这个 css。

    .nivoSlider img {
        background-position:center center;
    }
    

    【讨论】:

    • 我刚试过这个,不幸的是它没有用。我也尝试将它添加到我自己的 styles.css 中,因为我有两个在 index.php ... nivo-slider.css 和 style.css 中引用的样式表
    【解决方案3】:

    图像的位置正在加载到 javascript 文件中。编辑“jquery.nivo.slider.js”(请确保在标题中使用此文件而不是“jquery.nivo.slider.pack.js”。)

    转到第 85 行:

    //Set first background
            slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat');
    

    找到上面的行。将其更改为:

    //Set first background
            slider.css('background','url("'+ vars.currentImage.attr('src') +'") no-repeat center');
    

    现在您可以看到您的第一张图片位于中间。只需播放该文件,您肯定会使整个图像居中。

    编辑: 找到这个函数://为切片动画添加切片。第 253 行。 编辑其他部分。 262行

    background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'
    

    通过将 0% 更改为 50% 使图像垂直居中。越来越近了……

    编辑

    再次编辑上面的行并替换为下面的行。

    background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat 50%'
    

    这肯定行得通..

    编辑

    忘记上面所有的编辑。只需将您的 jquery.nivo.slider.js 文件替换为 this one

    【讨论】:

    • 我们很接近了!第一个图像居中,但之后的图像不居中。我不确定这是否是我引入的错误,或者我是否必须在 .js 文件中进行更多编辑?不管怎样,我马上就要出发了,希望我们快到了。干杯。编辑:我在另一行上进行了复制和粘贴,现在当我单击图像中心底部的一个小圆圈按钮时。现在唯一需要解决的是,在幻灯片自动更改时将图像居中。
    • 在答案中检查我编辑的部分。
    • 检查我在回答中的最新编辑。希望这能解决您的问题。 :)
    • 谢谢 - 在 .js 文件中进行第二次编辑之前的编辑似乎会破坏过渡效果(即无法使其正常工作)。直到第一次编辑都很好。它对你来说完美吗?我自己还在玩一些游戏,如果修复起来太麻烦,可能是最坏的情况,我可能会限制我的幻灯片到某些可以正常工作的过渡。
    • 它非常适合我。只需检查我的 .js 文件。 jquery.nivo.slider.js
    【解决方案4】:

    如果您需要制作水平居中背景并且希望所有过渡都能正常工作,您可以执行以下操作:

    1. 需要知道当前图片的实际宽度

    2. 您需要计算一个偏移量,应该从哪个切片(或框)开始添加该图像:

      var mySliceOffset = (vars.currentImage.attr('width') - $('body').width()) / 2;

    (在此示例中,滑块容器宽度设置为 100%)

    1. 然后编辑背景属性:

      background: 'url("'+ vars.currentImage.attr('src') +'") no-repeat -'+ ((mySliceOffset+sliceWidth + (i * sliceWidth)) - sliceWidth) +'px 0%'

    【讨论】:

      【解决方案5】:

      对我来说,最简单的解决方案需要 3 件事:

      1. 假设在窄视口上,您的图像应跨越视口的整个宽度,请在您希望图像随着视口扩展而停止增长并开始在视口内居中的位置处指定图像的最大宽度(以像素为单位)本身。
      2. 确保所有图片的宽度大于或等于您在第一步中选择的最大宽度。 (如果您的图片很瘦,您仍然可以使用它。请继续阅读。)
      3. 将 Nivo 滑块放在包装器内并居中。

      对于第 1 步,我使用了 1220 像素。这仅仅是因为当我的图像宽度超过 1220 像素时,它们的底部开始被裁剪掉。选择任何你想要的。数字越大,在开始居中之前视口越宽。但是,缺点是您的所有图像都需要至少与您选择的任何图像一样宽。

      对于第 2 步,只需遵循规则即可。如果您的图片不够宽,但您仍想使用它,您可以通过对图片进行简单的编辑来实现,如下所示:

      假设您有一张 800x600 的图片,并且您在第 1 步中选择了 1220。该图片无法使用,因为它太小了。但是,如果您制作具有可接受宽度(即 1220x600)的新图像,则可以使用滑块后面使用的任何背景颜色填充整个图像。然后,获取 800x600 图像并将其粘贴到新 1220x600 图像的中心。这个新的 1220x600 图像应该正确居中。

      对于第 3 步:

      CSS

      将以下内容添加到 nivo-slider.css

      .slider-wrapper
      {
      	position:relative;
      	max-width: 1220px;   -   Change this width to whatever you want
      	margin-left:auto;
      	margin-right:auto;
      }
      可选 - 您应该编辑“.nivo-Slider img”属性的“最大宽度”设置,以便您的图像加载得更好:如果您不这样做,会发生什么是第一个图像(如果大于最大宽度)将以全尺寸闪烁然后快速调整。要应用编辑,只需将 max-width 属性从“none”更改为您在滑块包装器中指定的任何最大宽度。请参见下面的示例。
      .nivoSlider img {
      	position:absolute;
      	max-width: 1220px;
      	left:0px;
      	top:0px;

      HTML

      将滑块放入新的滑块包装器中。

      <div class="slider-wrapper">
      <div id="slider" class="nivoSlider">
      *slider stuff*
      </div>
      </div>

      享受对称!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多