【问题标题】:Change the Arrow buttons in Slick slider更改 Slick 滑块中的箭头按钮
【发布时间】:2015-07-04 18:02:31
【问题描述】:

我想更改我光滑滑块中的箭头,但它没有改变。我想要下一个和上一个按钮作为图像。我试过把它放在<style>,但它仍然不起作用。我在哪里可以更改箭头设置?

光滑的主题 css @charset "UTF-8";

// Default Variables

$slick-font-path: "./fonts/" !default;
$slick-font-family: "slick" !default;
$slick-loader-path: "./" !default;
$slick-arrow-color: white !default;
$slick-dot-color: black !default;
$slick-dot-color-active: $slick-dot-color !default;
$slick-prev-character: "←" !default;
$slick-next-character: "→" !default;
$slick-dot-character: "•" !default;
$slick-dot-size: 6px !default;
$slick-opacity-default: 0.75 !default;
$slick-opacity-on-hover: 1 !default;
$slick-opacity-not-active: 0.25 !default;

@function slick-image-url($url) {
    @if function-exists(image-url) {
        @return image-url($url);
    }
    @else {
        @return url($slick-loader-path + $url);
    }
}

@function slick-font-url($url) {
    @if function-exists(font-url) {
        @return font-url($url);
    }
    @else {
        @return url($slick-font-path + $url);
    }
}

/* Slider */

.slick-list {
    .slick-loading & {
        background: #fff slick-image-url("ajax-loader.gif") center center no-repeat;
    }
    position: absolute;
    margin: 0 auto;
}

/* Icons */
@if $slick-font-family == "slick" {
    @font-face {
        font-family: "slick";
        src: slick-font-url("slick.eot");
        src: slick-font-url("slick.eot?#iefix") format("embedded-opentype"), slick-font-url("slick.woff") format("woff"), slick-font-url("slick.ttf") format("truetype"), slick-font-url("slick.svg#slick") format("svg");
        font-weight: normal;
        font-style: normal;
    }
}

/* Arrows */

.slick-prev,
.slick-next {
    position: absolute;
    display: block;
    height: 20px;
    width: 30px;
    line-height: 0px;
    font-size: 0px;
    cursor: pointer;
    background: transparent;
    color: transparent;
    top: 50%;
    margin-top: -10px;
    padding: 0;
    border: none;
    outline: none;
    &:hover, &:focus {
        outline: none;
        background: transparent;
        color: transparent;
        &:before {
            opacity: $slick-opacity-on-hover;
        }
    }
    &.slick-disabled:before {
        opacity: $slick-opacity-not-active;
    }
}

