<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Paulo Diniz</title>
    <description>The latest articles on DEV Community by Paulo Diniz (@pldnz).</description>
    <link>https://dev.to/pldnz</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F947881%2F970cebbf-3eb5-4379-9393-0efe421900ca.jpeg</url>
      <title>DEV Community: Paulo Diniz</title>
      <link>https://dev.to/pldnz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pldnz"/>
    <language>en</language>
    <item>
      <title>CSS – O Truque/Hack do Padding Y</title>
      <dc:creator>Paulo Diniz</dc:creator>
      <pubDate>Wed, 04 Jan 2023 14:07:28 +0000</pubDate>
      <link>https://dev.to/pldnz/css-o-truquehack-do-padding-y-4ajm</link>
      <guid>https://dev.to/pldnz/css-o-truquehack-do-padding-y-4ajm</guid>
      <description>&lt;p&gt;Recentemente em meu trabalho tive a demanda de gerar certificados de conclusão de curso, onde os textos e posições dos itens seriam alocados dinamicamente pelo HTML. Este certificado deveria manter o aspecto de uma folha A4 na hora de ser exibido, independente do dispositivo.&lt;/p&gt;

&lt;p&gt;Para isso resolvi utilizar um recurso conhecido aqui pela internet como “&lt;em&gt;padding hack&lt;/em&gt;” ou “&lt;em&gt;padding trick&lt;/em&gt;”. Este truque não é algo totalmente novo, ele é originalmente creditado para meados de 2009, mas como não encontrei artigos em português sobre isso, resolvi escrever este conteúdo.&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  UMA BREVE EXPLICAÇÃO
&lt;/h2&gt;

&lt;p&gt;Quando utilizamos a propriedade &lt;code&gt;padding&lt;/code&gt; de eixo Y, ou seja, &lt;code&gt;top&lt;/code&gt; ou &lt;code&gt;bottom&lt;/code&gt;, o preenchimento gerado pelo navegador é baseado no tamanho do elemento pai. &lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;br&gt;
Se você criar uma &lt;code&gt;div&lt;/code&gt; de 400px, e dentro dela, criar outra &lt;code&gt;div&lt;/code&gt; com &lt;code&gt;padding-top&lt;/code&gt; (ou &lt;code&gt;bottom&lt;/code&gt;) de 100%, este preenchimento será também de 400px. &lt;br&gt;
No exemplo a seguir, defini a cor de &lt;code&gt;background&lt;/code&gt; "tomato", para tornar perceptível o formato aplicado pelo preenchimento:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2cPI5gt0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obr1ns1moue38cewhl3t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2cPI5gt0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/obr1ns1moue38cewhl3t.png" alt="código descrito na IDE" width="880" height="335"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
O resultado no navegador será este:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zsEsj8C6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nvn5wi6boulkek5hzpgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zsEsj8C6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nvn5wi6boulkek5hzpgl.png" alt="Resultado no navegador" width="880" height="374"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
Ou seja, temos um quadrado perfeito!&lt;/p&gt;

&lt;p&gt;Sabendo disso, podemos então utilizar o &lt;code&gt;padding&lt;/code&gt; para criar elementos nas proporções que desejarmos.&lt;/p&gt;

&lt;p&gt;As proporções de tela mais comuns são 4:3 (Telas e TVs antigas) e 16:9 (Widescreen). Para obter a porcentagem a ser utilizada no &lt;code&gt;padding&lt;/code&gt;, basta efetuar a divisão da proporção. Por exemplo, para o aspecto de 16:9, o &lt;code&gt;padding-top&lt;/code&gt; deve ser de 56,25%, porque:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9/16 = 0,5625&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---uvZbYvt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ht417hzor5eryt8cjryn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---uvZbYvt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ht417hzor5eryt8cjryn.png" alt="código descrito na IDE" width="880" height="328"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
No navegador:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9-qal5UW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m7s4uwc9w95pjd9gjmcd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9-qal5UW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m7s4uwc9w95pjd9gjmcd.png" alt="Resultado no navegador" width="880" height="239"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Voltando a minha demanda, a proporção de uma folha A4 é de 3508px por 2480px. Logo o &lt;code&gt;padding-top&lt;/code&gt; deveria ser de 70.695553%, porque:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2480/3508 = 0,70695553&lt;/strong&gt;&lt;br&gt;
&lt;br&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  RESPONSIVIDADE
&lt;/h2&gt;

