Skip to content

Instantly share code, notes, and snippets.

@micalevisk
Last active May 8, 2019 20:37
Show Gist options
  • Save micalevisk/80f8f4248c25e1562b2e7f9f5e6d3182 to your computer and use it in GitHub Desktop.
Save micalevisk/80f8f4248c25e1562b2e7f9f5e6d3182 to your computer and use it in GitHub Desktop.
[PW 2018/1] Lista de revisão para a primeira prova

1

O erro sintático está no uso da tag meta dentro do elemento <body>:

<body>
  <meta charset='UTF-8'>
  ...
</body>

Para corrigi-lo basta mover a linha destacada para dentro do elemento <head>.

2

Os atributos height e width (em pixels) do elemento <img> no estilo inline são importantes pois impactam no desempenho da renderização da página pelo navegador, visto que, ao saber as dimensões da imagem, o espaço necessário para ela será reservado quando a página for carregada. Sem esses valores, o layout da página será alterado durante o carregamento. Mas é mais recomendado o uso relativo ao tamanho da imagem original para evitar possíveis distorções. Esses valores não afetam o tamanho real da imagem baixada.

3

<!DOCTYPE html>
<html>
    <head>
        <title>Instituto de Computação</title>
        <meta charset='utf-8'>
    </head>
    <body>
      
      <table border="1" align="center">
          <caption align="center">Professores do Grupo Banco de Dados e Recuperação de Informação, do Instituto de Computação da UFAM</caption>
       
          <tr>
              <th colspan="3">Professores do BDRI, UFAM</th>
          </tr>
          <tr>
              <th>Nome</th>
              <th>Cargo</th>
              <th>Email</th>
          </tr>

          <tr>
              <td>Aligran S. Da Silva</td>
              <td>Professor Associado</td>
              <td>alti@icomp.ufam.edu.br</td>
          </tr>
          <tr>
              <td>André Luis Carvalho</td>
              <td>Professor Adjunto</td>
              <td>andre@icomp.ufam.edu.br</td>
          </tr>
          <tr>
              <td>David F. de Oliveira</td>
              <td>Professor Adjunto</td>
              <td>david@icomp.ufam.edu.br</td>
          </tr>

    </body>
</html>

4

Caracteres especiais são tipos de caracteres que não podem ser processados diretamente pelo navegador. Para usá-los é necessário o uso de referências de entidades que os representa, na forma &code;, onde "code" pode ser a abrevição de palavras ou números decimais e hexadecimais. Devem ser usados quando o caractere desejado já possui um significado na linguagem ou quando representam um símbolo especial.

5

Os repositórios locais consistem em três "árvores" mantidas pelo .git.

  • a primeira é a working directory/tree (diretório de trabalho), que contém os arquivos vigentes locais. Os arquivos nos quais você está trabalhando atualmente;
  • a segunda é a index (staging area ou área de seleção), que funciona como uma área temporária dos arquivos consolidados. É um arquivo que armazena informações sobre o que irá para o próximo commit. Assim, atua como uma interface entre o repository e a working directory;
  • a terceira é a HEAD ou repository (diretório do Git), que aponta para o último commit.
  1. Modificar os arquivos no seu diretório de trabalho
  2. Selecionar os arquivos, adicionando snapshots deles para sua área de preparação através do comando git add
  3. Efetivar alterações que estão indexadas, para a próxima versão no repositório do Git através do comando git commit com uma mensagem associada

6

São formas alternativas de se aplicar um estilo CSS a um documento (de acordo com a prioridade):

  • estilos inline: quando o estilo é definido no atributo style do elemento
  • estilos embarcados: quando o estilo é definido no cabeçalho (head) no documento, entre as tags de abertura e fechamento da tag style
  • estilos externos: quando o estilo é definido em um arquivo CSS separado do documento. Usado através da tag link no cabeçalho do documento.

Exemplo de estilo inline:

<!-- ... -->
<p style="color:red;">Teste</p>
<!-- ... -->

7

