Defina com CSS a aparência da web gráfica do sensor na IoT
No artigo anterior da série sobre como fazer gráficos de estado de sensores conectados à Internet das Coisas IoT explica o caminho usar uma página web desenvolvida em HTML como estrutura gráfica. Os elementos da página web, que foram reduzidos ao mínimo usando objetos <div>
, não definiram diretamente sua aparência, em vez disso, referiram-se ao informações de aparência para uma folha de estilo APF, que é o que será explicado nesta parte da série.
Na solução que proponho para fazer gráficos de sensores conectados à IoT, é utilizado um documento APF que é carregado do documento HTML. Se o código HTML será gerado a partir de uma aplicação no servidor, por exemplo em PHP, seria muito simples incluí-lo como parte do código que define a página web em vez de carregá-la a partir dela, o que poderia ser um pouco otimizado salvando uma chamada. Qualquer que seja a opção escolhida, o método mais conveniente inclui edite o código APF em um documento separado para gerenciá-lo com mais conforto e poder reutilizá-lo. No exemplo desenvolvido no tutorial desta série de artigos, recebeu o nome estilo.css
.
No mesmo sentido, Ao lidar com projetos complexos será aconselhável usar várias folhas de estilo separadas em diferentes documentos, tanto para poder reutilizar funcionalidades específicas sem ter que carregá-las todas a cada vez, como para editar mais facilmente o código distribuindo-o em diferentes documentos de acordo com a estrutura lógica correspondente.
Os estilos APF Eles tentam descrever todos os extremos do comportamento e aparência de uma página web a partir de vários tipos de abordagens, todas simultaneamente válidas, ao mesmo tempo que tentam respeitar ao máximo a compatibilidade com as especificações da versão anterior. Isso significa que existem muitas soluções possíveis que atendem às mesmas necessidades. bem como um elevado número de recursos disponíveis (propriedades APF). Devido à abordagem didática do artigo e para não confundir novos usuários no APF, apenas as propriedades e as estruturas necessárias para o objetivo final, que consiste em representar graficamente dados de sensores conectados à Internet das Coisas. Ao mesmo tempo, há também uma pequena introdução ao APF, folhas de estilo em cascata.
Formatando propriedades CSS
El formato básico Consiste em um nome de propriedade, o sinal de dois pontos, o valor da propriedade e o sinal de ponto e vírgula. nombre:valor;
APF permite que você use diferentes unidades de medida no mesmo documento incluindo aqueles relacionados à estrutura (a medida do que um elemento contém) como porcentagens, relativas ao dispositivo em que estão representados, como o pixel, ou absolutos, como centímetros. As unidades são expressas após o valor de acordo com a seguinte codificação de abreviatura.
Código | Unidade |
% | porcentagem do contêiner |
ch | em relação à largura do número zero |
cm | centavos |
em | em relação ao tipo base do contêiner |
ex | em relação à altura da letra x |
in | pulgadas |
mm | milímetros |
pc | picas (medida tipográfica) |
pt | pontos (tipográficos) |
px | pixels |
rem | em relação ao tipo base do documento |
vh | em relação a 1% da altura dos olhos (tela do celular) |
vmax | em relação a 1% da maior dimensão da visualização (tela do celular) |
vmin | relativo a 1% da menor dimensão da visualização (tela do celular) |
vw | em relação a 1% da largura de visualização (tela do celular) |
Para a aplicação que vamos fazer é importante considerar pelo menos três unidades de estilo. A % para fazer medições relativas ao tamanho da embalagem de um item, o pixel para medições de acordo com a resolução da tela e os milímetros (na verdade, qualquer medida absoluta) para fazer relatórios impressos.
Existem alguns propriedades complexas, ou composto, que depende de vários valores (como cor, tamanho, estilo...), para indicar o valor existem duas possibilidades em CSS: escrever, na ordem apropriada, todos os valores separados por espaços ou usar a soma de propriedades simples equivalentes às complexas. Por exemplo, todas as quatro margens de um objeto podem ser especificadas em uma única propriedade margin
ou pode ser definido com propriedades margin-top
, margin-right
, margin-bottom
y margin-left
. Aliás, essa ordem (sentido horário) é aquela seguida pelas descrições dos valores que “envolvem” um elemento como a margem interna (preenchimento) ou externa, a borda…
Com o que foi explicado até agora podemos agora ver alguns exemplos de propriedades
1
2
3
4
|
margin:10px 20px 0 10px;
width:500px;
height:100%;
color:#FF0099;
|
No exemplo acima A cor é definida por meio de um código de 6 dígitos hexadecimais que representam, aos pares, o valor do componente vermelho, verde e azul. Quando acontece, como no exemplo, que os dois dígitos são iguais, pode ser abreviado como #F09
(que, aliás, corresponde às chamadas “cores seguras para web”). Na proposta final evitarei utilizar estas abreviaturas para unificar os critérios e torná-los mais legíveis. Você também pode abreviar os valores de propriedades complexas, como margin
no exemplo, quando todos os valores ou pares opostos são repetidos. Na mesma linha do salvamento de texto, também é possível omitir a unidade ao especificar uma propriedade quando o valor é zero, pois nesse caso é irrelevante.
Alguns valores, além de poderem ser expressos numericamente, possuem um nome o que torna o código mais legível e permite que você se lembre melhor deles. Por exemplo, em vez do código numérico hexadecimal do destino, #FFFFFF
(o #FFF
), pode ser escrito white
com o mesmo resultado. Desta forma, a cor preta, #000000
(o #000
), pode ser substituído por black
.
também lá os valores são expressos por um código especial, um nome. Por exemplo, para indicar que a margem lateral é definida automaticamente pelo navegador (normalmente corresponderá à função central) é utilizado o valor especial auto
, que não possui correspondência numérica com nenhum valor.
Pára expressar uma maneira especial de usar uma série de valores compostos (complexos) de uma propriedade APF Você pode escolher formatos com sintaxe semelhante à das funções. Por exemplo, para expressar uma cor como os três valores de seus componentes vermelho, verde e azul (o Modelo RGB) seria escrito color: rgb(128, 255, 64);
. Dentro deste estilo de expressão também é possível utilizar unidades; No exemplo acima, os componentes de cor são um valor decimal de 0 a 255, mas pode ser mais fácil expressar isso como uma porcentagem do total de cada componente de cor; nesse caso, também poderia ser escrito como color: rgb(50%, 100%, 25%);
.
Calculando valores em CSS
Nas versões mais recentes APF é possível fazer operações matemáticas simples para calcular valores. Para fazer isso, use calc
e a operação a ser executada é expressa entre parênteses. Você pode indicar unidades, parênteses e operadores simples como soma (+
), subtração (-
), multiplicação (*
) e divisão (/
). A expressão seria do tipo width:calc((90%-20px)/2));
.
Variáveis podem ser usadas em operações matemáticas em APF referindo-se no cálculo de um imóvel ao valor de outro com var
. Para poder utilizar uma variável sem precisar fazer referência a uma propriedade real do estilo, também é permitido citar uma propriedade que não existe. APF recomenda o formato --nombre-variable
(dois hífens antes do nome do bem inventado). Desta forma, para definir a altura de um elemento como metade de sua largura, uma expressão em APF como height:calc(var(width)/2);
e para definir uma nova variável "espessura" (que outras propriedades poderiam usar) você escreveria, por exemplo, --grosor:4px;
para poder mais tarde referir-me a ele como margin-top:calc(var(--grosor)*4);
Propriedades CSS Dependentes do Navegador
APF É uma especificação padronizada pelo consórcio o W3C (Consórcio Mundial da Internet) (Consórcio World Wide Web) mas muitos propriedades ou estilos de comportamento chegam aos navegadores antes de fazerem parte da especificação de uma versão.
para que o código APF funciona com os recursos atuais de um navegador, mas não perca a compatibilidade com novos recursos, um prefixo é usado. Este prefixo depende do motor de renderização que usa o navegador da web que você deseja referenciar (para o qual o estilo está definido).
O prefixo -webkit
Funciona para navegadores baseados em WebKit como Safári o Chrome. O prefixo -moz
É usado para navegadores baseados no motor de renderização de Mozilla, atualmente LagartixaComo Firefox e seus derivados. Referir-se a EdgeHTML, o motor de renderização navegador borda da Microsoft (anteriormente Tridente), o prefixo é usado -ms
. O caso do navegador Opera é um pouco especial desde que ele começou a usar o seu próprio motor de renderização, referido com -o
, mas atualmente trabalha com WebKit, que é expresso como -webkit
.
Para utilizar uma propriedade referente a um navegador, escreva seu nome, prefixando-o e separando-o com um hífen como em -o-border-radius:10px;
, que serviria para definir uma borda arredondada (um canto arredondado) em versões mais antigas do navegador Opera.
comentários
Para esclarecer o código APF Você pode usar comentários, o que o tornará mais legível, embora com a desvantagem de aumentar seu tamanho. A sintaxe dos comentários em APF É como comentários de várias linhas C + + que tenho certeza que você já sabe: começando em /*
e terminando em */
, Como na C + +, pode ocupar várias linhas.
Seletores
A definição de propriedades são atribuídas a objetos em um documento HTML agrupando-os em seletores e colocando-os entre colchetes. Um seletor pode fazer referência a um elemento de linguagem HTML (um rótulo), como div
, uma classe (atribuída com class
en HTML) um identificador (atribuído com id
en HTML) ou todos (o “seletor universal”) representado pelo asterisco (*
). O exemplo a seguir mostra um seletor de cada tipo:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
* /* El asterisco es el selector universal */
{
margin:2px 6px 4px 20px;
}
div /* div es una etiqueta HTML */
{
width:500px;
height:200px;
}
.grafico /* «grafico» es el nombre de una clase que se usará en HTML con class=”grafico” */
{
color:#A0B0C0;
}
#superior /* «superior» es un identificador que se usará en HTML con id=”superior” */
{
width:100%;
color:#CCCCCC;
}
|
Os rótulos de HTML são expressas na definição do estilo com seu nome, as classes são marcadas colocando um ponto final antes do nome (.
) e um sinal de libra (#
) para identificadores.
Parte do grande poder de APF reside no possibilidade de agrupar seletores ao definir suas propriedades. Existem várias maneiras de agrupar seletores. Ao agrupá-los, separando-os por vírgulas, fica expresso que cada um dos seletores citados possui essas propriedades.
1
2
3
4
5
6
7
8
9
10
11
|
.consumo, .humedad, .temperatura
{
color:#FF00AA;
width:100%;
height:100%;
}
.temperatura
{
height:50%;
}
|
O exemplo anterior indica que as classes de consumo, umidade e temperatura compartilham cor, largura e altura. Um novo conceito também é introduzido neste código: propriedades podem ser redefinidas e, nesse caso, prevalecem as descritas mais recentemente. Desta forma, os elementos da classe de temperatura teriam finalmente uma altura de 50% do objeto que os contém.
Caso os seletores agrupados não estejam separados por vírgulas, a condição imposta às propriedades é cumulativa, ou seja, um elemento deve satisfazer todos os seletores para adquirir a aparência ou comportamento que eles definem. Se os seletores se referirem a tags HTML A ordem em que aparecem deve ser decrescente no nível de inclusão: primeiro o nível hierárquico mais alto e por último o mais baixo.
1
2
3
4
5
6
7
8
9
10
11
|
div.temperatura
{
color:#FF00AA;
width:100%;
height:100%;
}
.temperatura .consumo
{
height:50%;
}
|
No exemplo anterior os elementos são definidos div
que também são da classe de temperatura e os elementos que possuem a classe de temperatura e a classe de consumo (ambas ao mesmo tempo) como em class="temperatura consumo"
. Os elementos <div>
De código HTML com class="temperatura"
eles teriam uma alta de 100%
Propriedades CSS para definir o texto
Pode-se fazer uma distinção entre três tipos de propriedades que afetam a aparência do texto: (1) aquelas que estabelecem a fonte com a qual ele é apresentado, (2) aquelas que determinam a aparência do literal (o conteúdo do texto) e (3) os genéricos, ou seja, aqueles que afetam tanto a aparência do texto quanto a dos demais componentes. Em geral, o que foi dito para explicar os do último grupo também se aplicará às mesmas propriedades aplicadas a outros elementos.
Tipografia (fonte)
-
font-family
indica o nome da fonte usada para um elemento. Você pode escrever um único nome ou uma lista, em ordem de preferência e separando os nomes por vírgulas, das fontes que serão utilizadas alternativamente caso a desejada não exista. Na mesma linha, é possível usar fontes genéricas com os nomesmonospace
,serif
,sans-serif
,cursive
,fantasy
. Destas fontes genéricas, a mais importante (para a apresentação dos dados em questão) é a primeira que, como o próprio nome sugere, utilizará a fonte com espaçamento fixo disponível no sistema e predefinida pelo navegador. A segunda,serif
, ele usará o padrão disponível serifa (acabamento ou graça). Sem leilão se o terceiro for indicado,sans-serif
. Imitando escrita desenhada à mão comcursive
(uma forma de chamá-lo que claramente poderia ser melhorada) e a tipografia decorativa do sistema comfantasy
, o último dos cinco.Quanto ao código APF Os espaços têm um significado especial como separador; quando o nome da família fonte é composto por várias palavras separadas por espaços, é escrito entre aspas para evitar confusão.
1font-family: DejaVu, Helvetica, Arial, “a palo seco”, sans-serif;Os navegadores da Web são capazes de usar fontes locais (aquelas instaladas no sistema em que operam), bem como outras que são especificamente carregadas, até mesmo sobrepondo-se às instaladas localmente. Para carregar uma fonte, use
@font-face
indicando seu nome, o local de download de sua definição e, se for o caso, uma descrição de seu formato.12345678910111213141516@font-face{font-family:“SircuitoExpandedLight”;src: url(‘/EOT/Sircuito-Expanded-Light.eot’);}@font-face{font-family:“SircuitoRegularMedium”;src: url(‘tipos/Sircuito-Regular-Medium.eot’);src: url(‘tipos/Sircuito-Regular-Medium.eot?iefix’) format(‘eot’),url(‘tipografia/Sircuito-Regular-Medium.woff’) format(‘woff’),url(‘tipografia/Sircuito-Regular-Medium.ttf’) format(‘truetype’),url(‘tipografia/Sircuito-Regular-Medium.svg#webfont’) format(‘svg’);-webkit-font-smoothing:antialiased;}Na primeira das duas definições do exemplo anterior, a carta do documento é carregada Sircuito-Expanded-Light.eot que está localizado na pasta EOT dentro da pasta principal (raiz) e é atribuído como um nome de família CircuitExpandedLight. A propósito, você gosta dessa fonte? É grátis, você pode baixe gratuitamente a fonte Sircuito que desenhei para a imagem do GranaBot.
Como pode ser visto no exemplo, a propriedade url, que corresponde ao localizador padrão de recursos, permite especificar o local do documento com a fonte baixada. A barra serve para separar o nome das diferentes pastas do caminho da fonte, começando pela que contém o documento a partir do qual a chamada é feita ou pela raiz se o URL Comece com uma barra.
O segundo exemplo utiliza vários documentos alternativos para que a mesma definição funcione para vários navegadores (cada um deles carregará o tipo que é capaz de interpretar)
A última linha da definição inclui a propriedade
font-smoothing
para suavizar a letra (aplique um anti-aliasing). Por não ser uma propriedade padrão, utiliza-se o prefixo-webkit
. -
font-size
serve para indicar o tamanho da letra como emfont-size:12px;
-
font-weight
Define a espessura da fonte. Pode ser expresso como um valor numérico, geralmente um múltiplo de 100 entre 100 e 900, de acordo com os pesos tipográficos habituais, ou mais frequentemente com um nome:normal
para a espessura da base,bold
para o corajoso,bolder
para a versão geralmente chamada de preta,light
pela multa (comumente chamada de leve) elighter
para os mais finos (às vezes chamados de finos).O valor numérico da versão normal da fonte é 400 (sem unidade) e 700 para a versão em negrito.
Por padrão, se nenhum outro valor for indicado, a aparência da fonte é a que corresponde a
normal
ou 400, se não tiver sido alterado no elemento genérico ou no container do qual herda, não é necessário indicarfont-weight
com a coragemnormal
. -
font-stretch
É utilizado para indicar a largura da letra, desde que esteja disponível na família correspondente. Os valores possíveis que o imóvel pode assumir, ordenados do mais estreito para o mais largo, são:ultra-condensed
,extra-condensed
,condensed
,semi-condensed
,normal
,semi-expanded
,expanded
,extra-expanded
yultra-expanded
. Com os mesmos critérios utilizados na propriedade anterior, a largura padrão énormal
e não é necessário indicá-lo expressamente, a menos que tenha sido alterado em uma ordem hierárquica superior à que está sendo definida. -
Com
font-style
Você pode indicar se um texto é desenhado com uma letra inclinada ou oblíqua, que afeta sua aparência, ou com uma letra cursiva, que expressa um significado especial (palavras estrangeiras, por exemplo), ou redonda, ou seja, nenhuma das anteriores ou normais. o valoroblique
cumpre a primeira função, a de aparência e valoritalic
o segundo. O fato de a aparência de ambos ser frequentemente semelhante ou mesmo igual faz com que o uso (o significado) às vezes seja confuso, por isso vale a pena prestar atenção. Tal como acontece com outras propriedades,normal
serve para desativar os valores anteriores. -
text-decoration
serve para sublinhar (com o valorunderline
), overline (com o valoroverline
), riscar (com o valorline-through
) ou flash (com o valorblink
) o texto que esta propriedade afeta. -
Para completar a série do aspecto tipográfico, embora para a nossa aplicação não seja muito relevante,
font-variant
, permite que você aplique versaletes (letras minúsculas) aos textos.
Texto
-
text-align
informa ao navegador como o bloco de texto deve ser alinhado. Os alinhamentos possíveis ficam à esquerda (o que é considerado por padrão) com o códigoleft
, centralize com o valorcenter
, certo usandoright
e justificado em ambas as extremidades comjustify
. -
line-height
define a separação entre linhas de texto. Neste caso, se forem utilizadas percentagens, o valor de 100% corresponde à altura do texto e não à medida do contentor. A medida mais utilizada relativa ao texto corresponde a 120%. Uma linha de 100% significaria que a parte inferior de uma linha toca a parte superior da próxima. Embora o design tipográfico geralmente inclua algum espaço, é comum deixar um pouco mais de margem entre as linhas.Para expressar a separação entre linhas, também é possível indicar um coeficiente (um valor sem unidade) com o qual calcular a altura da linha com base na altura da caixa de texto.
-
letter-spacing
é o valor do espaço entre as letras das palavras, que na tipografia é conhecido como kerning o Rastreamento. -
word-spacing
representa a medida dos espaços entre as palavras. -
white-space
define o comportamento dos espaços em branco em um texto. Quando o valor é usadonormal
, que é usado por padrão, une vários espaços em branco no código HTML em uma das apresentações da página web (exibida pelo navegador) e toma os espaços em branco como referência para quebrar uma linha caso não haja espaço no bloco.O valor que
nowrap
Ele também une espaços em branco repetidos em um, mas não divide as linhas de texto nos espaços em branco, mesmo que a linha não caiba no contêiner, transbordando o espaço se necessário e escrevendo fora se necessário. Para dividir expressamente as linhas você pode usar o rótulo<br>
de HTML.Usando
pre
Nem os espaços em branco são unificados juntando-os em um só, nem as linhas são divididas usando os espaços como referência.pre-line
junte os espaços em branco repetidos e quebre as linhas, se necessário, usando os espaços em branco como referência.pre-wrap
preserva espaços em branco repetidos e quebra linhas, se necessário, usando espaços em branco como referência.
Cor
En APF a cor pode ser expressa de acordo com Modelo de cores RGB ou de acordo com Modelo de cores HSL e em ambos os casos podem ser incluídas informações de transparência, o valor de um quarto canal que normalmente é chamado canal alfa o composição alfa, que dá origem aos modelos RGBA e HSLA.
Para expressar cores em formato RGB usando notação hexadecimal a sintaxe é usada #RRGGBB
, sendo RR o valor da componente vermelha (em princípio, utilizando dois dígitos hexadecimais), GG o valor da componente verde e BB o valor da componente azul. Como já foi dito, se os dois dígitos de cada componente tiverem o mesmo valor pode ser expresso como #RGB
limitar o número de cores disponíveis para as chamadas cores seguras para a web
Além desta forma de representar a cor, a mais clássica e utilizada, pode ser expressa como rgb(R,G,B)
, hsl(HSL)
, rgba(R,G,B,A)
y hsla(HSLA)
para indicá-lo no formato RGB, HSL e seus respectivos formulários com indicação de transparência (canal alfa)
A menos que solicitado de outra forma adicionando o sufixo da unidade, o Modelo RGB usa valores decimais de 0 a 255, para os três componentes, o valor do componente alfa é um coeficiente (decimal de zero a um) e o primeiro valor do Modelo de cores HSL, o matiz, é um valor decimal que varia de 0 a 360 (sem unidades) que representa um ângulo. Os valores de saturação e luminosidade do Modelo HSL Geralmente são expressos em porcentagens.
Como já foi dito, embora seu uso não seja muito frequente, as cores podem ser indicadas pelo seu nome no formato color:black;
em vez de color:#000000;
. O primeiro formato é mais legível, mas está limitado a uma breve tabela de valores que também é mais difícil de modificar numericamente a partir de uma aplicação escrita em JavaScript.
Para nossa proposta de representação gráfica de dados de sensores conectados à IoT, precisaremos apenas de três propriedades relacionadas à cor. Servirão tanto para indicar o nome do texto, que agora se explica, como para indicar o nome de qualquer componente que o suporte.
-
color
indica a cor do elemento HTML e aquilo que contém (que o herda), a menos que seja expressamente alterado pela atribuição de outras cores individualmente. -
background-color
Usado para definir a cor de fundo de um elemento HTML. Além de indicar a cor como valor RGB o HSL você pode usar valor especialtransparent
fazer com que o objeto não tenha cor de fundo e seja possível ver o que está localizado atrás dele, ou seja, não cobre os elementos sobre os quais foi desenhado. -
opacity
permite definir a opacidade (indiretamente, transparência) de um elemento e de todo o seu conteúdo (não confundir com a transparência do fundo). Se a transparência for atribuída a elementos contidos em outros que são transparentes, esta será aumentada, não funcionará separadamente. Você não pode tornar um objeto contido em um objeto transparente mais opaco. O valor deopacity
É expresso como um coeficiente comoopacity:0.5;
para indicar 50% de opacidade.Versões mais antigas do navegador da Microsoft não usavam esta propriedade, mas tinham a propriedade
filter
(filtro) que, entre outros valores, poderia suportar alfa (para o canal alfa) ao qual uma porcentagem de opacidade poderia ser atribuída comopacity
de acordo com o formato:1filter:alpha(opacity=50); /* Opacidad del 50% en una versión 8.0 o anterior de Microsoft Internet Explorer */
medidas
En APF, a medição dos elementos <div>
, que escolhemos para compor o contêiner gráfico, é definido com width
(largura) e height
(alto).
entre o conteúdo de <div>
e no seu perímetro existe uma área de preenchimento que é determinada com o valor de padding
. Ao redor do perímetro do objeto está a aresta cuja medida é especificada com a propriedade border
. Separando o exterior do objeto <div>
dos outros objetos circundantes existe um espaço cuja medida é determinada por margin
.
Em condições normais, a medição do espaço utilizado pelo objeto <div>
pode ser calculado como a soma de sua largura ou altura mais o preenchimento (padding
) mais borda (border
) mais margem (margin
). Quando a medida relevante estabelecida for o espaço interior útil do objeto <div>
, esta composição é muito prática, mas se o que se sabe é a medida total disponível esse comportamento pode ser mudado, definido por padrão, para que a medida total de largura e altura seja a indicada por width
(largura) e height
(altura) subtraindo-lhe a medida do preenchimento, borda e margem, em vez de adicioná-la. Para usar este modo, atribua o propriedade box-sizing
o valor border-box
(o padrão é content-box
)
O diagrama a seguir mostra graficamente os valores resultantes de width
(largura) e height
(alto) se estiver usando box-sizing:border-box;
(o total) oubox-sizing:content-box;
(o interior)
Os valores das medidas são expressos com as unidades já explicadas. Quando se trata de propriedades definidas por vários valores, os valores expressos com diferentes tipos de médias podem ser misturados. Além disso, existem alguns valores especiais que são relevantes para o uso que vamos fazer nesta implementação de gráficos de sensores na IoT. Especificamente, podemos usar o valor auto
na propriedade margin
como um recurso para centralizar objetos em algumas circunstâncias.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
.caja_chica
{
box-sizing:border-box;
width:400px;
height:100px;
padding:5px 10px 15px 20px;
border:2px solid #000000;
margin:10px 10px 10px 10px;
}
.caja_grande
{
width:400px;
height:100px;
padding:5px 10px 15px 20px;
border:2px dashed #FF0000;
margin:10px 10px 10px 10px;
}
|
No exemplo acima, para a classe “small_box” é definida uma borda com 2 pixels de espessura, desenhada com um traço preto (#000000
) contínuo (solid
). Na classe “big_box” a linha usada para a borda é tracejada (dashed
) e a cor vermelha (#FF0000
). Para expressar esses valores separadamente podemos usar border-width
para espessura, border-style
para o acidente vascular cerebral e border-color
para cor. Essas propriedades de aresta são, por sua vez, compostas e formadas pelos recursos superior, direito, inferior e esquerdo, seguindo o sentido horário conforme explicado acima.
As duas classes definidas possuem as mesmas medidas, mas a primeira é menor, pois, ao utilizar o valor border-box
para propriedade box-sizing
, o preenchimento, a borda e a margem são desenhados dentro do objeto em vez de ao redor do conteúdo, como é o padrão. Na classe "big_box" não é indicado, então o valor é assumido por padrão content-box
o que faz com que o preenchimento, a borda e a margem aumentem para o tamanho indicado por width
y height
.
O valor da margem da classe no exemplo acima é de 10 pixels na parte superior, direita, inferior e esquerda, portanto pode ser expresso como um valor único margin:10px;
. É muito interessante conhecer esta alternativa para entender o código desenvolvido por terceiros embora, nesta proposta de implementação, para torná-lo mais legível, sugira-se indicar, repetidos, os valores.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
.laconica /* Clase lacónica */
{
background-color:#00F; /* Equivale a background-color:#0000FF; */
padding:10px 5px; /* Equivale a padding:10px 5px 10px 5px; */
margin:1%; /* Equivale a margin:1% 1%; que equivale a margin:1% 1% 1% 1%; */
border:1px solid #000;
/* Lo anterior puede expresarse de forma menos compacta como:
border-width:1px;
border-style:solid;
border-color:#000;
*/
}
.explicita
{
background-color:#0000FF;
padding:10px 5px 10px 5px;
margin:1% 1% 1% 1%;
border-width:1px 1px 1px 1px;
border-style:solid solid solid solid;
border-color:#000000 #000000 #000000 #000000;
}
.locuaz
{
/* Color de fondo */
background-color:rgb(0,0,255);
/* Relleno, dimensiones */
padding-top:10px;
padding-right:5px;
padding-bottom:10px;
padding-left:5px;
/* Margen, dimensiones */
margin-top:1%;
margin-right:1%;
margin-bottom:1%;
margin-left:1%;
/* Borde, grosor */
border-top-width:1px;
border-right-width:1px;
border-bottom-width:1px;
border-left-width:1px;
/* Borde, estilo */
border-top-style:solid;
border-right-style:solid;
border-bottom-style:solid;
border-left-style:solid;
/* Borde, color */
border-top-color:#000000;
border-right-color:#000000;
border-bottom-color:#000000;
border-left-color:#000000;
}
|
As três classes do exemplo anterior produzem o mesmo resultado, sendo a definição do denominado "lacônico" mais compacta e menos a do denominado "loquaz" que, mais do que para maior clareza de leitura, é a forma normalmente utilizado para modificar algum aspecto parcial e concreto de uma propriedade, reutilizando os demais valores por herança (são fornecidos pelo container ou fornecidos por uma das classes atribuídas ao elemento). Se a carga imposta ao servidor pelo texto extra desta forma de definir as propriedades e outras circunstâncias que, para tornar o código mais legível, como comentários, aumentam o tamanho e consequentemente o tráfego, fossem relevantes, seria possível processá-lo (por exemplo, exemplo) de PHP como parte da estratégia de geração de código a partir desta linguagem.
As dimensões do modelo de caixa afetam principalmente os elementos <div>
mas é possível forçar esse comportamento em outros elementos com a propriedade display
e o valor block
. Para fazer um elemento fluir como texto em uma linha, use display:inline;
e ambos os comportamentos, medições e fluxo, podem ser combinados com display:inline-block;
O valor que none
na propriedade display
, usado como display:none;
, também permite ocultar objetos, o que servirá para "ligá-los" e "desligá-los" de JavaScript.
Se as dimensões de um elemento não forem especificadas, ele assume todas as dimensões necessárias para ajustar seu conteúdo (na verdade, ele ajusta o conteúdo sem a necessidade de estabelecer uma dimensão). Mas se as dimensões forem indicadas, pode acontecer que os objetos contidos não caibam; neste caso, as dimensões não são respeitadas, são aumentadas para permitir que todo o conteúdo fique visível.
Para que os elementos contidos em outra de medidas fixas sejam recortados quando ultrapassarem o tamanho, utiliza-se a propriedade overflow
com a coragem hidden
. com o valor scroll
, objetos que transbordam do container também são recortados, como ocorre com hidden
mas é exibida uma barra de rolagem que pode ser vista ao movê-la. O valor auto
faz com que a barra de rolagem apareça apenas quando necessário com base no tamanho do conteúdo.
Você também pode estabelecer um tamanho mínimo para que os containers ocupem esse espaço mesmo que o conteúdo não necessite e sem limitar suas dimensões para aumentar quando o conteúdo exigir. As propriedades encarregadas desta tarefa são min-width
para o acho e min-height
para o alto. No sentido oposto, max-width
defina uma largura máxima e max-height
uma altura máxima que anula width
já height
.
Fluxo de elementos na página web
Os retângulos (blocos) que definimos com elementos <div>
, eles são colocados um abaixo do outro por padrão. Para alterar esse comportamento você pode usar a propriedade float
indicador left
o right
como um valor, de modo que fluam da esquerda para a direita ou da direita para a esquerda, respectivamente. Pelo contrário, para evitar que um objeto “flutue” para a direita ou esquerda de outro, você pode usar a propriedade clear
com os valores left
, right
o both
, que substituem o fluxo da esquerda para a direita, da direita para a esquerda ou ambos.
Ao contrário do que acontece noutras circunstâncias, o fluxo produzido float
não modifica automaticamente as dimensões do container, por isso é útil incluir em suas propriedades overflow:auto;
para forçar o tamanho (altura) do contêiner a mudar quando um objeto o transborda devido à sua localização com float
.
Outra forma de configurar o fluxo do conteúdo de um elemento é dividi-lo em colunas com a propriedade column-count
(que neste momento deverá ser acompanhado por -webkit-column-count
e de -moz-column-count
) O tamanho das colunas pode ser indicado (na verdade sugerido) com column-width
(-webkit-column-width
-moz-column-width
) e a separação entre colunas com column-gap
(-webkit-column-gap
-moz-column-gap
)
Para que os blocos não sejam divididos e seu conteúdo seja distribuído em várias colunas, você pode usar display:inline-block;
embora isso certamente implique. deixe uma parte da coluna sem uso.
Posicionamento
Para estabelecer a localização dos elementos na página web, o CSS utiliza diversos modos de posicionamento que podem ser diferentes para cada elemento, ou seja, é possível misturar diferentes critérios de posicionamento no mesmo site.
-
position:static;
É o posicionamento padrão (não é necessário indicá-lo se não tiver sido modificado anteriormente).Este tipo de posicionamento segue o fluxo "natural" da página: um elemento após o outro começando da esquerda, crescendo, enquanto há espaço, à direita e de cima para baixo. Não utiliza coordenadas horizontais ou verticais para estabelecer sua localização, segue a posição que corresponde à ordem do objeto. -
position:fixed;
É usado para colocar um objeto em uma posição fixa na janela do navegador (como um menu, por exemplo). A localização do elemento é especificada horizontalmente comleft
oright
para determinar a separação à esquerda ou à direita respectivamente e comtop
obottom
para separação acima ou abaixo da borda da janela do navegador (viewport).Usando este e outros tipos de posicionamento, os objetos podem se sobrepor. Objetos desenhados primeiro (definidos anteriormente no código HTML) podem ser cobertos por aqueles sorteados posteriormente (aqueles incluídos posteriormente no código HTML). Para alterar a ordem normal você pode usar a propriedade
z-index
, os objetos com maior valor emz-index
Eles cobrem aqueles com menos valor. -
position:relative;
Move o elemento da sua posição "normal" conforme indicado pelas propriedadesleft
oright
horizontalmente etop
obottom
verticalmente. -
position:absolute;
Coloca o elemento em uma posição fixa em relação ao objeto que o contém. A sua localização é expressa, como nos casos anteriores, comleft
,right
,top
ybottom
O nome desse tipo de posicionamento é confuso a princípio, pois a posição é estabelecida em relação ao objeto hierarquicamente superior àquele que utiliza a propriedade, o que é discutível se é absoluto.
Também é importante lembrar que o elemento que contém os objetos
<div>
que usamos no primeiro nível hierárquico é<body>
, portanto, se o<div>
O que você usaposition:absolute;
não estiver contido em outro, seu posicionamento será “absoluto” em relação à página web.
Propriedades para mídias e características específicas (consultas de mídia)
APF permite definir na mesma folha de estilos diferentes aparências para vários suportes ou suportes dependendo do tipo de dispositivo utilizado (como uma tela ou uma impressora), suas dimensões, sua orientação (vertical ou paisagem) ou sua resolução. Isto serve para poder visualizar, da forma mais adequada a um contexto, a mesma página web.
Para se referir à mídia, use @media
de maneira semelhante ao que já foi explicado para fontes com @font-face
, colocando entre colchetes ({
y }
) as definições dos diferentes elementos: rótulos HTML, classes, identificadores...
Os tipos de mídia disponíveis em CSS3 são: all
, para se referir a qualquer mídia (todas), screen
para qualquer tipo de tela (versões mais antigas do APF Eles distinguiram entre monitores de TV e de computador) print
para saída de impressora e speech
para leitores de áudio web que interpretam informações com sintetizadores de voz.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
@media screen
{
.texto
{
color:#FFFFFF;
background-color:#000000;
}
}
@media print
{
.texto
{
color:#000000;
background-color:#FFFFFF;
}
}
|
No exemplo acima, os elementos da classe text possuem fundo preto e texto branco na tela, mas são impressos com fundo branco e texto preto.
Podem ser impostas condições à mídia para definir diferentes conjuntos de propriedades com base, por exemplo, na resolução disponível ou na proporção da janela de visualização. Estas condições e os próprios meios podem ser compostos com operações lógicas and
, not
y only
exigir que você cumpra vários, que não cumpra ou apenas quando cumpra, respectivamente.
Entre as condições disponíveis, consideramo-las especialmente interessantes max-width
(largura máxima da janela), max-height
(altura máxima da janela), min-width
(largura mínima da janela), min-height
(altura mínima da janela), orientation
(a orientação, que pode ser landscape
, paisagem ou portrait
, verticais), max-resolution
(resolução máxima em dpi
, pontos por polegada ou em dpcm
, pontos por centímetro) e min-resolution
(resolução mínima, também em dpi
o dpcm
).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
@media all
{
.bloque_principal
{
background-color:#CCCCCC;
}
}
@media screen and (min-width:320px)
{
.bloque_principal
{
width:300px;
margin-left:auto;
margin-rigth:auto;
}
}
@media screen and (min-width:640px)
{
.bloque_principal
{
width:620px;
}
}
@media print
{
.bloque_principal
{
background-color:#FFFFFF;
}
}
|
No exemplo anterior começamos definindo uma cor de fundo para que, em todas as mídias, os elementos da classe main_block tenham a cor de fundo #CCCCCC. Quando exibido em uma tela e a janela tiver pelo menos 320 pixels de largura, as margens esquerda e direita serão automáticas (centralizar o bloco) e a largura do elemento será de 300 pixels. Se a resolução da tela for de 640 pixels, a largura do bloco será de 620 pixels. Como a segunda definição de mídia não inclui informações de margem e os dispositivos que atendem à segunda condição também atenderão à primeira, a margem horizontal ainda será automática.
Finalmente, no exemplo a cor de fundo é alterada para que fique branco na impressão.
A forma usual de definir estilos para diferentes mídias costuma começar pelos mais comuns, geralmente cores e fontes, seguidos pelas geometrias mais restritivas (as medidas dos dispositivos com menor número de pixels) geralmente para smartphones e tablets onde, além Será importante saber se eles são usados verticalmente ou horizontalmente com orientation
e certamente também a sua resolução com min-resolution
. Em seguida, são indicados os diferentes tamanhos para telas maiores, e geralmente termina com mídia de impressão e voz, que no exemplo dos gráficos IoT foram omitidas.
Use @media
A imposição de condições como dimensões, resolução e orientação permite ao designer criar uma única página web que, com estilos diferentes, terá o aspecto mais adequado para cada dispositivo. Esse comportamento geralmente é chamado de design responsivo; design adaptável, numa tradução muito livre.
CSS para contêiner gráfico SVG
Com o que foi explicado até agora, agora é possível definir os estilos que o Contêiner HTML de gráficos SVG com o qual representar o estado dos sensores conectados à IoT. No código a seguir está a proposta incluindo, comentada, a distribuição em colunas que corresponde a um número de gráficos maior do que aqueles que a proposta da série de artigos utiliza, para que possa ser reaproveitada em outros casos.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
|
@font-face /* Descripción del tipo de letra ancho */
{
font-family:“SircuitoExpandedLight”;/* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Expanded-Light.eot’);
src: url(‘tipos/Sircuito-Expanded-Light.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Expanded-Light.woff’) format(‘woff’),
url(‘tipos/Sircuito-Expanded-Light.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Expanded-Light.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@font-face /* Descripción del tipo de letra normal */
{
font-family:“SircuitoRegularLight”; /* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Regular-Light.eot’);
src: url(‘tipos/Sircuito-Regular-Light.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Regular-Light.woff’) format(‘woff’),
url(‘tipos/Sircuito-Regular-Light.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Regular-Light.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@font-face /* Descripción del tipo de letra comprimido */
{
font-family:“SircuitoCondensedLight”; /* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Condensed-Light.eot’);
src: url(‘tipos/Sircuito-Condensed-Light.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Condensed-Light.woff’) format(‘woff’),
url(‘tipos/Sircuito-Condensed-Light.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Condensed-Light.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@font-face /* Descripción del tipo de letra normal de grosor normal */
{
font-family:“SircuitoRegularMedium”; /* Nombre de la tipografía */
/* Documentos con la tipografía en los formatos disponibles */
src: url(‘tipos/Sircuito-Regular-Medium.eot’);
src: url(‘tipos/Sircuito-Regular-Medium.eot?iefix’) format(‘eot’),
url(‘tipos/Sircuito-Regular-Medium.woff’) format(‘woff’),
url(‘tipos/Sircuito-Regular-Medium.ttf’) format(‘truetype’),
url(‘tipos/Sircuito-Regular-Medium.svg#webfont’) format(‘svg’);
/* Forzar alisado de la tipografía (Normalmente por defecto) */
-webkit-font-smoothing:antialiased;
}
@media all
{
body
{
font-family:“SircuitoCondensedLight”;
margin:0px;
column-count:1;
-webkit-column-count:1; /* Viejos Chrome, Opera y Safari */
-moz-column-count:1; /* Viejos Firefox */
column-gap:8px;
-webkit-column-gap:8px;
-moz-column-gap:8px;
background-color:#FFFFFF;
}
.bloque_sensor, .bloque_titulo, .bloque_descripcion, .bloque_fecha, .bloque_grafico
{
display:inline-block;
box-sizing:border-box;
width:100%;
color:#205587;
}
.bloque_sensor
{
min-width:320px;
height:100%;
background-color:#EDEDED;
}
.bloque_titulo
{
padding:16px 16px 0px 20px;
font-size:25px;
}
.bloque_descripcion
{
padding:2px 16px 0px 20px;
font-size:15px;
}
.bloque_fecha
{
padding:2px 16px 8px 20px;
font-size:17px;
}
.bloque_grafico
{
height:200px;
padding:4px 20px 20px 20px;
}
.grafico
{
background-color:#A8C3EA;
}
}
@media (min-width:360px)
{
body
{
margin:8px 8px 0px 8px;
}
.bloque_sensor
{
margin:0px 0px 8px 0px;
background-color:#E9E9E9;
}
}
@media (min-width:460px)
{
body
{
font-family:“SircuitoRegularLight”;
}
}
@media (min-width:530px)
{
body
{
font-family:“SircuitoExpandedLight”;
}
}
@media (min-width:690px)
{
body
{
font-family:“SircuitoCondensedLight”;
column-count:2;
-webkit-column-count:2; /* Viejos Chrome, Opera y Safari */
-moz-column-count:2; /* Viejos Firefox */
}
}
@media (min-width:870px)
{
body
{
font-family:“SircuitoRegularLight”;
}
}
@media (min-width:1010px)
{
body
{
font-family:“SircuitoExpandedLight”;
}
}
/*
@media (min-width:1020px)
{
body
{
font-family:”SircuitoCondensedLight”;
column-count:3;
-webkit-column-count:3;
-moz-column-count:3;
}
}
@media (min-width:1280px)
{
body
{
font-family:”SircuitoRegularLight”;
}
}
@media (min-width:1570px)
{
body
{
font-family:”SircuitoExpandedLight”;
}
}
*/
@media (min-width:1610px)
{
body
{
font-family:“SircuitoCondensedLight”;
column-count:4;
-webkit-column-count:4; /* Viejos Chrome, Opera y Safari */
-moz-column-count:4; /* Viejos Firefox */
}
}
@media (min-width:1710px)
{
body
{
font-family:“SircuitoRegularLight”;
}
}
@media (min-width:2010px)
{
body
{
font-family:“SircuitoExpandedLight”;
}
}
/*
@media (min-width:2200px)
{
body
{
font-family:”SircuitoRegularLight”;
column-count:5;
-webkit-column-count:5;
-moz-column-count:5;
}
}
@media (min-width:2520px)
{
body
{
font-family:”SircuitoExpandedLight”;
}
}
*/
|
Abaixo você pode ver como seriam esses estilos. Código HTML do contêiner proposto para gráficos SVG do artigo anterior.
O próximo artigo desta série explica como desenhar com SVG Gráficos de dados do status dos sensores conectados à Internet das Coisas (IoT).
Postar Comentário