.slick-prev:before, .slick-next:before {
    font-family: $slick-font-family;
    font-size: 20px;
    line-height: 1;
    color: $slick-arrow-color;
    opacity: $slick-opacity-default;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

.slick-prev {
    left: -25px;
    [dir="rtl"] & {
        left: auto;
        right: -25px;
    }
    &:before {
        content: $slick-prev-character;
        [dir="rtl"] & {
            content: $slick-next-character;
        }
    }
}

.slick-next {
    right: -25px;
    [dir="rtl"] & {
        left: -25px;
        right: auto;
    }
    &:before {
        content: $slick-next-character;
        [dir="rtl"] & {
            content: $slick-prev-character;
        }
    }
}

/* Dots */

.slick-slider {
    margin-bottom: 30px;
}

.slick-dots {
    position: absolute;
    bottom: -45px;
    list-style: none;
    display: block;
    text-align: center;
    padding: 0;
    width: 100%;
    li {
        position: relative;
        display: inline-block;
        height: 20px;
        width: 20px;
        margin: 0 5px;
        padding: 0;
        cursor: pointer;
        button {
            border: 0;
            background: transparent;
            display: block;
            height: 20px;
            width: 20px;
            outline: none;
            line-height: 0px;
            font-size: 0px;
            color: transparent;
            padding: 5px;
            cursor: pointer;
            &:hover, &:focus {
                outline: none;
                &:before {
                    opacity: $slick-opacity-on-hover;
                }
            }
            &:before {
                position: absolute;
                top: 0;
                left: 0;
                content: $slick-dot-character;
                width: 20px;
                height: 20px;
                font-family: $slick-font-family;
                font-size: $slick-dot-size;
                line-height: 20px;
                text-align: center;
                color: $slick-dot-color;
                opacity: $slick-opacity-not-active;
                -webkit-font-smoothing: antialiased;
                -moz-osx-font-smoothing: grayscale;
            }
        }
        &.slick-active button:before {
            color: $slick-dot-color-active;
            opacity: $slick-opacity-default;
        }
    }
}

流畅的 CSS

/* Slider */

.slick-slider {
    position: relative;
    margin: 0 auto;
    display: block;
    box-sizing: border-box;
    -moz-box-sizing: border-box;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    -ms-touch-action: pan-y;
    touch-action: pan-y;
    -webkit-tap-highlight-color: transparent;
}
.slick-list {
    position: relative;
    overflow: hidden;
    display: block;
    margin: 0 auto;
    padding: 0;

    &:focus {
        outline: none;
    }

    &.dragging {
        cursor: pointer;
        cursor: hand;
    }
}
.slick-slider .slick-track,
.slick-slider .slick-list {
    -webkit-transform: translate3d(0, 0, 0);
    -moz-transform: translate3d(0, 0, 0);
    -ms-transform: translate3d(0, 0, 0);
    -o-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
}

.slick-track {
    position: relative;
    left: 0;
    top: 0;
    display: block;

    &:before,
    &:after {
        content: "";
        display: table;
    }

    &:after {
        clear: both;
    }

    .slick-loading & {
        visibility: hidden;
    }
}
.slick-slide {
    float: left;
    min-height: 1px;
    [dir="rtl"] & {
        float: right;
    }
    img {
        display: block;
    }
    &.slick-loading img {
        display: none;
    }

    display: none;

    &.dragging img {
        pointer-events: none;
    }

    .slick-initialized & {
        display: block;
    }

    .slick-loading & {
        visibility: hidden;
    }

    .slick-vertical & {
        display: block;
        height: auto;
        border: 1px solid transparent;
    }
}

preview of the site

【问题讨论】:

  • 请您检查正确答案吗?谢谢

标签: javascript jquery html css slider


【解决方案1】:

Slick 有一种非常简单的方法可以通过其自己的配置中的两个变量来自定义其按钮:prevArrownextArrow

这两种类型都是:字符串(html | jQuery 选择器)|对象(DOM 节点 | jQuery 对象),所以在您的设置光滑滑块中,您可以设置类:

prevArrow: $('.prev')
nextArrow: $('.next')

并为这些元素添加您想要的样式。

例如:

//HTML
<div class="slider-box _clearfix">
    <div class="slick-slider">
        <div>
            <img src="img/home_carousel/home_carorusel_1.jpg">
        </div>
        <div>
            <img src="img/home_carousel/home_carorusel_2.jpg">
        </div>
        <div>
            <img src="img/home_carousel/home_carorusel_3.jpg">
        </div>
        <div>
            <img src="img/home_carousel/home_carorusel_4.jpg">
        </div>
    </div>
</div>

<div class="paginator-center text-color text-center">
    <h6>VER MAS LANZAMIENTOS</h6>
    <ul>
        <li class="prev"></li>
        <li class="next"></li>
    </ul>
</div>

//JS
$(document).ready(function () {
  $('.slick-slider').slick({
      centerMode: true,
      centerPadding: '60px',
      slidesToShow: 3,
      prevArrow: $('.prev'),
      nextArrow: $('.next'),
});

//CSS
.paginator{
  position: relative;
  float: right;
  margin-bottom: 20px;

  li{
    margin-top: 20px;
    position: relative;
    float: left;

    margin-right: 20px;

    &.prev{
      display: block;
      height: 20px;
      width: 20px;
      background: url('../img/back.png') no-repeat;
    }

    &.next{
      display: block;
      height: 20px;
      width: 20px;
      background: url('../img/next.png') no-repeat;
    }
  }
}

【讨论】:

  • prevArrow: $ ('.prev') nextArrow: $ ('.next') 。不正确的点位置让我混淆了一分钟
  • 遗憾的是,如果一页上有两个或多个 Slick 滑块,这将不起作用。如果是这种情况,每个自定义上一个/下一个按钮都会滑动该页面上的所有滑块。怎么可能只为这个特定的滑块定义“那个”一个 DOM 元素 asprev/next 按钮?
  • @Juuro 简单,您只需添加一个更具体的选择器,而不是单独使用 '.prev'
  • 它有效!但请确保您已设置“箭头:真”。使用“箭头:假”将不起作用
【解决方案2】:

您可以使用 .slick-next:before.slick-prev:after 伪类轻松创建自己的箭头样式。

这是一个例子:

.slick-prev:before {
  content: "<";
  color: red;
  font-size: 30px;
}

.slick-next:before {
  content: ">";
  color: red;
  font-size: 30px;
}

【讨论】:

  • 不错,但不太正确。应该是:.slick-next:before { content: ">";红色;字体大小:30px; } .slick-prev:before { 内容:"
  • 对我来说,这不适用于“悬停”效果。它恢复为默认大小和内容。我错过了什么?
  • 我想他们都必须是:之前
【解决方案3】:

这很容易。使用下面的代码,它对我有用。这里我使用了 fontawesome 图标,但你可以使用任何东西作为图像或任何其他图标的代码。

    $(document).ready(function(){
        $('.slider').slick({
            autoplay:true,
            arrows: true,
            prevArrow:"<button type='button' class='slick-prev pull-left'><i class='fa fa-angle-left' aria-hidden='true'></i></button>",
            nextArrow:"<button type='button' class='slick-next pull-right'><i class='fa fa-angle-right' aria-hidden='true'></i></button>"
        });
    });

【讨论】:

    【解决方案4】:

    这对我有用:

    http://codepen.io/anon/pen/qNbWwK

    隐藏 CSS 中的默认按钮并使用:

    <!-- In HTML: -->
    <p class="left">left</p>
    <p class="right">right</p>
    
    /* In the JS file */
    $('.slider').slick({
      arrows: false
    })
    
    $('.left').click(function(){
      $('.slider').slick('slickPrev');
    })
    
    $('.right').click(function(){
      $('.slider').slick('slickNext');
    })
    

    【讨论】:

    • 您的解决方案非常完美,谢谢。它应该被标记为解决方案......无论如何非常感谢
    • 这在功能方面是有效的,但是看到这个的人应该知道,使用 p 标签作为交互式元素是不可访问的,这意味着使用键盘的人将无法使用箭头。应该使用按钮来代替,它们同样易于使用且易于访问。
    【解决方案5】:

    简单的解决方案:

    $('.slick-slider').slick({      
        arrows: true,
        prevArrow:"<img class='a-left control-c prev slick-prev' src='YOUR LEFT ARROW IMAGE URL'>",
        nextArrow:"<img class='a-right control-c next slick-next' src='YOUR RIGHT ARROW IMAGE URL'>"
    });
    

    图像 URL 可以是本地或 cdn 类型的东西(网络图标等)。

    示例 CSS(此处根据需要进行调整,这只是可能的示例):

    .control-c {
        width: 30px;
        height: 30px;
    }
    

    这对我来说效果很好!

    【讨论】:

    • 也适用于内联 svg
    • 这应该是公认的答案!它运行良好,不会引起任何错误
    【解决方案6】:

    如果你使用的是 sass,你可以简单地设置下面提到的变量,

    $slick-font-family:FontAwesome;
    $slick-prev-character: "\f053";
    $slick-next-character: "\f054";
    

    这些将更改 slick 的主题 css 使用的字体系列以及 prev 和 next 按钮的 unicode。

    其他可以配置的sass变量在Slick Github page中给出

    【讨论】:

      【解决方案7】:

      您可以使用 FontAwesome“内容”值并按照 css 的方式应用。这些应用“人字形右/左”图标。

      .custom-slick .slick-prev:before {
          content: "";
          font-family: 'FontAwesome';
          font-size: 22px;
      }
      .custom-slick .slick-next:before {
          content: "";
          font-family: 'FontAwesome';
          font-size: 22px;
      }
      

      【讨论】:

      【解决方案8】:
      <div class="prev">Prev</div>
      
      <div class="next">Next</div>
      
      $('.your_class').slick({
              infinite: true,
              speed: 300,
              slidesToShow: 5,
              slidesToScroll: 5,
              arrows: true,
              prevArrow: $('.prev'),
              nextArrow: $('.next')
      });
      

      【讨论】:

        【解决方案9】:

        我发现这样做的最佳方式是这样。您可以删除我的 HTML 并将您的 HTML 放在那里。

        $('.home-banner-slider').slick({
            dots: false,
            infinite: true,
            autoplay: true,
            autoplaySpeed: 3000,
            speed: 300,
            slidesToScroll: 1,
            arrows: true,
            prevArrow: '<div class="slick-prev"><i class="fa fa-angle-left" aria-hidden="true"></i></div>',
            nextArrow: '<div class="slick-next"><i class="fa fa-angle-right" aria-hidden="true"></i></div>'
        });
        

        【讨论】:

        • 这些按钮不会在文档就绪时存在,一旦实例化了 slick 实例,它们就会被添加。您可能想使用 slick 提供的 init 事件修改按钮 html。
        • 你是对的。我做了更正。这是永久的解决方案。但是你可以编辑 html。
        • 为什么这被否决了?它是 github 上的 dosc 中显示的内置解决方案。 ??
        • 是的,肯定会对此表示赞同。非常适合我
        【解决方案10】:

        伪元素的内容属性 :before 也接受图像。在 slick-theme.css 中更改:

        // change
        $slick-prev-character: "←" !default; 
        
        // to
        $slick-prev-character: url('image-prev.png');
        
        // and 
        $slick-next-character: "→" !default;
        
        // to 
        $slick-next-character: url('image-next.jpg');

        或直接更改 slick-prev:before 和 slick-next:before 上的 content 属性

        .slick-prev {
            left: -25px;
            [dir="rtl"] & {
                left: auto;
                right: -25px;
            }
            &:before {
                content: url('image-prev.jpg'); // <<<<<<<<
                [dir="rtl"] & {
                    content: url('image-next.jpg'); // <<<<<<<<
                }
            }
        }
        
        .slick-next {
            right: -25px;
            [dir="rtl"] & {
                left: -25px;
                right: auto;
            }
            &:before {
                content: url('image-next.jpg'); // <<<<<<<<
                [dir="rtl"] & {
                    content: url('image-prev.jpg'); // <<<<<<<<
                }
            }
        }

        【讨论】:

          【解决方案11】:

          prevArrownextArrow 添加一个值以更改标准箭头。 示例:

              $('.members').slick({
                  slidesToShow: 1,
                  slidesToScroll: 1,
                  dots: true,
                  arrows: true,
                  prevArrow: '<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M20 40C8.9543 40 -2.7141e-06 31.0457 -1.74846e-06 20C-7.8281e-07 8.9543 8.95431 -2.7141e-06 20 -1.74846e-06C31.0457 -7.8281e-07 40 8.9543 40 20C40 31.0457 31.0457 40 20 40ZM16.1206 13.5198C15.7554 13.1055 15.1632 13.1055 14.798 13.5198L9.58704 19.4308C9.22182 19.8451 9.22182 20.5168 9.58704 20.931L14.798 26.8421C15.1632 27.2563 15.7554 27.2563 16.1206 26.8421C16.4858 26.4278 16.4858 25.7561 16.1206 25.3418L12.4912 21.2248L29.6865 21.2248C30.2388 21.2248 30.6865 20.7771 30.6865 20.2248C30.6865 19.6725 30.2388 19.2248 29.6865 19.2248L12.4138 19.2248L16.1206 15.02C16.4858 14.6057 16.4858 13.934 16.1206 13.5198Z" fill="#7C8B9C"/></svg>',
                  nextArrow: '<svg width="40" height="40" viewBox="0 0 40 40" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M20 3.49691e-06C31.0457 5.4282e-06 40 8.95431 40 20C40 31.0457 31.0457 40 20 40C8.9543 40 1.56562e-06 31.0457 3.49691e-06 20C5.4282e-06 8.95431 8.95431 1.56562e-06 20 3.49691e-06ZM23.8794 26.4802C24.2446 26.8945 24.8368 26.8945 25.202 26.4802L30.413 20.5692C30.7782 20.1549 30.7782 19.4833 30.413 19.069L25.202 13.1579C24.8368 12.7437 24.2446 12.7437 23.8794 13.1579C23.5142 13.5722 23.5142 14.2439 23.8794 14.6582L27.5088 18.7752L10.3135 18.7752C9.7612 18.7752 9.31348 19.2229 9.31348 19.7752C9.31348 20.3275 9.76119 20.7752 10.3135 20.7752L27.5862 20.7752L23.8794 24.98C23.5142 25.3943 23.5142 26.066 23.8794 26.4802Z" fill="#7C8B9C"/></svg>',
              });

          【讨论】:

            【解决方案12】:

            这是另一个更改箭头并使用您自己的箭头图像的示例。

            .slick-prev:before {
                background-image: url('images/arrow-left.png');
                background-size: 50px 50px;
                display: inline-block;
                width: 50px; 
                height: 50px;
                content:"";
            }
            .slick-next:before {
                background-image: url('images/arrow-right.png');
                background-size: 50px 50px;
                display: inline-block;
                width: 50px; 
                height: 50px;
                content:"";
            }
            

            【讨论】:

              【解决方案13】:

              这是使用 javascipt 的替代解决方案:

              document.querySelector('.slick-prev').innerHTML = '<img src="path/to/chevron-left-image.svg">'>;
              document.querySelector('.slick-next').innerHTML = '<img src="path/to/chevron-right-image.svg">'>;
              

              将 img 更改为文本或您需要的任何内容。

              【讨论】:

              • 谢谢,这真的很有帮助
              【解决方案14】:

              这是我的示例,说明如何将 React 中 Slick Carousel 的箭头更改为您想要的任何内容。首先,您需要将设置中的 nextArrow 和 prevArrow 设置为一个函数,然后在该函数中返回一个带有您想要使用的任何图标的 div。对于我来说,我使用了 Font Awesome。然后你需要在你的图标中添加一个类名,你会在 NextArrow 和 PrevArrow 函数中看到它。然后添加 scss 代码以自定义您想要的任何内容。

              JSX 代码:

              function NextArrow(props) {
                const { style, onClick } = props;
                return (
                  <div style={{ ...style, display: "block" }} onClick={onClick}>
                    <FontAwesomeIcon icon={faChevronRight} size="3x" className="slick-arrow-icon-right" />
                  </div>
                );
              }
              
              function PrevArrow(props) {
                const { style, onClick } = props;
                return (
                  <div style={{ ...style, display: "block" }} onClick={onClick}>
                    <FontAwesomeIcon icon={faChevronLeft} size="3x" className="slick-arrow-icon-left" />
                  </div>
                );
              }
              
              function SlickCarouselArrowChange(props) {
                var settings = {
                  className: "slider variable-width",
                  dots: true,
                  infinite: true,
                  centerMode: true,
                  slidesToShow: 1,
                  slidesToScroll: 1,
                  variableWidth: true,
                  autoplay: true,
                  autoplaySpeed: 2000,
                  nextArrow: <NextArrow />,
                  prevArrow: <PrevArrow />,
                };
              
                return (
                  <div className="slick-slider">
                    <Slider {...settings}>
                      {props.searchResults.map((image, index) => (
                        <div key={index}>
                          <img src={image.urls.small} />{" "}
                        </div>
                      ))}
                    </Slider>
                  </div>
                );
              }
              

              SCSS 代码:

              .slick-arrow-icon-left,
              .slick-arrow-icon-right {
                position: absolute;
                display: block;
                cursor: pointer;
                background: transparent;
                color: black;
                top: 50%;
                -webkit-transform: translate(0, -50%);
                -ms-transform: translate(0, -50%);
                transform: translate(0, -50%);
                padding: 0;
                border: none;
                outline: none;
                transition: 0.5s ease-in-out;
                &:hover,
                &:focus {
                  outline: none;
                  background: transparent;
                  color: black;
                  font-size: 40px;
                  &::before {
                    opacity: 1;
                  }
                }
              }
              
              .slick-arrow-icon-left {
                left: -50px;
                [dir="rtl"] & {
                  left: auto;
                  right: -50px;
                }
              }
              
              .slick-arrow-icon-right {
                right: -50px;
                [dir="rtl"] & {
                  left: -50px;
                  right: auto;
                }
              }
              

              示例链接:

              https://slick-carousel-arrow-change.herokuapp.com/

              源代码:

              https://github.com/Apocilyptica/slick-carousel-arrow-change

              【讨论】:

              • 你的链接失效了
              【解决方案15】:

              用于改变颜色

              .slick-prev:before {
                color: some-color!important;
              }
              .slick-next:before {
                color: some-color!important;
              }
              

              【讨论】:

                【解决方案16】:

                如果你使用 react-slick,你可以在自定义 next 和 prev div 上试试这个

                https://react-slick.neostack.com/docs/example/previous-next-methods

                【讨论】:

                • 点评来源: 嗨,虽然链接是分享知识的好方法,但如果它们将来被破坏,它们将不会真正回答问题。将回答问题的链接的基本内容添加到您的答案中。如果内容太复杂或太大而无法在此处放置,请描述所提出解决方案的总体思路。请记住始终保留指向原始解决方案网站的链接引用。见:How do I write a good answer?
                【解决方案17】:

                如果我们想通过 css 使用 font awesome 库,那么我们可以使用下面的 css

                  .slick-prev:before {
                    content: "\f104";
                    color: red;
                    font-size: 30px;
                    font-family: 'FontAwesome';
                  }
                
                  .slick-next:before {
                    content: "\f105";
                    color: red;
                    font-size: 30px;
                    font-family: 'FontAwesome';
                  }
                

                必须在页面中添加字体真棒库css。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 2015-07-22
                  • 1970-01-01
                  • 2022-08-13
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多