Tudo sobre Tecnologia da Informação

Dicas de HTML5 Parte 3

Ao acessar o link com a hashtag seguida da id de alguma tag do site, a página será posicionada na mesma posição em que ela se encontra. Sabendo disso, facilitará o uso de alguns recursos como os mapas.

Para utilizar mapas de imagens, você usa as tags map, e na imagem (ou outro arquivo) você indica o uso do mapa desejado com o parâmetro usemap, tudo dentro de tags section (os mapas não precisam obrigatoriamente estar dentro da tag, mas é recomendável).

Para definir os usos de mapas, usamos as tags area (sem fechamento), com as coordenadas e a tag shape, que definirá o tipo de polígono usado (círculo, retangular e poligonal), dessa forma:


<section id="conteudo">
    <img src="imagens/foto.jpg" usemap="#meumapa"/>
    <map name="meumapa">
        <area shape="rect" coords="179,202,270,260" href="exemplo.html#tela" target="janela"/>
        <area shape="circle" coords="76,51,11" href="exemplo.html#gadgets" target="janela"/>
        <area shape="poly" coords="28,143,83,216,84,249,27,169" href="exemplo.html#sensores" target="janela"/>
    </map>
    <iframe src="exemplo.html" name="janela" id="frame-spec"></iframe>
</section>

Pode ver que no atributo href, o link será usado com a hashtag e a id do artigo da página no iframe. Para funcionar corretamente, devemos usar o parâmetro target com o name do iframe que está a página.

Para definir as coordenadas da imagem desejada, você pode usar um editor de imagens qualquer e abrir a imagem, e pegar as coordenadas desejadas para isso.

Essas são as ordens das coordenadas, e seus respectivos nomes nos parâmetros:

Ordem das coordenadas em retângulos/quadrados (rect):

Ordem das coordenadas em circunferências (circle):

Ordem das coordenadas em polígonos livres, como um losango ou trapézio (poly):

Você pode inserir imagens sem precisar da tag img, usando CSS, para gerar efeitos especiais, como nesse exemplo, que criamos uma lista com fotos onde elas são ampliadas ao passar o mouse:

No HTML fará somente isso:


<ul id="album-fotos">
    <li id="foto01"><span>Foto 01</span></li>
    <li id="foto02"><span>Foto 02</span></li>
    <li id="foto03"><span>Foto 03</span></li>
    <li id="foto04"><span>Foto 04</span></li>
    <li id="foto05"><span>Foto 05</span></li>
    <li id="foto06"><span>Foto 06</span></li>
</ul>

E no CSS você postará algo assim:


ul#album-fotos {
    width: 700px;
    margin: 0 auto;
    padding: 50px;
    overflow: hidden;
    list-style: none;
}
ul#album-fotos li {
    float: left;
    width: 200px;
    height: 200px;
    margin: 10px;
    border: 5px solid white;
    background-color: white;
    box-shadow: 2px 2px 3px rgba(0, 0, 0, .4);
    -webkit-transition: all .4s ease-in;
}
ul#album-fotos li:hover {
    -webkit-transform: scale(1.5);
}
ul#album-fotos li span {
    opacity: 0;
    color: white;
    text-shadow: 1px 1px 1px black;
    background-color: rgba(0, 0, 0, .3);
    font-size: 9pt;
    line-height: 370px;
    padding: 5px;
}
ul#album-fotos li:hover span {
    opacity: 1;
}
ul#album-fotos li#foto01 {
    background: url("../imagens/galeria-01.jpg") no-repeat;
    background-position: 50% 50%;
    background-size: 400px 400px;
    background-color: white;   
}
ul#album-fotos li#foto01:hover {
    background-position: 0px 0px;
    background-size: 200px 200px;
}
ul#album-fotos li#foto02 {
    background: url("../imagens/galeria-02.jpg") no-repeat;
    background-position: 50% 50%;
    background-size: 400px 400px;
    background-color: white;   
}
ul#album-fotos li#foto02:hover {
    background-position: 0px 0px;
    background-size: 200px 200px;
}
ul#album-fotos li#foto03 {
    background: url("../imagens/galeria-03.jpg") no-repeat;
    background-position: 50% 50%;
    background-size: 400px 400px;
    background-color: white;   
}
ul#album-fotos li#foto03:hover {
    background-position: 0px 0px;
    background-size: 200px 200px;
}
ul#album-fotos li#foto04 {
    background: url("../imagens/galeria-04.jpg") no-repeat;
    background-position: 50% 50%;
    background-size: 400px 400px;
    background-color: white;   
}
ul#album-fotos li#foto04:hover {
    background-position: 0px 0px;
    background-size: 200px 200px;
}
ul#album-fotos li#foto05 {
    background: url("../imagens/galeria-05.jpg") no-repeat;
    background-position: 50% 50%;
    background-size: 400px 400px;
    background-color: white;   
}
ul#album-fotos li#foto05:hover {
    background-position: 0px 0px;
    background-size: 200px 200px;
}
ul#album-fotos li#foto06 {
    background: url("../imagens/galeria-06.jpg") no-repeat;
    background-position: 50% 50%;
    background-size: 400px 400px;
    background-color: white;   
}
ul#album-fotos li#foto06:hover {
    background-position: 0px 0px;
    background-size: 200px 200px;
}