&lt;p&gt;Para utilizarmos de forma responsiva em diversos tamanhos de tela, devemos definir o &lt;code&gt;width&lt;/code&gt; em unidades do CSS moderno, como porcentagem (%) ou &lt;strong&gt;&lt;em&gt;viewport&lt;/em&gt;&lt;/strong&gt; (vw).&lt;/p&gt;

&lt;p&gt;No exemplo abaixo, defini a &lt;code&gt;div&lt;/code&gt; pai com &lt;code&gt;width&lt;/code&gt; de 80vw, e a &lt;code&gt;div&lt;/code&gt; filha com &lt;code&gt;padding-top&lt;/code&gt; de 56.25%, para manter a proporção &lt;strong&gt;&lt;em&gt;widescreen&lt;/em&gt;&lt;/strong&gt; (16:9).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CoGXVNlq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dce487a3j3134yr3ijlc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CoGXVNlq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dce487a3j3134yr3ijlc.png" alt="código descrito na IDE" width="880" height="328"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Agora, ao diminuir ou aumentar a tela, o resultado será este:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kzyLhNUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hswbcx5twhc2e0bs4ioo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kzyLhNUq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hswbcx5twhc2e0bs4ioo.gif" alt="Resultado no navegador" width="801" height="721"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Como agora temos uma &lt;code&gt;div&lt;/code&gt; com tamanho proporcional para todos os tamanhos de tela, podemos inserir conteúdo dentro dela. Para isso adicionaremos &lt;code&gt;width&lt;/code&gt; de 100% e a propriedade &lt;code&gt;position&lt;/code&gt; com &lt;code&gt;relative&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TlsllVy0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g79vjkr6ibt9fu0rwuav.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TlsllVy0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g79vjkr6ibt9fu0rwuav.png" alt="código descrito na IDE" width="880" height="711"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Dentro dessa &lt;code&gt;div&lt;/code&gt; proporcional, criaremos outra &lt;code&gt;div&lt;/code&gt; com &lt;code&gt;position absolute&lt;/code&gt;, &lt;code&gt;width&lt;/code&gt; e &lt;code&gt;height&lt;/code&gt; de 100%, com alinhamentos &lt;code&gt;left&lt;/code&gt; 0 e &lt;code&gt;top&lt;/code&gt; 0.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DHKWtMTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cvt5tou9be8elf2vf0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DHKWtMTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4cvt5tou9be8elf2vf0j.png" alt="código descrito na IDE" width="880" height="960"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
O resultado será este:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AiTbeRHa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipcmsu5nb21ge80ipuxn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AiTbeRHa--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ipcmsu5nb21ge80ipuxn.png" alt="Resultado no navegador" width="880" height="518"&gt;&lt;/a&gt;&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Resta agora você adicionar o conteúdo conforme desejar. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importante&lt;/strong&gt;: para um resultado proporcional dos elementos internos, usar a mesma unidade de medida da &lt;code&gt;div&lt;/code&gt; pai, por exemplo, utilizar tamanho de fontes também na unidade &lt;em&gt;viewport&lt;/em&gt; (vw).&lt;br&gt;
&lt;br&gt;&lt;br&gt;
Futuramente os browsers terão suporte a uma nova propriedade de CSS chamada &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/aspect-ratio"&gt;&lt;strong&gt;aspect-ratio&lt;/strong&gt;&lt;/a&gt;, que possui a mesma finalidade. Enquanto isso, vamos usando o &lt;strong&gt;&lt;em&gt;"padding trick/hack"&lt;/em&gt;&lt;/strong&gt;, afinal &lt;code&gt;padding&lt;/code&gt; é suportado tanto em navegadores atuais quanto os desatualizados.&lt;/p&gt;

</description>
      <category>css</category>
      <category>webdev</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
