Expandir Recolher conteúdo DIV usando CSS puro ou uma combinação de CSS e JS

Jake

Eu gostaria de implementar uma ação de expansão e recolhimento usando CSS puro. O HTML se parece com o abaixo, onde podemos ter muitos expand-containerdivs. Os IDs são dinâmicos, então não quero depender de IDs de segmentação. Não consigo alterar o HTML para adicionar caixas de seleção, etc, para manter o estado, pois está vindo de um servidor. Então, gostaria de trabalhar apenas com CSS.

<div class="wikiContentBody">
   <div id="expander-1903026289" class="expand-container">
      <div id="expander-control-1903026289" class="expand-control">
         <span class="expand-control-icon">
         <img style="vertical-align:middle;" class="expand-control-image" 
            src="https://example.com/images/icons/grey_arrow_down.png">
         </span>
         <span class="expand-control-text">Problem Statement</span>
      </div>
      <div id="expander-content-1903026289" class="expand-content">
         <p>This content should be expandable and collapsible</p>
      </div>
   </div>
</div>

Aqui está o CSS que tenho até agora:

.expand-control {
  cursor: pointer;
}

div.expand-control:active ~ div.expand-content {
  display: block;
}
div.expand-content {
    display:none;
}

Não tenho certeza se é possível, mas também gostaria de alterar a fonte da imagem expand-control-imagede https://example.com/images/icons/grey_arrow_down.pngpara https://example.com/images/icons/grey_arrow_up.png, quando o painel for expandido.

Austin737

Se você pode usar javascript ou jQuery, você pode alternar uma classe no elemento pai:

$(".expand-control-icon").on("click", function(){
    $(".wikiContentBody").toggleClass("active");
});

Então, em seu CSS, algo assim:

.wikiContentBody.active div.expand-content {
  display: block;
}

Quanto a alterar o img src via CSS, o que você pode fazer é tentar envolver o img em uma div com position: relative. Em seguida, adicione um elemento psuedo com position: absolute e defina a imagem de fundo para o url secundário que você forneceu e defina display: none. Assim que o elemento pai tiver a classe de ativo, exiba o pseudo elemento sobre a imagem original:

.expand-control-icon > div {
    position: relative;
    z-index: 1;
}

.expand-control-icon > div::after {
    content: "";
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background: url("your other url");
    background-size: cover;
    background-position: center center;
    background-repeat: no-repeat;
    display: none;
    z-index: 2;
}


.wikiContentBody.active .expand-control-icon > div::after {
    display: block;
}

Talvez você precise refinar um pouco mais do que isso, mas pode ser um bom ponto de partida.

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

CSS recolher / expandir div

Como expandir-recolher diferentes alturas de div de acordo com a largura do dispositivo usando css / javascript

Como fazer o conteúdo principal div usando a grade css expandir com o conteúdo?

Expandir / recolher uma lista de menu animada e apenas com CSS

Transição de CSS não suave - recolher, expandir menu

Recolher / expandir CSS

Como criar conteúdo de pontos de interrupção responsivos com bootstrap ou CSS puro

Tabela de navegação de conteúdo expandir e recolher Bootstrap 4

barra de navegação sobreposição de conteúdo usando CSS puro

Altere o estilo do botão na mudança de foco usando CSS puro ou dinamicamente,

AG-GRID: Existe uma maneira de expandir / recolher a funcionalidade em uma linha e mostrar o conteúdo personalizado na área expandida?

AG-GRID: Existe uma maneira de expandir / recolher a funcionalidade em uma linha e mostrar o conteúdo personalizado na área expandida?

AG-GRID: Existe uma maneira de expandir / recolher a funcionalidade em uma linha e mostrar o conteúdo personalizado na área expandida?

Expandir o conteúdo para caber na página da área de trabalho usando css

Evento a ser chamado depois de expandir ou recolher uma visualização em árvore de kendo do nó

esconda um div quando a entrada ou div não estiver focada usando puro css

Criação de conteúdo inline para a página do site usando HTML, CSS e JS

Como posso expandir o conteúdo por meio de css?

Como posso expandir e recolher um <div> usando javascript?

Alinhe o centro de uma imagem única ou múltipla ou div como um todo usando Laravel e Css

CSS puro para passar o mouse sobre um div, ocultar o conteúdo e, em seguida, exibir o novo texto

Como expandir e recolher um div feito usando o atributo ária expandido?

Anime um div para revelar conteúdo absolutamente posicionado usando CSS e / ou jQuery

Como expandir e recolher uma matriz de caracteres únicos?

Ícone de rotação de preenchimento automático da IU do material ao expandir ou recolher

como animar (expandir e recolher) uma visualização de texto com várias linhas

CSS - como expandir o tamanho da imagem / div de fundo principal conforme o conteúdo se expande verticalmente

Expandir e recolher uma navegação ao entrar / sair do mouse, REAGIR

Adicionar transição CSS3, expandir / recolher