As tags spans (que são "vazias") nesse caso é usado para esconder o texto temporariamente, como podem ver no CSS acima.

Para colocar áudio e vídeo em HTML, você usa a tags audio e video, respectivamente, com os atributos, que são o controls (que exibe os controles), o autoplay (que inicia a reprodução automaticamente), o muted (inicia sem som) e o loop (que faz ele reproduzir novamente desde o início, ao final da execução).

O caminho do áudio ou vídeo é colocado numa tag source (sem fechamento), dentro das tags audio ou video, dessa forma:


<audio id="musica" controls>
    <source src="media/audio.mp3" type="audio/mpeg"/>
    <source src="media/audio.ogg" type="audio/ogg"/>
    <p>Não é possível reproduzir o áudio!</p>
</audio>

PS: A ordem dos source tem influência, ele vai tentar o primeiro, depois o segundo e assim por diante, por isso é recomendado usar do menor ao maior, em MB. Lembrando que quanto mais pesados os arquivos de áudio e vídeo, mais tráfego terá no seu servidor.

No exemplo acima, apenas um dos arquivos será carregado no navegador, no caso será o formato que o navegador reconhecerá melhor. E tem também um texto alternativo para caso nenhum seja reconhecido. Mas no geral, o MP3 pra áudios e MP4 pra vídeos costuma ser aceitos por todos os navegadores atualizados.

Se tiver um único arquivo, podemos colocar diretamente na tag audio ou video o src, assim:


<audio id="musica" src="media/audio.mp3" controls>
    <p>Não é possível reproduzir o áudio!</p>
</audio>

Só que essa forma não é recomendada porque nem sempre os arquivos são compatíveis com 100% dos navegadores.

Dentro das tags videos, é possível colocar uma imagem personalizada como miniatura do vídeo com o atributo poster, dessa forma:


<video id="filme" controls poster="imagens/mini-video.jpg">
    <source src="media/video.mp4" type="video/mp4"/>
    <source src="media/video.ogv" type="video/ogg"/>
    <p>Não é possível reproduzir o vídeo!</p>
</video>

PS: Os parâmetros width e height podem ser usados em tags video. E o width em audio. Mas é melhor usar o CSS para dimensionar eles.

O parâmetro preload define que o arquivo será carregado enquanto a página é lida (o padrão é o auto, que só termina de carregar junto com o site, metadata carrega apenas dados do arquivo e none não carrega nada, mas é ignorado caso o autoplay esteja definido).

Esses são os parâmetros para os formatos de arquivos de áudio e vídeo suportados pelo HTML5:

Para áudio:

Extensão Parâmetro
MP3 audio/mpeg
WAV audio/wav
OGG audio/ogg

Para vídeo:

Extensão Parâmetro
MP4 video/mp4
M4V video/mp4
WEBM video/webm
OGV video/ogg

