Estou usando a details
tag maravilhosa da seguinte maneira, que expande o conteúdo quando um link é clicado:
summary::marker {
content: " ";
}
summary {
color: blue;
text-decoration: underline;
cursor: pointer;
}
<details>
<summary>Show Details</summary>
<h2>HTML Details</h2>
<p>Explanation of the topic</p>
</details>
Esta tag permite incluir todos os tipos de tags HTML, incluindo imagens a serem incluídas nos detalhes expandidos.
Por exemplo, o código acima mostrará primeiro o seguinte:
e quando o link "Mostrar detalhes" for clicado, o HTML será expandido para aquele tópico específico:
Observe que na forma expandida, o termo "Teorema de Pitágoras" está em negrito, pois usei a b
tag.
Funciona bem.
Mas me deparei com uma situação em que uma única página contém cerca de 300 desses tópicos, e "Mostrar detalhes" para cada um deles inclui cerca de 3 arquivos de imagem cada.
Isso significa que terei cerca de 900 imagens carregadas naquela página assim que alguém a visitar. Isso não é bom, pois o carregamento será lento e o visitante poderá clicar em apenas 1 ou 2 tópicos em expansão. Portanto, não é necessário carregar todas as 900 imagens.
Eu estava procurando uma personalização que permitisse que, ao clicar no link "Mostrar Detalhes" de um tópico específico, apenas aquele HTML específico fosse carregado e exibido. Combinar AJAX/JS é uma solução, mas o AJAX tem a limitação de não fechar o link expandido anteriormente automaticamente.
Algo como combinar a details
tag e o AJAX, de modo que a expansão de uma mostre aquela imagem específica e feche a outra imagem. ( details
a tag permite que apenas um elemento clicado seja exibido e fecha automaticamente o clicado anteriormente).