A diferença entre unidades relativas e unidades absolutas é que, as relativas são medidas em relação ao tamanho de outros elementos do documento (fontes, viewport, etc). Enquanto as absolutas determinam o tamanho fixo real. A unidade em é relativo ao tamanho da fonte (font-size) do elemento em que ele foi declarada. Pode ser usada da seguinte forma: p { height: 2em; }

8

padding: 5px 0 15px 10px;

9

<!DOCTYPE html>
<html>
    <head>
        <title>Instituto de Computação</title>
        <meta charset="utf-8">
        <style type="text/css">
            img {
                width: 130px;
                border: 4px solid black;
                background: lightgray;
                margin: 6px;
                padding: 2px;
            }
        </style>
    </head>
    <body>
        <img src="escudo.png">
        <img src="escudo.png">
    </body>
</html>

10

Deve-se usar o seguinte seletor de classes: .cl1

11

JavaScript é um linguagem dinamicamente tipada. O que significa que os tipos de cada variável são inferidos (ou explícitos) em tempo de execução e redefindios de acordo com o valor corrente da variável a cada reatribuição, i.e., os tipos são associados a valores, e não à variáveis. O JS tem inferência de tipo, é fraca e é dinâmica.
Exemplo:

var foo = '1'
console.log(typeof foo) // string
foo = 1
console.log(typeof foo) // number

12