Você também pode colocar um plano de fundo para áudios e vídeos, colocando tudo dentro de uma div com uma id pré-definida, nessa forma:


<div id="tv-radio">
    <video id="filme" controls poster="imagens/mini-video.jpg">
        <source src="media/video.mp4" type="video/mp4"/>
        <source src="media/video.ogv" type="video/ogg"/>
        <p>Não é possível reproduzir o vídeo!</p>
    </video>
    <audio id="musica" controls>
        <source src="media/audio.mp3" type="audio/mpeg"/>
        <source src="media/audio.ogg" type="audio/ogg"/>
        <p>Não é possível reproduzir o áudio!</p>
    </audio>
</div>

Para ajustar o background e a posição do vídeo e controles do áudio acima, usamos CSS, dessa forma:


div#tv-radio {
    width: 900px;
    height: 580px;
    margin: auto;
    background: url("../imagens/radio-tv.png") no-repeat;
}
audio#musica {
    display: block;
    position: relative;
    left: 575px;
    top: 500px;
    width: 300px;
}
video#filme {
    display: block;
    position: relative;
    left: 90px;
    top: 80px;
    width: 440px;
}

Para colocar aplicações chamadas por plugins, como aplicações flash, fazemos assim:


<embed src="arquivoflash.swf" type="application/x-shockwave-flash" width="640" height="480"/>

Para criar bordas em letras, faça assim no CSS:


h1 {
    color: white;
    text-shadow: 1px -1px black, -1px 1px black, 1px 1px black, -1px -1px black;
}

Para criar bordas maiores, basta seguir a proporção (2px -2px, por exemplo).

Para abreviações, cujo conteúdo completo aparece ao colocar o mouse em cima dele, usamos o abbr, assim:


<p>Aprendendo a codificar em <abbr title="Hypertext Markup Language (Linguagem de Marcação de Hipertexto)">HTML</abbr></p>

De forma parecida, usamos o dfn, que deixa o conteúdo em itálico inclusive:


<p><dfn title="Hypertext Markup Language">HTML</dfn> é uma linguagem de marcação utilizada em páginas na web.</p>
<p><dfn title="Cascading Style Sheets">CSS</dfn> é uma linguagem de estilos que define a formatação e estilos de tags HTML.</p>

Para informações de contato, usamos a tag address, assim:


<address>
    As informações de contato são:<br/>
    E-mail: <a href="mailto:contato@dicasdeti.com.br">contato@dicasdeti.com.br</a><br/>
    Telefone: (01) 2345-6789
</address>

A tag base especifica um link base para links (como os usados em a), e é usada dentro do head, e só pode ser usada uma vez, assim:


<head>
    <meta charset="UTF-8"/>
    <title>Título da Página em HTML</title>
    <base href="http://localhost/DicasDeTI/"/>
</head>

Para inverter direção de textos, usamos a tag bdo, assim:


<p><bdo dir="rtl">Socorram-me, subi no ônibus em Marrocos.</bdo></p>
<!-- Para inverter usamos o parâmetro "rtl" (Right to Left), para a direção padrão é "ltr" -->

Para citações longas usamos a tag blockquote, e pra curtas a tag q, e podemos destacar citações com a tag cite, assim:


<!-- Citação longa: -->
<blockquote cite="http://localhost/DicasDeTI">
    <p>Isso é uma citação longa sobre o exemplo da tag blockquote.</p>
    <p>Mais informações pesquise sobre <cite>blockquote</cite>.</p>
</blockquote>
<!-- Citação curta: -->
<p>Isso é uma citação curta sobre o exemplo da tag <q cite="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/q">q</q>.</p>

Use a tag q ao invés de simplesmente aspas, por ter um significado semântico, mesmo se não tiver o parâmetro cite.

Além da tag input, podemos criar botões usando a tag button, assim:


<button name="botao">Texto do Botão</button>

Podemos usar a tag interativa details junto com summary para mostrar mais detalhes sobre algo, assim:


<details>
    <summary>Detalhes sobre a tag details:</summary>
    <p>Acesse o link: <a href="https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/details" target="_blank">https://developer.mozilla.org/pt-BR/docs/Web/HTML/Element/details</a></p>
</details>

Para englobar uma lista de pares de termos e descrições (como uma lista ordenada tipo "dicionário"), usamos a tag dl em conjunto com a dt e dd, assim:


<dl>
    <dt>HTML</dt>
    <dd>HTML é uma linguagem de marcação utilizada em páginas na web.</dd>
    <dt>CSS</dt>
    <dd>CSS é uma linguagem de estilos que define a formatação e estilos de tags HTML.</dd>
</dl>

Podemos usar a tag kbd para mostrar determinadas palavras, como no exemplo abaixo que é pra mostrar como salvar uma página do site:


<p>Para salvar o site nos seus favoritos utilize <kbd>Ctrl D</kbd>.</p>

Para destacar parte do texto, podemos usar a tag mark assim:


<p>O texto tem uma parte destacada <mark>que é essa</mark>!</p>

Podemos usar a tag meta, em head, para redirecionar páginas, por exemplo:


<head>
    <meta charset="UTF-8"/>
    <!-- Redireciona após 3 segundos: -->
    <meta http-equiv="refresh" content="3;url=https://www.google.com.br/">
    <title>Título da Página em HTML</title> 
</head>

Para criar medidores, usamos o meter, assim:


Temperatura atual:<br/>
<meter min="-50" max="50" low="22" high="25" value="22">°C</meter>22°C
<hr/>
Mínima:<br/>
<meter min="-50" max="50" low="22" high="25" value="20">°C</meter>20°C
<hr/>
Máxima:<br/>
<meter min="-50" max="50" low="22" high="25" value="26">°C</meter>26°C

Para criar barras de progressão, usamos a tag progress, assim:


<progress value="70" max="100">70%</progress>

Para, por exemplo, mostrarmos traduções de caracteres diferentes, podemos usar as tags ruby e rt, usadas para exibir os caracteres e :


<ruby>
    &#28450;<rp>(</rp><rt>Kan</rt><rp>)</rp>
    &#23383;<rp>(</rp><rt>Ji</rt><rp>)</rp>
</ruby>

Podemos utilizar o samp para representar uma saída de um código, assim:


<p>A saída do código será essa:</p>

<p><samp>Hello World!</samp></p>

A tag small permite criar trechos de texto pequenos, assim:


<p>Isso é uma frase com fonte normal <small>e isso é com uma fonte pequena.</small></p>

<p>Ela pode ser combinada com outras tags para gerar resultados como 10<sup><small>3</small></sup> e H<sub><small>2</small></sub>0.</p>

Podemos criar um efeito de animação em botões, crie esse botão abaixo:


<button class="botao"><span>Clique Aqui!</span></button>

E esse código em CSS para o efeito:


.botao {
    border-radius: 15px;
    background-color: #5511ff;
    border: none;
    color: white;
    text-align: center;
    font-size: 14pt;
    padding: 15px;
    width: 200px;
    cursor: pointer;
    margin: 5px;
    transition: all .5s;
}

.botao span {
    display: inline-block;
    position: relative;
    transition: all .5s;
}

.botao span:after {
    content: "\00bb";
    position: absolute;
    opacity: 0;
    top: 0px;
    right: -10px;
    transition: all .5s;
}

.botao:hover span {
    padding-right: 25px;
}

.botao:hover span:after {
    opacity: 1;
    right: 2px;
}

A tag time pode ser usada assim:


<p>O horário da reunião é <time>20:00</time>.</p>

<p>O dia do evento é <time datetime="2023-06-01 14:00">1º de junho</time>.</p>

Para criar versões diferentes de sites para impressora, podemos linkar o CSS assim, onde o padrão de media é all para todos, print para impressão, e screen para somente o site. Veja como usar:


<link rel="stylesheet" href="css/estilo.css" media="screen"/>
<link rel="stylesheet" href="css/impressora.css" media="print"/>

Aí no CSS da impressora, podemos colocar, por exemplo, uma fonte serifada (que é melhor pra leitura no papel), e ocultar coisas como links e menus. Por exemplo:


