# Notas de Aula - Desenvolvimento Web ## Recursos 1. CSS 1. [CSS Reset](#CSS-Reset) 1. Eric Mayer 1. [Utilizar Font Awsome](#Fontawesome) 1. [Fonte Fluída](#Fonte-Fluída) 1. [Linkar CSS](#Linkar-CSS) 1. [Aplicação de fundo](#Aplicação-de-fundo) 1. [Animação](#Animação) 1. [MediaQuery](#Media-Query) 1. [Centralização de elementos]() 1. [Horizontal]() 1. [Vertical]() 1. [Variáveis em CSS]() 1. [Pseudo Classes]() 1. [Estado hover]() 1. JavaScript 1. [Funções de captura de elementos](#Métodos-para-captura-de-elementos) 1. [Monitorar eventos](#Monitorar-evento) 1. [Acessar formatação de um elemento](#Acessar-formatação-do-elemento) 1. [Gestão de classes](#Gestão-de-Classes) ## HTML ### Elementos estruturais * **header**: Cria cabeçalhos * **nav**: Delimita um conjunto de elementos de navegação * **main**: Delimita o conteúdo principal da página * **section**: Delimita uma seção/área da página * **footer**: Cria um rodapé * **div**: Tag sem significado representa um novo bloco de conteúdo, uma divisão * **article**: Delimita um conteúdo que tem sentido completo, que poderia ser distribuído de forma independente sem prejuízo ao seu entendimento. ### Elementos textuais * **p**: Cria um parágrafo * **hx [h1,h2,h3...]**: Delimita um título, ou seja, um elemento que tem conteúdo associado a ele * **a**: Cria um link/âncora * **img**: Cria uma imagem * **span**: Tag sem significado, similar a div só que com natureza inline * **strong**: Especifica uma porção de conteúdo que tem maior importância frente ao resto daquele conteúdo * **details/sumary** ### Formulário: * **form**: Cria um formulário * **fieldset**: Agrupa um conjunto de campos * **legend**: Título de um fieldset * **label**: Rótulo/Legenda de um campo de formulário * **input**: Campo para entrada de dados * legenda interna dos campos: placeholder * item de preenchimento obrigatório * tipos * text * number * tel * checkbox - caixa quadrada que permite marcar mais de um item * radio - item de formato circular que permite a marcação de apenas uma opção * **select**: Lista supensa * **option**: Itens da lista de suspensa * **textarea** Campo para entrada de texto com mais de uma linha ### Lembretes * NÃO EXISTE LISTA DE UM ITEM SÓ * Por critério de usabilidade a logo deve ser link para homepage * Delimite conjunto de elementos de navegação com tag apropriada * Não coloque um a dentro de um button ou vice-versa, ou o item é um link ou ele é um botão * Não coloque um H (h1,h2...) dentro de um p e vice-versa, ou o item é um título ou um paragrafo ele não pode ser as duas coisas ao mesmo tempo ## CSS ### Propriedades * **display:flex** - deixa os filhos do elemento um ao lado do outro * Não há sentido em aplicar flex em elemento que tem apenas um filho * **Propriedades Associadas** * **justify-content** - controlará a disposição horizontal de elementos sob ação do flex * **align-itens**: controlará a disposição vertical de elementos sob ação do flex * **flex-wrap**: define o que ocorre caso não haja espaço disponível para que outros elementos possam ficar ao lado de outros * **margin** - espaçmaneto externo [sup dir inf esq] * **padding** - espaçamento interno * **with** - largura * **height** - altura * **font-size** - tamanho da fonte * **font-family** - tipografia a ser aplicada ao elemento * **font-weigth** - atribuição de negrito [bold | bolder | valores entre 100 e 900] * **text-decoration** - opções de uso de linha no texto, incluindo o underline * **text-align** - alinhamento do texto * Quando colocado diretamente em uma imagem não terá efeito algum * Deve ser colocado no elemento para que seu conteúdo sofra o efeito do alinhamento de texto * **border** - aplica borda a um elemento [tamanho tipo cor] ~~~css border:1px solid red; ~~~ * **box-shadow** - aplica borda a um elemento [offset-x offset-y blur-radius spread-radius color] ~~~css box-shadow: 2px 2px 2px 1px rgba(0, 0, 0, 0.2); ~~~ * **background** - aplica fundo (cor,imagem,gradiente) no elemento. Para aplicar mais de um fundo separe por vírgulas * **color** - altera a cor do texto ### Lembretes * Verifique se o css foi adicionado a sua página * Verifique se você está fazendo uso do CSS Reset * A cor do link só é modificada quando a tag a é incluída no seletor * Atribuir flex a elemento com um único filho não faz muito sentido para alterara posicionamentos # Conteúdo ## HTML * [Devdocs](https://devdocs.io/html/) ## CSS * CSS Reset * [Adaptação](https://elad.medium.com/normalize-css-or-css-reset-9d75175c5d1e) # Anexos ## CSS ### CSS Reset ~~~html /* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */ html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td, article, aside, canvas, details, embed, figure, figcaption, footer, header, hgroup, menu, nav, output, ruby, section, summary, time, mark, audio, video { margin: 0; padding: 0; border: 0; font-size: 100%; font: inherit; vertical-align: baseline; } /* HTML5 display-role reset for older browsers */ article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; } body { line-height: 1; } ol, ul { list-style: none; } blockquote, q { quotes: none; } blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; } table { border-collapse: collapse; border-spacing: 0; } ~~~ ### Fontawesome ~~~html <script src="https://kit.fontawesome.com/bd5b44309d.js" crossorigin="anonymous"></script> ~~~ * Acesse o site [fontawesome](https://fontawesome.com/search) para encontrar o ícone que deseja utilizar * Lembre de alterar a tag para a tag spam que é mais semântica ### Fonte Fluída ~~~css html { font-size: calc(15px + 0.390625vw); } ~~~ ### Linkar CSS ~~~html <link rel="stylesheet" href="local do arquivo" type="text/css" /> ~~~ ### Aplicação de fundo * Para aplicar mais de um fundo dentro do mesmo elemento utilize a propriedade background e separe cada um dos fundos por vírgula. Caso queira sobrepor com um cor ainda assim será preciso utilizar o gradiente repetindo a mesma cor. Nos testes realizados em sobreposição de fundos a cor solida não é aceita apenas gradiente e imagens. ~~~css background-image: linear-gradient(direction, color-stop1, color-stop2, ...); ~~~ ~~~css section{ background:linear-gradiente(rgba(0,0,0,0.5),rgba(0,0,0,0.6)), url(../images/fundo.jpg) no-repeat; background-size: cover, cover; } ~~~ ~~~css div{ background: linear-gradient(to bottom right, red, yellow); background: linear-gradient(217deg, rgba(255,0,0,.8), rgba(255,0,0,0) 70.71%),linear-gradient(127deg, rgba(0,255,0,.8), rgba(0,255,0,0) 70.71%), linear-gradient(336deg, rgba(0,0,255,.8), rgba(0,0,255,0) 70.71%); background:linear-gradient(45deg, red 0 50%, blue 50% 100%) } ~~~ ### Animação * **trasition**: aplica uma trasição quando o valor de uma propriedade for modificado. [property name duration timing function delay] * [Documentação MDN](https://developer.mozilla.org/pt-BR/docs/Web/CSS/transition) ~~~css transition: margin-left 4s ease-in-out 1s; ~~~ ### Media Query * [Documentação MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/@media) ## JavaScript ### Métodos para captura de elementos * **getElementById**: recupera um único elemento que teve seu id informado como parâmetro ~~~js let elemento = document.getElementById("banner"); ~~~ * **querySelector**: recupera o primeiro elemento que corresponder ao seletor CSS informado como parâmetro ~~~js let elemento = document.querySelector("ul"); ~~~ * **querySelectorAll**: recupera todos elementos que correspondam ao seletor informado como parâmentro dentro do escopo em que foi chamado ~~~js let elementos = document.querySelectorAll('span'); ~~~ ### Monitorar evento * Elemento único ~~~js let elemento = document.getElementById("banner"); elemento.addEventListener("click", function (e) { console.log("hey Jude"); }); ~~~ * Conjunto de elementos ~~~js let elementos = document.querySelectorAll('p'); elementos.forEach((item) => { item.addEventListener('click', function(e){ console.log("Foi"); }) }); ~~~ ### Acessar formatação do elemento * Utilize a propriedade style e depois o nome da propriedade CSS que deseja atribuir valores ~~~js let elemento = document.getElementById("banner"); elemento.style.display="block"; elemento.style.color = "green"; elemento.style.backgroundColor = "red"; ~~~ ### Gestão de Classes * classlist ~~~js let elemento = document.getElementById("banner"); elemento.style.display="block"; elemento.style.color = "green"; elemento.style.backgroundColor = "red"; ~~~ ### Centralização de elementos #### Horizontal * [text-align]() * Funciona para alinhamento de elementos inline, como exto e imagem. #### Vertical * [Align-content](https://developer.mozilla.org/en-US/docs/Web/CSS/align-content) * Funciona em alementos com flex, grid ou block ### Variáveis em CSS ~~~css :root { --main-bg-color: brown; } .one { color: white; background-color: var(--main-bg-color); } ~~~ ### Pseudo Classes * :user-valid / :user-invalid ### Estado hover ### Animação * **interpolate-size** : animar altura e padding