Declara um elemento DIV com ID "icomp" e dois botões, um com ID "add" e outro com ID "clean". No conteúdo do documento. A ação/comportamento é definido logo abaixo pelo script em JS que: procura pelo elemento com ID "icomp" na página (salvando-o na variável global icomp e, para cada botão define uma ação -- através da propriedade onclick de cada elemento retornado pela função getElementById do objeto document.

  • para o primeiro botão, a ação é definir (set) as propriedades background-color, color e font-size no estilo inline no elemento da variável icomp
  • para o segundo botão, a ação é semelhante mas inversa, i.e., remove todos os estilos (se exisitirem) definidos anteriormente

13

As vantagens em se utilizar o método externo para incluir códigos JavaScript sobre uma página são:

  • reuso facilitado do mesmo código por diferentes páginas. O que evita a propagação manual de mudanças no código JS
  • se um usurio se direcionar para uma página que contém a mesma referência para o JS externo, está página não precisará baixar (e processar) o mesmo código novamente pois o browser do usuário manterá esse arquivo em cache
  • separar as duas linguagens (JS e HTML) facilitará a manutenção da página, que poderá ser realizada de forma independente por (grupos de) desenvolvedores diferentes ao mesmo tempo

14

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    </head>
    <body>
        <form>
            <input type="submit"
                   value="Alertar"
                   onclick="return !!alert('Botão Pressionado')">
                   <!--            ^-- pois o alert retorna o falsy value "undefined"  -->
        </form>
    </body>
</html>

15

(function() {
  var a = 5;
})();
console.log(a);

O resultado da execução do código JS acima é: ReferenceError: a is not defined pois, dado o uso de uma IIFE (Função Imediata), a variável a só existirá no escopo dessa função. Assim, o interpretador não encontrará-la fora do escopo dessa função anônima imediata. Então lançará esse erro.

16

function teste() {
  console.log(a); // undefined
  console.log(foo()); // 2
  var a = 1;
  function foo() {
    return 2;
  }
}
teste();

O resultado do código JS acima está comentado ao lado de cada console.log.
Ele sofreu a influência do hoisting (içamento) pois o uso da variável a através da keyword var fez com que ela fosse declarada no início do escopo da função teste. O que evitou a ocorrência de erros. Mas só após o segundo console.log essa variável recebeu o valor 1. O mesmo acontece com a função foo, cuja declaração foi elevada para o início do escopo da função.

17

var fullname = 'John Doe';
var obj = {
  fullname: 'Colin Ihrig',
  prop: {
    fullname: 'Aurelio De Rosa',
    getFullname: function() {
      return this.fullname;
    }
  }
};
console.log(obj.prop.getFullname()); // Aurelio De Rosa
var test = obj.prop.getFullname;
console.log(test()); // John Doe

O resultado do código JS acima está comentado ao lado de cada console.log.
O valor do this -- fora de arrow functions -- é estabelecido segundo o escopo de execução no qual está inserido.
Em si tratando do modo não restrito (ausência da expressão "use strict";), dentro de uma função, o valor do this depende de como a função é invocada.

No exemplo acima, a propriedade getFullname atua em relação ao objeto obj devido ao seu escopo funcional. Assim, no primeiro print, a resposta é "Aurelio De Rosa" pois se refere à propriedade fullaname do próprio obj.
Já no segundo print, como o escopo não foi definido explicitamente, a resposta é "John Doe" pois o contexto é o de execução global (window), que possui o atributo fullname que foi definido quando se declarou a variável global fullaname.

18

Na igualdade restrita/identidade (três iguais) nenhum valor é convertido implicitamente para algum outro valor antes da comparação. Assim, em linhas gerais, se os valores possuem tipos distintos, então são considerados diferentes. Caso contrário, a comparação segue como a feita pelo operador de igualdade ampla (dois iguais), por valor. Visto que, ao usar "==" haverá uma coerção dos valores para que ambos os lados da expressão tenham o mesmo tipo.

19

(function() {
  function foo(x) {
    var baz = 3;
    return function (y) {
      console.log(x + y + (++baz));
    }
  }
  var moo = foo(2); // moo agora é um closure.
  moo(1); // 7
  moo(1); // 8
})();

Closures são funções definidas em outras funções (aninhadas) que, naturalmente, possuem acesso às variáveis da função mais externa onde foi definida (de acordo com as cadeias de escopo).
No código JS acima, a função imediata possui a função foo que retorna uma closure. Assim, a variável moo torna-se uma closure. De modo que a variável local baz de foo é conhecida (indiretamente) somente por ela, i.e., seus valores são mantidos mesmo após o retorno da função foo.

20

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Esfera</title>
        <style>
            label {
                display: inline-block;
                padding: 4px;
                width: 190px;
                text-align: right;
            }
        </style>
    </head>
    <body>
        <form name="mainform">
            <label for="raio">Raio da Esfera</label>
            <input type="text" name="raio" value="10">
            <input type="submit" name="calcular" value="Calcular!"> <br>
            <label for="area">Área</label>
            <input type="text" name="area" readonly> <br>
            <label for="volume">Volume</label>
            <input type="text" name="volume" readonly>
        </form>
        
        <script type="text/javascript">
            const maiform = document.mainform;
            
            mainform.calcular.onclick = function() {
                const raio = mainform.raio.value;

                mainform.area.value = (4 * Math.PI * raio * raio).toFixed(2);
                mainform.volume.value = ((4 * Math.PI * Math.pow(raio, 3)) / 3).toFixed(2);

                return false; // evitar o envio dos dados para o servidor
            };
        </script>
    </body>
</html>

21

Funções construtoras de JS são funções normais que geralmente são utilizadas para instanciar objetos com atributos (e métodos) pré-definidos.
Exemplo de uso:

function Aluno(nome, matricula) {
  this.matricula = matricula
  this.getNome = () => nome
}

var aluno1 = new Aluno('Micael', 21554923)
console.log( aluno1.getNome() )// "Micael"

22

Funções fábrica (factory functions) de JS são funções que retornam objetos literais a fim de definir um template de acordo com atributos externos. Em suma, é um gerador de objetos. Deve ser chamado sem o uso da palavra reservada new.
Exemplo de uso:

const criarAluno = (nome, matricula) => ({ nome, matricula })
var aluno2 = criarAluno('Micael', 21554923)
console.log( aluno2.nome ) // "Micael"

1

Linhas onde ocorrem os erros sintáticos:

  1. 04: comentário inválido para o HTML. Deve-se colocar o comentário entre <!-- e -->
  2. 10 (com 11): houve a troca do atributo CSS com o seletor. A solução seria tornar: p#para { background-color: blue; }
  3. 14 e 15 (até a 22) : usa-se tags que deveriam estar dentro da tag body. Basta mover tais tags para dentro de um elemento <body>
  4. 17: a tag strong não é do tipo void, então deve ser fechada. Bastaria acrescentar o elemento de fechamento </strong>

3

  1. span
  2. span.cl1 ou [title]
  3. p > span ou p span

4

Closure são funções definidas no escopo de outras funções que quebram a cadeia de escopo e geram um espaço privado para si.
No exemplo dado, a variável baz após a ĩnvocação da função foo, só será visível no escopo da função retornada. Assim, a closure moo pode acessar essa variável mesmo após o término da execução da foo.

5

  1. Diretório de trabalho (working directory/tree) é o diretório onde os arquivos vigentes estão localizados.
  2. A diferença é que no local as alterações e efetivações (via git commit) são visíveis apensa na máquina em que o diretório se localiza. Enquanto no remoto todos os commits se tornam acessíveis por outros repositórios locais

extra

<!DOCTYPE html>
  <html>
    <head>
      <style>
        div {
          position: absolute;
          width: 200px;
          height: 200px;
          white-space: wrap;
          font-size: 30px;
        }

        .right { right: 0; }
        .left { left: 0; }
        .top { top: 0; }
        .bottom { bottom: 0; }

        .red {
          background-color: red;    
        }
        .yellow {
          background-color: yellow;    
        }
        .blue {
        background-color: blue;
        }
        .green { 
        background-color: green;
        }
      </style>
    </head>
    <body>
      <div class="top right red">Canto Superior Direito</div>
      <div class="top left yellow">Canto Superior Esquerdo</div>
      <div class="bottom left blue">Canto Inferior Esquerdo</div>
      <div class="bottom right green">Canto Inferior Direito</div>
    </body>
</html>

HTML5 ~ HyperText Markup Language

  • Linguagem de marcação usada para especificar o conteúdo e a estrutura das páginas Web de uma forma portátil
  • O desenvolvimento client-side é baseado em 3 camandas principais:
    • conteúdo ~ viabilizado pelo HTML
    • estilo ~ viabilizado pelo CSS
    • comportamento ~ viabilizado pelo JavaScript
  • Baseado no conceito de Hipertexto, que são conjuntos de elementos (informação), ou nós, ligados por conexões (ou interligações)
  • O HTML5 é mais tolerante e é compatível com as versões anteriores do HTML
  • O document type declaration <!DOCTYPE html> é obrigatório no HTML5, para informar ao browser que o conteúdo do documento é HTML
  • Um código HTML é iniciado através da tag html, cujo conteúdo é divido em duas partes: head e body que estão aninhadas nela
    • o head de um documento é a parte não exibida no navegador. Contém informações como title, links para CSS, links para favicons personalizados e outros metadados; atua como um sumário de um livro
    • o body de um documento é a parte exibida no navegador; atua como o conteúdo "real" de um livro
  • Documentos HTML5 delimitam a maioria dos elementos com tags iniciais e finais; tags de abertura e fechamento
  • metadata significa dado (informação) sobre dados
    • a tag <meta> são inseridas dentro de <head>; provê metadados sobre páginas HTML, e não altera o layout dos documentos.
    • os elementos meta são tipicamente usados para especificar a descrição, palavras-chave, e os autores dos documentos
    • podem ser usados pelos browsers (codificação; período de reload da página) e por máquinas de busca (keywords)
<!-- exemplo do uso da tag META -->
 <head>
  <meta charset="UTF-8"> <!-- especificar a codificação de caracteres ~ conjunto de caracteres que o documento pode usar -->
  <meta name="description" content="Free Web tutorials">
  <meta name="keywords" content="HTML,CSS,XML,JavaScript">
  <meta name="author" content="John Doe">
  <meta http-equiv="refresh" content="30"> <!-- sobrescreve parâmetros do cabeçalho HTTP; refresh a cada 30 segundos -->
  <meta name="viewport" content="width=device-width, initial-scale=1.0"> <!-- alterar a viewport -->
  <meta name="robots" content="noindex"> <!-- usada por mecanismos de pesquisa
          'noindex'    não indexe esta página
          'noarchive'  não armazene ou cacheie esta página
          'nofollow'   não siga os links desta página  -->
</head> 
  • void tags: são iniciadas e finalizadas em um único comando. Ex: <br />, <img src=".." /> (o uso da barra no final é opcional)
  • atributos: são informações adicionais sobre um elemento, usados pelos browsers para determinar como processar o elemento. Cada atributo possui um nome e um valor separados pelo sinal de igual. Podem ser:
    • booleanos: tipos de atributos que não precisam receber um valor. Ex: <input disabled />, <input disabled="" />, <input disabled="disabled" />
    • personalizados: prefixados por data-. Ex: <input data-creator="adam" data-purpose="collection">
<article
  id="electriccars"
  data-columns="3"
  data-index-number="12314"
  data-parent="cars">
...
</article>
var article = document.getElementById('electriccars');
 
article.dataset.columns // "3"
article.dataset.indexNumber // "12314"
article.dataset.parent // "cars"
article::before {
  content: attr(data-parent);
}
article[data-columns='3'] {
  width: 400px;
}
  • O HTML5 provê seis elementos de cabeçalhos (h1 até h6) para especificar a relativa importância de uma informação

    • o tamanho do texto renderizado é definido pelo navegador. Mas pode-se usar o CSS para atribuir a cada elemento de cabeçalho um tamanho exato (atributo _font-size)
    • ajudam a criar um outline dos documentos, e podem ser usados pelas máquinas de busca
  • Elementos de marcação inline não começam uma nova linha no fluxo do documento. São renderizados dentro do fluxo que os contém. Ex: <strong>, <em>, <del>, <sub>, <img>

  • Elementos de marcação block são como caixas, que dividem a página em seções de layout e geram um espaçamento antes e depois do seu conteúdo. Um elemento de nível de bloco sempre inicia uma nova linha e ocupa toda a largura disponível. Ex: <h1>, <p>, <table>

  • Listas podem ser ordenadas (<ol>; atributos reversed, start e type) ou não ordenadas (<ul>). Cada item é seperado usando um elemento <li> (atributo value)

  • Um hyperlink referencia outros recursos, tal como páginas HTML e imagens. Para criar um link, usa-se a tag a, informando a URL desejada através do atributo href. Se este valor não iniciar com um protocolo conhecido, o browser assume que o link possui uma referência relativa. Ex: <a href="contato.html">Formulário de Contato</a>, <a href=#labs>...</a> (por padrão, o recurso deve estar disponível na mesma localização do documento corrente)

    • o atributo target permite especificar onde a página do link deverá ser aberta (_self ou _blank)
  • O HTML5 provê referências para representar caracteres especiais, na forma &<code>;

    • muitos caracteres não podem ser apresentados em um browser a não ser através dessas referências (entidades)
    • alguns caracteres são usados como palavras-reservadas da linguagem, por isso não podem ser representados da forma "literal
    • onde code pode ser: abreviações de palavras (ex: copy de "copyright") ou números decimais e hexadecimais (ex: #38 ou x26 para o caractere "&")
  • Uma tabela pode ser dividida em thead, tbody e tfoot

    • pode-se mesclar conteúdos de células consecutivas usando os atributos rowspan e colspan de tr e td, respectivamente
  • O HTML5 provê novos elementos para definir a estrutura semântica das páginas. Tais como: header, nav, article e footer

  • O uso de formulários permite que usuários da página Web enviem dados para os servidores Web. São definidos através da tag form que possui os atributos method (para informar o verbo HTTP) e action (para informar o script do servidor que receberá os dados)

    • a tag input é usada para criar itens de formulário para obter dados do usuário. O tipo é determinado pelo atributo type
    • os dados são submetidos através de um clique sobre o botão <input type=submit value="Submeter">
    • o botão do tipo reset apagará todos os dados preenchidos (<input type=reset value="Resetar Dados">)

Git

  • sistema de controle de versão distribuído; registra as mudanças feitas em um conjunto de arquivos ao longo do tempo

  • diferente de VCS centralizados, nos distribuídos, as estações de trabalho (clientes) possuem cópias completas do repositório. Ou seja, a forma em que o Git armazena os dados

    • a maioria dos sistemas de versionamento armazenam informações como uma lista de mudanças por arquivo
    • o Git usa links para arquivos que não foram modificados, e uma cópia completa de arquivos que forma
  • a maioria das operações são realizadas localmente

  • após iniciar um repositório (git init [dir]), o seguinte fluxo para edição de arquivos pode ser seguido:

    • selecionar arquivos para o próximo versionamento ~ git add
    • consolidar (commit; comprometer) tais arquivos no repoistório ~ git commit
  • faz com que seus arquivos sempre estejam em um dos três estados fundamentais:

    • Modificado = arquivo que sofreu mudanças mas que ainda não foi selecionado
    • Selecionado = quando você marca um arquivo modificado em sua versão corrente para que ele faça parte do snapshot do próximo commit (consolidação)
    • Consolidado = quando os arquivos estão seguramente armazenados em sua base de dados local
  • o comando status pode ser utilizado para identificar os estados dos arquivos tanto do diretório de trabalho quanto do repositório (na branch corrente)

  • é preciso efetuar um commit no repositório de trabalho cada vez que o projeto atinge um estado no qual se deseja gravar (arquivos indexados na staging area)

    • no momento do commit cada arquivo da working directory pode estar monitorado (tracked), não monitorado (untracked) ou ignorado (ignored)
    • arquivos monitorados = (i) estavam no último commit; podem estar inalterados ou modificados. (ii) arquivos adicionados via git add
    • arquivos ignorados = estão dispostos (ou casam com alguma expressão do Glob) no arquivo .gitignore para não serem monitorados. São geralmente artefatos de construção ou arquivos gerados pela máquina, que não devem ser comprometidos
  • o histórico de commits pode ser visualizado através do log

  • usa-se o comando diff para se obter informações sobre o conteúdo modificado (atualmente) dos arquivos não comprometidos (fora da staging area); diferenças entre os arquivos do diretório de trabalho e a área de seleção ou um commit (identificado por seu id hash)

  • usa-se o comando show para rever o conteúdo de versões anteriores de um arquivo git show [commit]:[file]

    • e o checkout para recuperar tal versão (git checkout [commit] [file])
  • usa-se git remote add [shortname] <servidor> para adicionar repositórios remotos ao repositório Git local corrente

  • e git clone <URL> [path/to/copy] para copiar um repositório existente

  • as alterações do repositório local são enviadas para o repositório remoto através do comando push [-u [shortname] [branch]]. E recuperadas do remoto para o local através do pull [shortname] [branch] (ou fetch)

CSS3 - Cascading Style Sheet

  • especifica a apresentação ou estilo dos elementos dispostos em um documento/página

  • principal benefício: seperação do conteúdo (provido pelo HTML) do estilo do documento HTML

  • pode ser aplicado a um documento através de três métodos distintos: inline, embarcado e externo. Além de mais duas fontes de estilo: do browser e de usuários

    • estilos inline declaram o formato de um elemento usando seu atributo style. Possui a maior prioridade. Ex: <p style="font-size:14px; color:blue">Teste</p>. Não são capazes de separar o conteúdo da apresentação, por isso deve ser evitado.
    • estilos embarcados são estilos definidos no cabeçalho do documento (na tag head) através da tag style. Onde o uso de seletores CSS especificam os elementos alvos da estilização pelas regras CSS.
    • estilos externos são definidos em arquivos CSS que possuem apenas diretrizes dessa linguagem. São úteis para criar um look-and-feel uniforme para todo um Web site (diferentes páginas podem importar o mesmo estilo sem repetição de código). Além de tornar a navegação mais rápida devido ao chaceamento da página realizada pelo browser. É utilizado através da tag link (no bloco <head>) com atributo rel igual a "stylesheet" e type igual a "text/css", além da referência para o arquivo externo, como valor do atributo href.
  • seletores de elementos são usados para especificar o estilo de um único tipo de elemento HTML

  • seletores de ID permitem a seleção de um único elemento de uma página HTML. São notados por #<id-do-elemento>

  • seletores de classes possuem a mesma finalidade que o de ID mas identificam vários elementos. São notados por .<nome-classe>

  • para renderizar um elemento de uma página, os browsers buscam por suas propriedades CSS através da seguinte ordem:

    1. estilos inline
    2. estilos embarcados
    3. estilos externos
    4. estilos de usuários
    5. estilos do browser
  • é possível mudar a ordem de cascateamento através do comando !important no final do valor de um atributo do estilo

  • O CSS suporta quatro tipos de unidades absolutas:

    • in: inches (polegadas)
    • cm: centímetros
    • mm: milímetros
    • pt: points (1 ponto possui 1/72 polegadas)
  • O CSS suporta as seguintes unidades relativas:

    • em: relativo ao tamanho da fonte do elemento atual (via font-size)
    • px: quantidade de pixels; relativa a resolução do dispositivo de exibição
    • %: valore de porcentagem do valor de outra propriedade
  • Alguns tipos de condições na seleção de atributo:

exemplo de seletor seleciona...
[attr] elementos com com o atributo attr
[attr="val"] elementos que definem o valor val para o atributo attr
[attr^="val"] elementos com o atributo attr cujo valor inicia com a string val
[attr$="val"] elementos com o atributo attr cujo valor finaliza com a string val
[attr*="val"] elementos que definem o atributo attr cujo valor contém a string val
not(p) elementos que não seja do tipo/tag p
  • A união de seletores é feita separando-os por vírgulas. Ex: div, p, #c

  • A seleção de descendentes é usada para selecionar elementos contidos dentro de outro elemento. É feita separando os seletores por espaços. Ex: p .cl1 (seleciona todos os elementos da classe "cl1" que foram declarados, em algum lugar, dentro da tag p)

    • o primeiro seletor é aplicado, e então os descendentes dos elementos selecionados são avaliados de acordo com o segundo seletor.
    • o segundo seletor irá avaliar todos os elementos dentro do primeiro seletor, e não apenas seus filhos imediatos.
  • A seleção de filhos é usada para selecionar filhos (childrens) imediatos de um dado elemento. É feita separando os seletores por >. Ex: p > .cl1 (seleciona todos os elementos da classe "cl1" que possuem a tag p como pai)

  • Box Model é essencialmente uma caixa que envolve todos os elementos do tipo block

    • possui quatro elementos (de fora pra dentro): margin, border, padding e content
    • a margem é o espaço entre a bordar do elemento e aquilo que o rodeia no documento. Definida com: margin: <top> <right> <bottom> <left>
    • para definir as bordas, pode-se usar o atalho: border: <width> <style> <color>
    • para bordas arredondadas: border-radius: <top-left-radius> <top-right-radius> <bottom-left-radius> <bottom-right-radius>
    • para o acolchoamento (espaço ente o conteúdo do elemento e sua borda): padding: <top> <right> <bottom> <left> {em porcentagem relativa ao comprimento da caixa}
  • Propriedades relacionados ao background:

    • background-color: define a cor do plano de fundo do elemento
    • background-image: define uma imagem do plano de fundo do elemento. Se mais de uma imagem for especificada, cada subsequente é desenhada atrás da outra; pode ser usado com a função url()
    • background-repeat: define o estilo de repetição para a imagem de fundo (repeat-x ou no-repeat, por exemplo)
    • background-size: define o tamanho da imagem no plano de fundo
    • background-position: define a posição da imagem no plano de fundo
  • Lidando como o transbordamento:

    • quando o conteúdo de um elemento não cabe no seu interior, pode-se usar a regra overflow: <x> <y> com valores: auto, hidden, scroll ou visible
  • Através da propriedade display pode-se mudar o tipo de caixa de um elemento:

    • inline: a caixa é mostrada como uma palavra numa linha do texto (ignora o width e height)
    • block: a caixa é mostrada como um parágrafo
    • inline-block: a caixa é mostrada como uma line do texto
    • none: o elemento não fica visível na página (não ocupa espaço)
  • A propriedade position define o método com que um elemento é posicionado na página ~ para se trabalhar com coordenadas através das propriedades top, bottom, left e right. Tem os valores:

  • static: (valor padrão) trata o elemento normalmente
  • relative: posiciona o elemento em relação à sua posição normal
  • absolute: o elemento é posicionado em relação ao seu primeiro ancestral
  • fixed: o elemento é posicionado relativo ao tamanho da janela; mantém o elemento numa posição mesmo que a página se altere
  • Media Queries são expressões CSS usadas para mudar o layout do site de acordo com o tipo do dispositivo usado para acessá-lo. Definidos pela função @media <nome> ou pelo atributo media (na tag link); páginas podem usar diferentes regras de estilo com base nas características do dispositvo

JavaScript

(até slide 133)

  • ECMAScript é uma linguagem interpretada, de alto nível, com tipagem dinâmica e fraca

    • tipagem dinâmica = os tipos são associados a valores e não à variáveis
  • Aceita os paradigmas funcional e orientados a objetos

  • A inserção de códigos JS pode ser feita de duas formas:

    • método embarcado: código JS embutido no HTML dentro da tag script e atributo type igual a "text/javascript"
    • método externo: código JS em um arquivo seperado referenciado no HTML pelo atributo src da tag anterior
  • Os tipos presentes são:

    • number = inteiros e pontos flutuantes; decimais ou hexadecimais; infinity ou NaN
    • string = usada através de aspas duplas ou simples
    • boolean = true ou false
    • object (não é primitivo)
    • null para indicar a ausência de valor
    • undefined
    • Symbol
  • Suporta 4 tipos de operadores lógicos/condicionais:

    • == e === : o primeiro compara apenas o valor -- há uma coerção de tipos em ambos os lados da expressão para um tipo em comum
    • != e !==
  • Os vetores (array) crescem dinamicamente à medida que novos elementos são inseridos em posições arbitrárias; os elementos podem ter tipos distintos

  • Funções são elemetos de primeira classe; também são objetos, e podem ser declaradas de duas formas:

    • function declaration: uso da keyword function seguido do nome da função. Sofrem o efeito do hoisting sem possíveis "erros"
    • function expression: mesmo uso que o anterior mas sem nome e atribuindo-a para uma variável
  • o uso de callback ocorre quando se passa uma função como parâmetro de outra função

  • Suporta 2 tipos de escopos:

    • global: [nos browsers] a variável torna-se um atributo do objeto window; quando são declaradas fora do escopo de uma função ou bloco, ou inicializada sem ser declarada ~ sem uso das keywords var, let ou const
    • local: quando declarada dentro de uma função ou bloco
  • O erro ReferenceError é lançado quando tenta-se acessar uma variável em um escopo que não a conhece

    • Tentar definir (setar) uma variável em um escopo que não a conhece, cria uma "nova" variável global
  • Funções Imediatas (Immediately Invoked Function Expression) são funções executadas imediatamente após a sua definição. Ajudam a controlar a visibilidade de variáveis internas (declaradas com var)

  • Closures são funções definidas dentro de funções que quebram a cadeia de escopo e geram um espaço privado para si. Ajudam a manter o estado de uma função (a pai) após a execução do mesmo; lembram o ambiente em que foram definidas.

  • Funções Fábricas são funções que retornam um novo objeto. Simulam uma criação de objetos a partir de um único "construtor"

  • Funções Construtoras são funções que apenas definem um espaço para a instância de um objeto. Estes são iniciados com a palavra reservada new seguida pelo nome da função construtora

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment