Às vezes é conveniente representar dados em uma estrutura de árbore como
a produzida pelo programa tree
. O programa tree
cria uma saída de árvore de diretórios como esta:
✔ /var/www/html/Repos/Freak-Spot/freak-theme [master|✔] $ tree . ├── static │ ├── css │ │ └── style.css │ ├── genericons │ │ ├── COPYING.txt │ │ ├── genericons.css │ │ ├── Genericons.eot │ │ ├── Genericons.svg │ │ ├── Genericons.ttf │ │ ├── Genericons.woff │ │ ├── LICENSE.txt │ │ └── README.md │ ├── images │ │ ├── creativecommons_public-domain_80x15.png │ │ ├── gnu-head-mini.png │ │ └── questioncopyright-favicon.png │ └── js │ ├── functions.js │ └── jquery-3.1.1.js └── templates ├── archives.html ├── article.html ├── article_info.html ├── author.html ├── authors.html ├── base.html ├── category.html ├── index.html ├── page.html ├── pagination.html ├── period_archives.html ├── tag.html ├── taglist.html └── tags.html 6 directories, 28 files
Para representar a instrução tal como aparece num terminal utilizei as
etiquetas HTML <samp>
e <pre>
(<pre><samp>saído do
tree</samp></pre>
). Mas e se eu quiser incluir uma ligação ou utilizar
outros elementos HTML, ou CSS? Então teremos de usar CSS para mostrar
o aspecto de ramos.
Vamos usar a saída anterior como exemplo. Isso pode ser expresso assim em HTML:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lista de árvore</title>
</head>
<body>
<div class="contenedor-arvore">
<ul>
<li>static
<ul>
<li>css
<ul>
<li>style.css</li>
</ul>
</li>
<li>genericons
<ul>
<li>COPYING.txt</li>
<li>genericons.css</li>
<li>Genericons.eot</li>
<li>Genericons.svg</li>
<li>Genericons.ttf</li>
<li>Genericons.woff</li>
<li>LICENSE.txt</li>
<li>README.md</li>
</ul>
</li>
<li>images
<ul>
<li>creativecommons_public-domain_80x15.png</li>
<li>gnu-head-mini.png</li>
<li>questioncopyright-favicon.png</li>
</ul>
</li>
<li>js
<ul>
<li>functions.js</li>
<li>jquery-3.1.1.js</li>
</ul>
</li>
</ul>
</li>
<li>templates
<ul>
<li>archives.html</li>
<li>article.html</li>
<li>article_info.html</li>
<li>author.html</li>
<li>authors.html</li>
<li>base.html</li>
<li>category.html</li>
<li>index.html</li>
<li>page.html</li>
<li>pagination.html</li>
<li>period_archives.html</li>
<li>tag.html</li>
<li>taglist.html</li>
<li>tags.html</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
Primeiro, devemos definir as regras para a lista e o seu recipiente para
não interferir com o desenho que mais tarde usaremos depois usando a
regra border
do CSS.
.contenedor-arvore, .contenedor-arvore ul, .contenedor-arvore li {
position: relative;
}
.contenedor-arvore ul {
list-style: none;
}
Agora vamos mudar a posição dos pseudoelementos para ter mais espaço para as árvores.
.contenedor-arvore li::before, .contenedor-arvore li::after {
content: "";
position: absolute;
left: -12px;
}
Depois, usando pseudoelementos, desenhamos linhas horizontais
(::before
) e verticais (::after
).
.contenedor-arvore li::before {
border-top: 1px solid green;
top: 9px;
width: 8px;
height: 0;
}
.contenedor-arvore li::after {
border-left: 1px solid brown;
height: 100%;
width: 0px;
top: 2px;
}
O último retoque é fazer o ramo não se espalhar mais no último elemento.
.clt ul > li:last-child::after {
height: 8px;
}
Segue-se o resultado:
Abaixo deixo o código completo. Obviamente, podes fazer modificações e alterar muitas medidas para alcançar uma aparência e funcionalidade mais personalizadas.
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Lista de árvore</title>
<style>
.contenedor-arvore .contenedor-arvore ul, .contenedor-arvore li {
position: relative;
}
.contenedor-arvore ul {
list-style: none;
}
.contenedor-arvore li::before, .contenedor-arvore li::after {
content: "";
position: absolute;
left: -12px;
}
.contenedor-arvore li::before {
border-top: 2px solid green;
top: 9px;
width: 8px;
height: 0;
}
.contenedor-arvore li::after {
border-left: 2px solid brown;
height: 100%;
width: 0px;
top: 2px;
}
.contenedor-arvore ul > li:last-child::after {
height: 8px;
}
</style>
</head>
<body>
<div class="contenedor-arvore">
<ul>
<li>static
<ul>
<li>css
<ul>
<li>style.css</li>
</ul>
</li>
<li>genericons
<ul>
<li>COPYING.txt</li>
<li>genericons.css</li>
<li>Genericons.eot</li>
<li>Genericons.svg</li>
<li>Genericons.ttf</li>
<li>Genericons.woff</li>
<li>LICENSE.txt</li>
<li>README.md</li>
</ul>
</li>
<li>images
<ul>
<li>creativecommons_public-domain_80x15.png</li>
<li>gnu-head-mini.png</li>
<li>questioncopyright-favicon.png</li>
</ul>
</li>
<li>js
<ul>
<li>functions.js</li>
<li>jquery-3.1.1.js</li>
</ul>
</li>
</ul>
</li>
<li>templates
<ul>
<li>archives.html</li>
<li>article.html</li>
<li>article_info.html</li>
<li>author.html</li>
<li>authors.html</li>
<li>base.html</li>
<li>category.html</li>
<li>index.html</li>
<li>page.html</li>
<li>pagination.html</li>
<li>period_archives.html</li>
<li>tag.html</li>
<li>taglist.html</li>
<li>tags.html</li>
</ul>
</li>
</ul>
</div>
</body>
</html>
Comentários