Compatibilidade: Compatível apenas com a versão Dawn 3.0
Mostre todas as suas coleções usando um controle deslizante. Este é um controle deslizante para as coleções e não para os produtos. Para controle deslizante do produto, consulte aqui . Se você tiver outros temas do Shopify ou uma versão superior do Dawn ou outros temas do Shopify 2.0, poderá usar este código universal aqui .
Confira a loja DEMO aqui 💻 . Senha: made4uo
O que você está comprando :
- Um controle deslizante para lista de coleções
O que torna nosso código melhor:
- Não usamos bibliotecas externas, com isso dito, nosso código não terá nenhum efeito mínimo no desempenho de velocidade do seu site
- Não deixamos nem adicionamos códigos para anunciar em nosso site
- Nosso código é compatível com dispositivos móveis
Quaisquer problemas relacionados ao código serão corrigidos sem custo adicional, excluindo solicitações de customização de código. Basta entrar em contato conosco em "Converse conosco". Estamos a apenas um botão de distância
Para iniciar :
1. Vá para loja Admin Shopify > Temas > Ações > Editar código
2. Na pasta Seção, crie uma nova seção, nomeie-a como "Controle deslizante da lista de coleção" e substitua o código padrão pelo código abaixo.
{ { 'lista de coleção-slider.css' | URL_do_asset | folha_de_estilo } } < div class = "coleçãoListSlider" style = "padding-top: {{ section.settings.padding_top | append: " % " }} ; padding-bottom: {{section.settings.padding_bottom }} " > < div class = "collectionListTitleWrapper {% if section.settings.title == blank %} title-wrapper-with-link--no-heading {% endif %} " > { % se seção. configurações . título ! = em branco % } < h2 class = "collectionListTitle" > { { seção. configurações . título | escapar } } < / h2 > { % fim se % } { % se seção. configurações . mostrar_view_all % } < a href = "/collections" class = "button" > Ver tudo < / a > { % fim se % } < / div > < universal - controle deslizante - estilo do componente = "--border-color: {{section.settings.border_color}} ;" > { % se seção. configurações . slider_visual == 'controle deslizante' % } < div class = "sliderCounterBox" > < botão tipo = "botão" class = "sliderCounterButton sliderCounterBtn--prev botão deslizante {% if section.settings.slider_button_fixed != true %} slider_button_fixed {% endif %} " nome = "anterior" aria - label = "slide anterior" estilo = "exibição:flex" aria -controls = "Slider- {{ section.id }} " > < svg ária - oculto = "true" focusable = "falso" role = "apresentação" class = "icon icon-caret" viewBox = "0 0 10 6" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4- 4a.5.5 0 000-.708z" fill = "currentColor" / > < / svg > < / botão > < / div > { % fim se % } < ul class = "controle deslizante da grade de produtos - tablet" role = "lista" > { %- para bloco na seção. blocos -% } { % atribuir block_length = forloop. comprimento % } < li class = "collection-list__item grid__item grid--col {% if section.settings.swipe_on_mobile %} slider__slide {% endif %} " { { bloquear. shopify_atributos } } > { % atribuir card_collection = bloquear. configurações . coleção % } { % atribuir media_aspect_ratio = seção. configurações . proporção_da_imagem % } { % atribuir colunas = colunas % } { %- líquido atribuir proporção = 1 se card_collection. feature_image e media_aspect_ratio == 'retrato' atribuir proporção = 0,8 elsif card_collection. feature_image e media_aspect_ratio == 'adaptar' atribuir proporção = card_collection. imagem em destaque . proporção da tela fim se se proporção == 0 ou proporção == nulo atribuir proporção = 1 fim se -% } < div class = "card-wrapper animate-arrow" > < div classe = " cartão cartão-- {{ settings.card_style }} {% if card_collection.featured_image %} cartão--mídia {% else %} cartão--texto {% endif %} {% if settings.card_style == 'card' %} cor- {{ settings.card_color_scheme }} {% endif %} {% if extend_height %} cartão--extend-height {% endif %} {% if card_collection.featured_image == nil and settings.card_style == 'card' %} proporção {% endif %} " style = "--ratio-percent: {{ 1 | divided_by: ratio | times: 100 }} %;" > < div class = "card__inner {% if settings.card_style == 'standard' %} color- {{ settings.card_color_scheme }} {% endif %} {% if card_collection.featured_image or settings.card_style == 'standard' %} proporção {% endif %} " style = "--ratio-percent: {{ 1 | divided_by: ratio | times: 100 }} %;" > { %- se coleção_cartão. imagem em destaque -% } < div class = "cartão__media" > < div class = "media media--transparent media--hover-effect" > < imagem srcset = " {%- if card_collection.featured_image.width >= 165 -%} {{ card_collection.featured_image | img_url: '165x' }} 165w, {%- endif -%} {%- if card_collection.featured_image.width >= 330 -%} {{ card_collection.featured_image | img_url: '330x' }} 330w, {%- endif -%} {%- if card_collection.featured_image.width >= 535 -%} {{ card_collection.featured_image | img_url: '535x' }} 535w, {%- endif -%} {%- if card_collection.featured_image.width >= 750 -%} {{ card_collection.featured_image | img_url: '750x' }} 750w, {%- endif -%} {%- if card_collection.featured_image.width >= 1000 -%} {{ card_collection.featured_image | img_url: '1000x' }} 1000w, {%- endif -%} {%- if card_collection.featured_image.width >= 1500 -%} {{ card_collection.featured_image | img_url: '1500x' }} 1500w, {%- endif -%} {%- if card_collection.featured_image.width >= 3000 -%} {{ card_collection.featured_image | img_url: '3000x' }} 3000w, {%- endif -%} {{ card_collection.featured_image | img_url: 'master' }} {{ card_collection.featured_image.width }} w " src = " {{ card_collection.featured_image | img_url: '1500x' }} " tamanhos = " (largura mínima: {{ settings.page_width }} px) {{ settings.page_width | minus: 100 | divided_by: columns }} px, (largura mínima: 750px) {% if columns > 1 %} calc((100vw - 10rem) / 2) {% else %} calc(100vw - 10rem) {% endif %} , calc(100vw - 3rem) " alt = " {{ card_collection.title | escape }} " altura = " {{ card_collection.featured_image.height }} " largura = " {{ card_collection.featured_image.width }} " carregando = "preguiçoso" class = "redução de movimento" > < / div > < / div > { %- fim se -% } < div class = "cartão__content" > < div class = "cartão__informações" > < h3 classe = "card__heading" > <a href = "{{ card_collection.url }} " class = "full-unstyled-link" > _ {{ card_collection.url }} _ _ _ _ { %- se coleção_cartão. título ! = em branco -% } { { - coleção_cartões. título | escapar - } } { %- fim se -% } { %- se coleção_cartão. descrição == em branco -% } < span class = "icon-wrap" > < svg viewBox = "0 0 14 10" preencher = "nenhum" aria - oculto = "verdadeiro" focalizável = "falso" role = "apresentação" class = "ícone ícone-seta" xmlns = "http://www.w3.org/2000/svg" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11 .793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill = "currentColor" / > < / svg > < / intervalo > { % fim se % } < / a > < / h3 > { %- se coleção_cartão. descrição ! = em branco -% } < p class = "cartão__caption" > { { - coleção_cartões. descrição | tira_html | palavras truncadas : 12 - } } < span class = "icon-wrap" > & nbsp ; < svg viewBox = "0 0 14 10" preencher = "nenhum" aria - oculto = "verdadeiro" focalizável = "falso" role = "apresentação" class = "ícone ícone-seta" xmlns = "http://www.w3.org/2000/svg" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11 .793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill = "currentColor" / > < / svg > < / intervalo > < / p > { %- fim se -% } < / div > < / div > < / div > { % se configurações. card_style == 'cartão' ou card_collection. imagem em destaque % } < div class = "cartão__content" > < div class = "cartão__informações" > < h3 classe = "card__heading" > <a href = "{{ card_collection.url }} " class = "full-unstyled-link" > _ {{ card_collection.url }} _ _ _ _ { %- se coleção_cartão. título ! = em branco -% } { { - coleção_cartões. título | escapar - } } { %- fim se -% } { %- se coleção_cartão. feature_image ou card_collection. descrição == em branco -% } < span class = "icon-wrap" > < svg viewBox = "0 0 14 10" preencher = "nenhum" aria - oculto = "verdadeiro" focalizável = "falso" role = "apresentação" class = "ícone ícone-seta" xmlns = "http://www.w3.org/2000/svg" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11 .793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill = "currentColor" / > < / svg > < / intervalo > { % fim se % } < / a > < / h3 > { %- se coleção_cartão. feature_image == null e card_collection. descrição ! = em branco -% } < p class = "cartão__caption" > { { - coleção_cartões. descrição | tira_html | palavras truncadas : 12 - } } < span class = "icon-wrap" > & nbsp ; < svg viewBox = "0 0 14 10" preencher = "nenhum" aria - oculto = "verdadeiro" focalizável = "falso" role = "apresentação" class = "ícone ícone-seta" xmlns = "http://www.w3.org/2000/svg" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M8.537.808a.5.5 0 01.817-.162l4 4a.5.5 0 010 .708l-4 4a.5.5 0 11-.708-.708L11 .793 5.5H1a.5.5 0 010-1h10.793L8.646 1.354a.5.5 0 01-.109-.546z" fill = "currentColor" / > < / svg > < / intervalo > < / p > { %- fim se -% } < / div > < / div > { % fim se % } < / div > < / div > <estilo> _ . coleçãoListSlider . cartão - invólucro { plano de fundo : { { seção. configurações . fundo } } ; } < / estilo > < / li > { %- fim para -% } < / ul > { % se seção. configurações . slider_visual == 'controle deslizante' % } < botão tipo = "botão" class = "sliderCounterButton sliderCounterBtn--próximo botão deslizante {% if section.settings.slider_button_fixed != true %} slider_button_fixed {% endif %} " nome = "próximo" estilo = "exibição:flex" aria - label = "próximo slide" aria -controls = "Slider- {{ section.id }} " > < svg ária - oculto = "true" focusable = "falso" role = "apresentação" class = "icon icon-caret" viewBox = "0 0 10 6" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4- 4a.5.5 0 000-.708z" fill = "currentColor" / > < / svg > < / botão > { % fim se % } { %- se comprimento_do_bloco > 3 -% } { % -se seção. configurações . slider_visual == 'controle deslizante' -% } < div class = "sliderContainer" > < input type = "range" min = "0" max = " {{block_length | minus: 1}} " value = "1" class = "sliderCounter" id = "myRange" > < / div > <estilo> _ . coleçãoListSlider . sliderCounter :: - webkit - slider - polegar { largura : calc ( 100 % / { { comprimento_do_bloco } } ) ; } . coleçãoListSlider . sliderCounter :: -moz -range -polegar { largura : calc ( 100 % / { { comprimento_do_bloco } } ) ; } < / estilo > { % fim se % } < div class = "slideshow__controls botões deslizantes no-js-hidden {% if section.settings.slider_visual == 'slider' %} oculto {% endif %} " estilo = "exibição:flex" > < botão tipo = "botão" class = "botão deslizante botão deslizante--anterior" dados - etapa = "1" nome = "anterior" aria - label = "slide anterior" aria -controls = "Slider- {{ section.id }} " > < svg ária - oculto = "true" focusable = "falso" role = "apresentação" class = "icon icon-caret" viewBox = "0 0 10 6" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4- 4a.5.5 0 000-.708z" fill = "currentColor" / > < / svg > < / botão > < div class = "slider-counter slider-counter-- {{ section.settings.slider_visual }} {% if section.settings.slider_visual == 'numbers' %} caption {% endif %} " > < div class = "contador--móvel" > < span class = "slider-counter--current" > 1 < / span > < span aria - oculto = "true" > / < / span > < span class = "slider-counter--total" > { { block_length } } < / span > < / div > < div class = "slideshow__control-wrapper slider" > { %- para bloco na seção. blocos -% } < botão class = "slider-counter__link slider-counter__link-- {{ section.settings.slider_visual }} link" dados - ponto = " {{forloop.index0}} " estilo = "preenchimento: 1rem; largura: 100%" aria - label = "carregar slide {{ forloop.index }} controle deslizante de {{ forloop.length}} " aria -controls = "Slider- {{ section.id }} " > { % -se seção. configurações . slider_visual == 'números' -% } { { forloop. índice - } } { %- outro -% } < span class = "ponto" >< / span > { %- fim se -% } < / botão > { %- fim para -% } < / div > < / div > < botão tipo = "botão" class = "botão deslizante botão deslizante--próximo" nome = "próximo" dados - etapa = "1" aria - label = "próximo slide" aria -controls = "Slider- {{ section.id }} " > < svg ária - oculto = "true" focusable = "falso" role = "apresentação" class = "icon icon-caret" viewBox = "0 0 10 6" > < preenchimento de caminho - regra = "evenodd" clipe - regra = "evenodd" d = "M9.354.646a.5.5 0 00-.708 0L5 4.293 1.354.646a.5.5 0 00-.708.708l4 4a.5.5 0 00.708 0l4- 4a.5.5 0 000-.708z" fill = "currentColor" / > < / svg > < / botão > < / div > <noscript> _ < div class = "botões deslizantes" style = "display: flex" > < div class = "contador deslizante" > { %- para bloco na seção. blocos -% } < um href = "#Slide- {{ section.id }} - {{ forloop.index }} " dados - ponto = " {{forloop.index}} " class = "link slider-counter__link" aria - label = "carregar slide {{ forloop.index }} controle deslizante de {{ forloop.length}} " > { { forloop. índice } } < / a > { %- fim para -% } < / div > < / div > < / noscript > { %- fim se -% } < / universal - controle deslizante - componente > < / div > { % esquema % } { "name" : "Controle deslizante da lista de coleções" , "tag" : "seção" , "class" : "seção espaçada" , "configurações" : [ { "tipo" : "texto" , "id" : "título" , "default" : "Coleções" , "rótulo" : "Título" } , { "tipo" : "caixa de seleção" , "id" : "show_view_all" , "padrão" : verdadeiro , "label" : "Botão Ver tudo" } , { "tipo" : "cabeçalho" , "content" : "Preenchimento adicional da seção" } , { "tipo" : "intervalo" , "id" : "padding_top" , "min" : 0 , "máximo" : 99 , "passo 1 , "unidade" : "%" , "padrão" : 0 , "label" : "Preenchimento da seção superior" } , { "tipo" : "intervalo" , "id" : "padding_bottom" , "min" : 0 , "máximo" : 99 , "passo 1 , "unidade" : "%" , "padrão" : 0 , "label" : "Preenchimento da seção inferior" } , { "tipo" : "cabeçalho" , "content" : "Cartão de coleção" } , { "tipo" : "selecionar" , "id" : "image_ratio" , "opções" : [ { "valor" : "adaptar" , "rótulo" : "adaptar" } , { "valor" : "retrato" , "rótulo" : "retrato" } , { "valor" : "quadrado" , "rótulo" : "quadrado" } ] , "padrão" : "quadrado" , "label" : "Proporção da imagem" } , { "tipo" : "cor" , "id" : "plano de fundo" , "label" : "Fundo do cartão" , "default" : "#eee" } , { "tipo" : "cor" , "id" : "border_color" , "label" : "Cor da borda" , "default" : "#eee" } , { "tipo" : "selecionar" , "id" : "slider_visual" , "opções" : [ { "valor" : "pontos" , "rótulo" : "pontos" } , { "valor" : "números" , "rótulo" : "números" } , { "valor" : "controle deslizante" , "rótulo" : "controle deslizante" } ] , "padrão" : "números" , "rótulo" : "Contador" } , { "tipo" : "caixa de seleção" , "id" : "slider_button_fixed" , "padrão" : verdadeiro , "label" : "Botão deslizante corrigido" } ] , "blocos" : [ { "type" : "featured_collection" , "nome" : "coleção em destaque" , "configurações" : [ { "tipo" : "coleção" , "id" : "coleção" , "rótulo" : "Coleção" } ] } ] , "predefinições" : [ { "name" : "Controle deslizante da lista de coleções" } ] } { % termina o esquema % } |
3. Em seguida, abra a pasta Ativos e "crie um novo ativo". Crie um arquivo CSS e nomeie-o como "collection-list-slider" e coloque o código abaixo.
. coleçãoListSlider { preenchimento : 5 % ; estouro : oculto ; } . coleçãoListSlider universal - controle deslizante - componente { posição : relativa ; exibição : bloco ; } . coleçãoListSlider . cartão__informações { preenchimento - inferior : 1rem ; preenchimento - topo : 1rem ; } . coleçãoListSlider . cartão__cabeçalho { alinhamento de texto : centro ; } @media screen e ( largura máxima : 989px ) { . no - js componente deslizante . controle deslizante { preenchimento - inferior : 3rem ; } } . slider__slide { scroll - snap - align : start ; flex - encolher : 0 ; } @media screen e ( largura máxima : 749px ) { . grade -- col { largura : 33 % ; } } @media screen e ( largura máxima : 481px ) { . grade -- col { largura : 50 % ; } } @media screen e ( largura mínima : 750px ) { . grade -- col { largura : 20 % ; } } . coleçãoListSlider . coleçãoListTitleWrapper { exibição : flexível ; alinhar - itens : centro ; justificar - conteúdo : espaço entre ; margem inferior : 2rem ; } . coleçãoListSlider . coleçãoListTitle { margem : automático 0 ; } . coleçãoListSlider . destaque - grade { exibição : flexível ; preenchimento : 0 ; } . coleçãoListSlider . destaque - grade li { estilo de lista : nenhum ; } . coleçãoListSlider li { estilo de lista : nenhum ; } . coleçãoListSlider . controle deslizante -- tablet { exibição : flexível ; posição : relativa ; flex - wrap : herdar ; estouro -x : automático ; scroll - snap - type : x obrigatório ; comportamento de rolagem : suave ; scroll - preenchimento - esquerda : 1rem ; - webkit - overflow - rolagem : toque ; margem inferior : 1rem ; largura : 100 % ; } . coleçãoListSlider . coleção - lista__item { preenchimento : 1,5rem ; borda : 5px sólido transparente ; } . coleçãoListSlider . slider__slide { preenchimento - inferior : 0 ; preenchimento : 0 1rem ; } @media ( prefere - movimento reduzido ) { . controle deslizante -- em todos os lugares { comportamento de rolagem : automático ; } } . coleçãoListSlider . controle deslizante . controle deslizante - em todos os lugares. slider__slide { margem - inferior : 0 ; preenchimento - inferior : 0 ; scroll - snap - align : center ; } /* Barra de rolagem */ . coleçãoListSlider . controle deslizante { scrollbar - color : rgb ( var ( -color - foreground ) ) rgba ( var ( -color - foreground ) , 0,04 ) ; -ms - overflow - style : nenhum ; largura da barra de rolagem : nenhuma ; } . coleçãoListSlider . controle deslizante :: - webkit - barra de rolagem { altura : 0,4rem ; largura : 0,4rem ; Mostrar nenhum ; } . não - js. controle deslizante { -ms - overflow - style : auto ; largura da barra de rolagem : auto ; } . não - js. controle deslizante :: - webkit - barra de rolagem { exibição : inicial ; } . coleçãoListSlider . controle deslizante :: - webkit - barra de rolagem - polegar { cor de fundo : rgb ( var ( -color - foreground ) ) ; raio da borda : 0,4rem ; borda : 0 ; } . coleçãoListSlider . controle deslizante :: - webkit - barra de rolagem - faixa { plano de fundo : rgba ( var ( -color - foreground ) , 0,04 ) ; raio da borda : 0,4rem ; } . coleçãoListSlider . controle deslizante - contador { margem : 0 1,2rem ; exibição : flexível ; largura mínima : 2rem ; justificar - conteúdo : centro ; } @media screen e ( largura máxima : 749px ) { . coleçãoListSlider . controle deslizante - contador - pontos, . coleçãoListSlider . controle deslizante - contador - números { margem : 0 ; } } @media screen e ( largura máxima : 749px ) { . coleçãoListSlider . controle deslizante - contador__link { preenchimento : 0,7rem ; } } . coleçãoListSlider . slider - counter__link --pontos . ponto { largura : 1rem ; altura : 1rem ; raio da borda : 50 % ; borda : 0,1rem sólido rgba ( var ( -color - foreground ) , 0,5 ) ; preenchimento : 0 ; exibição : bloco ; } . coleçãoListSlider . controle deslizante - contador__link - ativo. slider - counter__link --pontos . ponto { cor de fundo : rgb ( var ( -color - foreground ) ) ; } @media screen e ( cores forçadas : ativas ) { . controle deslizante - contador__link - ativo. slider - counter__link --pontos . ponto { cor de fundo : CanvasText ; } } . slider - counter__link --dots : not ( .slider - counter__link --active ) : hover. ponto { cor da borda : rgb ( var ( -color - foreground ) ) ; } . slider - counter__link --pontos . ponto , . controle deslizante - counter__link -- números { transição : transforma 0,2s de facilidade de entrada e saída ; } . controle deslizante - contador__link - ativo. controle deslizante - counter__link - números, . slider - counter__link --dots : not ( .slider - counter__link --active ) : hover. ponto , . slider - counter__link -- números : hover { transformar : escala ( 1.1 ) ; } . coleçãoListSlider . controle deslizante - counter__link -- números { cor : rgba ( var ( -color - foreground ) , 0,5 ) ; decoração de texto : nenhuma ; } . coleçãoListSlider . slider - counter__link -- números : hover { cor : rgb ( var ( -color - foreground ) ) ; } . coleçãoListSlider . controle deslizante - contador__link - ativo. controle deslizante - counter__link -- números { decoração de texto : sublinhado ; cor : rgb ( var ( -color - foreground ) ) ; } . coleçãoListSlider . controle deslizante - botões { exibição : flexível ; alinhar - itens : centro ; justificar - conteúdo : centro ; } . coleçãoListSlider . controle deslizante - botão { cor : rgba ( var ( -color - foreground ) , 0,75 ) ; fundo : transparente ; borda : nenhuma ; cursor : ponteiro ; largura : 44px ; altura : 44px ; exibição : flexível ; alinhar - itens : centro ; justificar - conteúdo : centro ; } . botão deslizante : não ( [ desativado ] ) : hover { cor : rgb ( var ( -color - foreground ) ) ; } . botão deslizante . ícone { altura : 0,6rem ; } . botão deslizante [ desabilitado ] . ícone { cor : rgba ( var ( -color - foreground ) , 0,3 ) ; cursor : não permitido ; } . botão deslizante – próximo . ícone { transformar : girar ( -90 graus ) ; } . botão deslizante - anterior. ícone { transformar : girar ( 90 graus ) ; } . botão deslizante - próximo : não ( [ desabilitado ] ) : pairar. ícone { transformar : girar ( -90 graus ) escala ( 1.1 ) ; } . botão deslizante - anterior : não ( [ desabilitado ] ) : pairar. ícone { transformar : girar ( 90 graus ) escala ( 1.1 ) ; } . seção espaçada - largura total : último filho em destaque - componente de apresentação de slides : não ( . largura da página ) . apresentação de slides__controls { border - bottom : nenhum ; } @media screen e ( largura mínima : 750px ) { . coleçãoListSlider . apresentação de slides__controls { posição : relativa ; } . controle deslizante - tablet. grade - espiada. grade__item { largura : 25 % ; } } componente de apresentação de slides : não ( .largura da página ) . controle deslizante - botões { borda - direita : 0 ; borda - esquerda : 0 ; } . coleçãoListSlider . apresentação de slides__control - wrapper { exibição : flexível ; largura : 28rem ; estouro -x : automático ; } . imagem -- ativa { borda : 5px var sólido ( -border - color ) ! importante ; } . contador -- celular { Mostrar nenhum ; } Tela @media somente e ( largura máxima : 481px ) { . coleçãoListSlider . contador -- celular { exibição : flexível ; } . coleçãoListSlider . apresentação de slides__control - wrapper { Mostrar nenhum ; } } . coleçãoListSlider . controle deslizante - contador__link { exibição : flexível ; alinhar - itens : centro ; justificar - conteúdo : centro ; } . coleçãoListSlider . ponto pequeno { largura : 0,4rem ! importante ; altura : 0,4rem ! importante ; } . coleçãoListSlider . ponto médio { largura : 0,75rem ! importante ; altura : 0,75rem ! importante ; } /* contador do controle deslizante */ . coleçãoListSlider . slidecontainer { largura : 100 % ; } . coleçãoListSlider . sliderContador { -webkit -aparência : nenhum ; largura : 100 % ; altura : 5px ; raio da borda : 5px ; plano de fundo : #d3d3d3; esboço : nenhum ; opacidade : 0,7 ; - webkit - transição : .2s ; transição : opacidade .2s ; } . sliderCounter : pairar { opacidade : 1 ; } . sliderCounter :: - webkit - slider - polegar { -webkit -aparência : nenhum ; aparência : nenhuma ; altura : 5px ; margem : 10px 0 ; raio da borda : 5px ; fundo : preto ; cursor : ponteiro ; } . sliderCounter :: -moz -range -polegar { altura : 5px ; preenchimento : 5px ; raio da borda : 5px ; margem : 10px 0 ; fundo : preto ; cursor : ponteiro ; } . sliderCounterBox { exibição : flexível ; alinhar - itens : centro ; } . sliderCounterButton { Mostrar nenhum ; posição : absoluta ; fundo : preto ! importante ; cor branca ! importante ; transição : todos os .2s facilitam ; índice z : 10 ; } . coleçãoListSlider : pairar. sliderCounterBtn -- anterior { esquerda : - 5 % ; } . coleçãoListSlider : pairar. sliderCounterBtn -- próximo { certo : - 5 % ; } . sliderCounterBtn -- anterior > svg { transformar : girar ( 90 graus ) ; } . slider_button_fixed . sliderCounterBtn -- anterior { esquerda : - 10 % ; } . slider_button_fixed . sliderCounterBtn -- próximo { certo : - 10 % ; } . sliderCounterBtn -- anterior { esquerda : - 5 % ; } . sliderCounterBtn -- próximo { certo : - 5 % ; } . sliderCounterBtn -- próximo > svg { transformar : girar ( -90 graus ) ; } . sliderCounterButton : pairar { transformar : escala ( 1.1 ) ; } . sliderCounterButton > svg { altura : 2rem ! importante ; } @media screen e ( largura máxima : 749px ) { . sliderCounterBtn -- anterior { esquerda : - 5 % ; } . sliderCounterBtn -- próximo { certo : - 5 % ; } } . cartão - invólucro { cor : herdar ; altura : 100 % ; posição : relativa ; decoração de texto : nenhuma ; } . cartão { alinhamento de texto : var ( -card - text - align ) ; decoração de texto : nenhuma ; } . cartão -- cartão { altura : 100 % ; } . cartão - cartão, . cartão - padrão. cartão__inner { border - radius : var ( -card - corner - radius ) ; borda : var ( -card - border - width ) solid rgba ( var ( -color - foreground ) , var ( -card - border - opacity ) ) ; posição : relativa ; dimensionamento da caixa : caixa de borda ; } . cartão - cartão : depois, . cartão - padrão. card__inner : depois de { contente : '' ; posição : absoluta ; largura : calc ( var ( -card - border - width ) * 2 + 100 % ) ; altura : calc ( var ( -card - border - width ) * 2 + 100 % ) ; topo : calc ( var ( -card - border - width ) * - 1 ) ; esquerda : calc ( var ( -card - border - width ) * - 1 ) ; z - índice : -1 ; border - radius : var ( -card - corner - radius ) ; box - shadow : var ( -card - shadow - horizontal - offset ) var ( -card - shadow - vertical - offset ) var ( -card - shadow - blur - radius ) rgba ( var ( -color - shadow ) , var ( -card - shadow - opacity ) ) ; } . cartão . cartão__inner . cartão__media { estouro : oculto ; /* Correção do bug da borda do Safari ao passar o mouse */ índice z : 0 ; border - radius : calc ( var ( -card - corner - radius ) -var ( -card - border - width ) -var ( -card - image - padding ) ) ; } . cartão - cartão. cartão__inner . cartão__media { borda - inferior - direita - raio : 0 ; borda - inferior - esquerda - raio : 0 ; } . cartão - padrão. cartão -- texto { cor de fundo : transparente ; } . cartão - informações { alinhamento de texto : var ( -card - text - align ) ; } . cartão__mídia , . cartão . meios de comunicação { inferior : 0 ; posição : absoluta ; topo : 0 ; } . cartão . meios de comunicação { largura : 100 % ; } . cartão__media { margem : var ( -card - image - padding ) ; largura : calc ( 100 % -2 * var ( -card - image - padding ) ) ; } . cartão - padrão. cartão__media { margem : var ( -card - image - padding ) ; } . cartão__inner { largura : 100 % ; } . cartão - mídia. cartão__inner . cartão__content { preenchimento : calc ( var ( -card - image - padding ) + 1rem ) ; posição : relativa ; } . cartão__content { exibição : grade ; grid - template - rows : minmax ( 0,1fr ) max - content minmax ( 0,1fr ) ; preenchimento : 1rem ; largura : 100 % ; } . card__content -- auto - margens { grid - template - rows : minmax ( 0 , auto ) max - content minmax ( 0 , auto ) ; } . cartão__informações { grade - linha - início : 2 ; preenchimento : 1,3rem 1rem ; } @media screen e ( largura mínima : 750px ) { . cartão__informações { preenchimento inferior : 1,7rem ; preenchimento - topo : 1,7rem ; } } . cartão__crachá { alinhar - self : flex - end ; grade - linha - início : 3 ; justificar - self : flex - start ; } . cartão__crachá . principal { alinhar - self : flex - start ; grade - linha - início : 1 ; } . cartão__crachá . certo { justificar - self : flex - end ; } . cartão__mídia . imagem de mídia { altura : 100 % ; ajuste ao objeto : capa ; posição do objeto : centro centro ; largura : 100 % ; } . card__inner : não ( . ratio ) > . cartão__content { altura : 100 % ; } . cartão__cabeçalho { margem - topo : 0 ; } . card__heading : último - filho { margem - inferior : 0 ; } . cartão - cartão. cartão -- mídia > . cartão__content { margin - top : calc ( 0rem - var ( -card - image - padding ) ) ; } . cartão - padrão. cartão - texto a :: depois , . cartão - cartão. card__heading a :: depois de { inferior : calc ( var ( -card - border - width ) * - 1 ) ; esquerda : calc ( var ( -card - border - width ) * - 1 ) ; direita : calc ( var ( -card - border - width ) * - 1 ) ; topo : calc ( var ( -card - border - width ) * - 1 ) ; } . card__heading a :: depois de { inferior : 0 ; contente : "" ; esquerda : 0 ; posição : absoluta ; direita : 0 ; topo : 0 ; índice z : 1 ; } . card__heading a : depois de { deslocamento do contorno : 0,3rem ; } . card__heading a : foco : depois de { box - shadow : 0 0 0 0,3rem rgb ( var ( -color - fundo ) ) , 0 0 0,5rem 0,4rem rgba ( var ( -color - foreground ) , 0,3 ) ; contorno : 0,2rem sólido rgba ( var ( -color - foreground ) , 0,5 ) ; } . card__heading a : foco - visível : depois de { box - shadow : 0 0 0 0,3rem rgb ( var ( -color - fundo ) ) , 0 0 0,5rem 0,4rem rgba ( var ( -color - foreground ) , 0,3 ) ; contorno : 0,2rem sólido rgba ( var ( -color - foreground ) , 0,5 ) ; } . card__heading a : foco : não ( : foco - visível ) : depois de { box - shadow : nenhum ; contorno : 0 ; } . card__heading a : foco { box - shadow : nenhum ; contorno : 0 ; } @media screen e ( largura mínima : 990px ) { . cartão . meios de comunicação . media -- hover - effect > img : only - child, . invólucro de cartão . meios de comunicação . mídia -- hover - effect > img : only - child { transição : transform var ( -duração - longa ) facilidade ; } . cartão : passe o mouse. meios de comunicação . mídia - hover - effect > img : primeiro - filho : único - filho, . card - wrapper : hover. meios de comunicação . mídia -- hover - effect > img : primeiro - filho : único - filho { transformar : escala ( 1,03 ) ; } . cartão - wrapper : pairar . meios de comunicação . mídia - pairar - efeito > img : primeiro - filho : não ( : único - filho ) { opacidade : 0 ; } . card - wrapper : hover. meios de comunicação . mídia -- hover - efeito > img + img { opacidade : 1 ; transição : transform var ( -duração - longa ) facilidade ; transformar : escala ( 1,03 ) ; } . sublinhado - links - passar o mouse : passar o mouse sobre { decoração de texto : sublinhado ; texto - sublinhado - deslocamento : 0,3rem ; } } . cartão - padrão. cartão - mídia. cartão__inner . cartão__informações , . cartão - padrão. cartão -- texto > . cartão__content . card__heading , . cartão - padrão > . cartão__content . cartão__crachá , . cartão - padrão. cartão - texto. artigo - cartão > . cartão__content . cartão__informações , . cartão - padrão > . cartão__content . cartão__caption { Mostrar nenhum ; } . cartão - padrão > . cartão__content { preenchimento : 0 ; } . cartão - padrão > . cartão__content . cartão__informações { preenchimento - esquerda : 0 ; preenchimento - direita : 0 ; } . cartão - cartão. cartão - mídia. cartão__inner . cartão__informações , . cartão - cartão. cartão - texto. cartão__interior , . cartão - cartão. cartão -- mídia > . cartão__content . cartão__crachá { Mostrar nenhum ; } . cartão -- estender - altura { altura : 100 % ; } . cartão - estender - altura. cartão - padrão. cartão - texto, . cartão - estender - altura. cartão -- mídia { exibição : flexível ; flex - direction : coluna ; } . cartão - estender - altura. cartão - padrão. cartão - texto. cartão__interior , . cartão - estender - altura. cartão - mídia. cartão__inner { flex - crescer : 1 ; } . cartão . ícone - embrulhar { margem - esquerda : 0,8rem ; espaço em branco : nowrap ; transição : transform var ( -duração - curta ) facilidade ; estouro : oculto ; } . cartão - informações > * + * { margem superior : 0,5rem ; } . cartão - informações { largura : 100 % ; } . cartão - informações > * { altura da linha : calc ( 1 + 0.4 / var ( -font - body - scale ) ) ; cor : rgb ( var ( -color - foreground ) ) ; } . cartão - informações > . preço { cor : rgb ( var ( -color - foreground ) ) ; } . cartão - informações > . avaliação { margem superior : 0,4rem ; } . cartão - informações > * : não ( . visualmente oculto : primeiro filho ) + * : não ( . classificação ) { margem - topo : 0,7rem ; } . cartão - informações . legenda { espaçamento entre letras : 0,07rem ; } . cartão - artigo - informações { margem - topo : 1rem ; } @media screen e ( largura máxima : 749px ) { . coleção . grid__item : somente - filho { flexível : 0 0 100 % ; largura máxima : 100 % ; } } @media screen e ( largura mínima : 750px ) { . coleção . título - wrapper - com - link -- sem - título { margin - top : calc ( 6rem + var ( -page - width - margin ) ) ; } } @media screen e ( largura máxima : 989px ) { . coleção . controle deslizante . controle deslizante -- tablet { margem inferior : 1,5rem ; } } . coleção . carregando - sobreposição { topo : 0 ; direita : 0 ; inferior : 0 ; esquerda : 0 ; Mostrar nenhum ; largura : 100 % ; preenchimento : 0 1,5rem ; opacidade : 0,7 ; } @media screen e ( largura mínima : 750px ) { . coleção . carregando - sobreposição { preenchimento - esquerda : 5rem ; preenchimento - direita : 5rem ; } } . coleção . carregando . carregando - sobreposição { exibição : bloco ; } . coleção - vazia. título - wrapper { margem - topo : 10rem ; margem inferior : 15rem ; } . coleção__view - todos { margem - topo : 2rem ; } |
4. Ainda na pasta Asset, abra o global.js e adicione o código abaixo. Este código javascript é compartilhado com outro código que possuo, verifique se você possui "UniversalSldierComponent". Em caso afirmativo, não há necessidade de executar a etapa 4.
classe UniversalSliderComponent estende HTMLElement { construtor ( ) { super ( ) ; esse . sliderControlWrapper = isto . querySelector ( '.botões deslizantes' ) ; esse . controle deslizante = isto . querySelector ( 'ul' ) ; esse . sliderItems = este . querySelectorAll ( 'li' ) ; esse . sliderCounter = este . querySelector ( '.sliderCounter' ) ; esse . currentPageElement = isto . querySelector ( '.slider-counter--current' ) ; esse . pageTotalElement = isto . querySelector ( '.slider-counter--total' ) ; esse . prevButton = isto . querySelector ( '.slider-button--prev' ) ; esse . próximoButton = isto . querySelector ( '.botão deslizante--próximo' ) ; esse . sliderButtonPrev = isto . querySelector ( '.sliderCounterBtn--prev' ) ; esse . sliderButtonNext = isto . querySelector ( '.sliderCounterBtn--next' ) ; esse . passo = 0 ; esse . sliderControlWrapper = isto . querySelector ( '.slideshow__control-wrapper' ) ; esse . sliderControlLinksArray = Array. from ( this.sliderControlWrapper.querySelectorAll ( ' . slider -counter__link' ) ) ; esse . sliderControlLinksArray . forEach ( link => link. addEventListener ( 'clique' , este . linkToSlide . vincular ( este ) ) )) ; esse . botão anterior . addEventListener ( ' clique' , isto.onButtonClick.bind ( este ) ) ; esse . Próximo botão . addEventListener ( ' clique' , isto.onButtonClick.bind ( isto ) ) ; if ( este . sliderCounter ) { esse . sliderButtonPrev . addEventListener ( ' clique' , isto.onButtonClick.bind ( este ) ) ; esse . sliderButtonNext . addEventListener ( ' clique' , isto.onButtonClick.bind ( este ) ) ; esse . sliderContador . addEventListener ( 'alterar' , este . sliderCounterUpdate . bind ( este ) ) ; } } atualizar ( slide ) { esse . sliderItems . forEach ( imagem => { imagem. lista de classes . remover ( 'imagem--ativa' ) ; imagem. removeAttribute ( 'aria-atual' ) ; } ) ; esse . currentPageElement . HTML interno = slide + 1 ; esse . pageTotalElement . innerHTML = isto . sliderItems . comprimento ; esse . sliderItems [ slide ] . lista de classes . add ( 'imagem--ativa' ) ; esse . sliderItems [ slide ] . setAttribute ( 'aria-current' , true ) ; esse . sliderControlButtons = isto . querySelectorAll ( '.slider-counter__link' ) ; esse . sliderControlButtons . forEach ( link => { link. lista de classes . remover ( 'slider-counter__link--active' ) ; link. removeAttribute ( 'aria-atual' ) ; } ) ; esse . sliderControlButtons [ slide ] . lista de classes . add ( 'slider-counter__link--active' ) ; esse . sliderControlButtons [ slide ] . setAttribute ( 'aria-current' , true ) ; esse . slideScrollPosition = slide * this . sliderItems [ 0 ] . largura do cliente ; esse . controle deslizante . scrollTo ( { esquerda : isto . slideScrollPosition } ) ; if ( este . sliderCounter ) { esse . sliderContador . valor = slide ; } if ( este.querySelector ( ' .dot' ) ) { const controlWidth = this . querySelector ( ` [ dados - ponto = '${0}' ] ` ) . largura do cliente ; const controlOffset = this . querySelector ( ` [ dados - ponto = '${slide}' ] ` ) . deslocamentoEsquerda ; esse . querySelector ( ` [ dados - ponto = '${slide}' ] ` ) . scrollIntoView ( { bloco : "mais próximo" , inline : "centro" } ) ; esse . querySelectorAll ( ` .ponto` ) . forEach ( ponto => ponto. classList.remove ( ' mediumDot' ) ) ; esse . querySelectorAll ( ` .ponto` ) . forEach ( ponto => ponto. classList.remove ( ' smallDot' ) ) ; if ( controlOffset > controlWidth * 10 ) { if ( slide > 4 && slide < this . sliderItems . length - 5 ) { esse . querySelector ( ` [ dados - ponto = '${slide - 5}' ] > . ponto ` ) . lista de classes . adicionar ( 'pontopequeno' ) ; esse . querySelector ( ` [ data - ponto = '${slide - 4}' ] > . ponto ` ) . lista de classes . add ( 'pontomédio' ) ; } } if ( controlOffset < ( controlWidth * 10 ) + ( controlWidth * ( this . sliderItems . length - 1 ) ) ) { if ( slide > 4 && slide < this . sliderItems . length - 5 ) { esse . querySelector ( ` [ dados - ponto = '${slide + 4}' ] > . ponto ` ) . lista de classes . add ( 'pontomédio' ) ; esse . querySelector ( ` [ dados - ponto = '${slide + 5}' ] > . ponto ` ) . lista de classes . adicionar ( 'pontopequeno' ) ; } } } } onButtonClick ( evento ) { evento. preventDefault ( ) ; if ( evento. alvo atual . nome === 'próximo' ) { esse . passo ++ ; if ( este . passo > este . sliderItems . comprimento - 1 ) { esse . passo = 0 } } outro { esse . etapa -- ; if ( este . passo < 0 ) { esse . passo = isto . sliderItems . comprimento - 1 } } esse . currentIndex ( este.passo ) ; _ } linkToSlide ( evento ) { const pontoIndex = evento. atualTarget . conjunto de dados . ponto ; esse . passo = pontoIndex ; esse . currentIndex ( este.passo ) ; _ } índiceAtual ( índice ) { esse . atualização ( índice ) ; } sliderCounterUpdate ( evento ) { evento. preventDefault ( ) ; esse . passo = isto . sliderContador . valor ; esse . currentIndex ( este.passo ) ; _ } } elementos personalizados. define ( 'componente deslizante universal' , UniversalSliderComponent ) ; |
É isso.
0 comentários