* {
    margin: 10px;
    padding: 10px;
}

html {
    font-family: "Courier New", Courier, monospace;
    font-size: 1.5em;
    line-height: 1.5em;
}

ul, footer {
    display: none;
}

Para separar em retrato (em pé) e paisagem (deitado), como por exemplo para celulares, podemos fazer assim:


<link rel="stylesheet" href="css/retrato.css" media="screen and (orientation: portrait)"/>
<link rel="stylesheet" href="css/paisagem.css" media="screen and (orientation: landscape)"/>

Isso é útil, para, por exemplo, ter imagens de fundo de tamanho certinho pra cada tipo de tela. Veja um exemplo para a paisagem:


body {
    background-image: url("../imagens/paisagem.jpg");
    background-position: left bottom;
}

PS: No caso acima, pode ser necessário usar outras opções como center bottom.

Podemos também criar um CSS específico para cada caso também, por exemplo:


@media print {
    /* As outras configurações ficam aqui */

    ul {
        display: none;
    }
}

@media screen and (orientation: portrait) {
    
}

@media screen and (orientation: landscape) {
                
}

Podemos configurar uma tela padrão para cada tipo de tela, como por exemplo:


@media print { /* Impressão /*

}

@media screen and (max-width: 768px) { /* Podemos configurar um CSS padrão para mobile e colocar para outros tipos de tela aqui */

}

@media screen and (min-width: 768px) and (max-width: 992px) { /* Tablet */

}

Outro exemplo:


@media print {
    body {
        background-image: none;
    }

    img#print {
        display: block;
    }
}

@media screen and (max-width: 768px) {
    body {
        background-image: url("../imagens/back-phone.jpg");
    }
    
    img#phone {
        display: block;
    }

}

-----------------------------------------

Para fazer um menu responsivo:


<nav id="menu">
    <h1>Menu</h1>

    <ul>
        <li><a href="#">Opção 1</a></li>
        <li><a href="#">Opção 2</a></li>
        <li><a href="#">Opção 3</a></li>
        <li><a href="#">Opção 4</a></li>
        <li><a href="#">Opção 5</a></li>
    </ul>
</nav>

Para colocar o ícone de "hamburguinho" do site de fontes da Google:


<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons"/>

Acima do nav colocamos isso:


<span id="burger" class="material-icons" onclick="clickMenu()">menu</span>

CSS do código acima:


* {
    margin: 0px;
    padding: 0px;
}

main {
    width: 90%;
    margin: auto;
    max-width: 1000px;
}

header {
    background-color: gray;
}

header > h1 {
    padding: 10px;
    text-align: center;
}

nav#menu {
    display: block;
}

nav#menu > ul {
    list-style-type: none;
}

nav#menu > ul > li > a {
    display: block;
    padding: 10px;
    margin: 0px;
    text-decoration: none;
    text-align: center;
    color: white;
    background-color: rgb(87, 87, 87);
}

nav#menu > ul > li:hover > a {
    background-color: gray;
}

span#burger {
    background-color: rgb(48, 48, 48);
    display: block;
    color: white;
    text-align: center;
    padding: 10px;
    cursor: pointer;
}

span#burger:hover {
    background-color: white;
    color: black;
}

E nesse caso precisaremos usar Javascript:


function clickMenu() {
    if(menu.style.display == "block") {
        menu.style.display = "none";
    }
    else {
        menu.style.display = "block";
    }
}

Para ele ficar diferente em telas menores e maiores, faça assim:


/* Atenção que é min e não max */
@media screen and (min-width: 768px) {
    span#burger {
        display: none;
    }
    nav#menu > ul {
        display: block;
    }

    nav#menu > ul > li {
        display: inline-block;
    }
}

E na tag body, coloque o evento onresize, assim:


<body onresize="mudouTam()">

Com essa função em Javascript:


function mudouTam() {
    if(innerWidth >= 768) { // parâmetro do objeto window
        menu.style.display = "block";
    }
    else {
        menu.style.display = "none";
    }
}

Parte 2 da Matéria