<?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: Douglas Biazioli</title>
    <description>The latest articles on DEV Community by Douglas Biazioli (@dbiazioli).</description>
    <link>https://dev.to/dbiazioli</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%2F843810%2F41508529-65e8-4b09-8654-fc91b32aab5e.jpg</url>
      <title>DEV Community: Douglas Biazioli</title>
      <link>https://dev.to/dbiazioli</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dbiazioli"/>
    <language>en</language>
    <item>
      <title>Conhecendo o structuredClone</title>
      <dc:creator>Douglas Biazioli</dc:creator>
      <pubDate>Sat, 30 Jul 2022 01:23:37 +0000</pubDate>
      <link>https://dev.to/dbiazioli/conhecendo-o-structuredclone-2k16</link>
      <guid>https://dev.to/dbiazioli/conhecendo-o-structuredclone-2k16</guid>
      <description>&lt;p&gt;Mais um artigo da &lt;em&gt;(quem sabe vire uma)&lt;/em&gt; série: "Conhecendo"! 😄 O tema da vez é um método muuuito útil que foi incorporado nos navegadores, o &lt;strong&gt;structuredClone&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mas antes de falar dele, vamos entender um pouco sobre &lt;em&gt;shallow copy&lt;/em&gt; e &lt;em&gt;deep copy&lt;/em&gt;.&lt;/p&gt;




&lt;p&gt;Pra começar, vamos criar um objeto e colocar alguns valores:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const objetoOriginal = {
    a: 'valor1',
    b: 'valor2',
    c: {
        d: 'valor3',
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quando executamos esse código, o javascript vai armazenar esses valores em memória e vai criar uma referência a esse endereço de memória para que possamos alterar e acessar quando necessário.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frc8y3otwjl1loyv7pqlk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frc8y3otwjl1loyv7pqlk.png" alt="Diagrama básico do armazenamento de objeto"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora, se fizermos uma cópia simples (&lt;em&gt;shallow copy&lt;/em&gt;), estaremos fazendo uma cópia dessa &lt;strong&gt;referência&lt;/strong&gt;, e não do valor que está lá na memória.&lt;/p&gt;

&lt;p&gt;Então quando fazemos isso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const objetoNovo = objetoOriginal;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por baixo dos panos o que vai acontecer é:&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszlwqmm11dcz96qvjdyu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fszlwqmm11dcz96qvjdyu.png" alt="Diagrama báico de um shallow copy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Isso acontece porque o &lt;em&gt;shallow copy&lt;/em&gt; é, bem como o nome diz, apenas uma cópia superficial. Dessa forma, se alteramos algum valor no &lt;strong&gt;objetoNovo&lt;/strong&gt;, essa alteração pode acabar refletindo no &lt;strong&gt;objetoOriginal&lt;/strong&gt; e dependendo da situação pode causar muitos problemas.&lt;/p&gt;

&lt;p&gt;Já no &lt;em&gt;deep copy&lt;/em&gt; a cópia é feita por completo, criando um novo endereço em memória para armazenar o novo objeto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4p7tc3szl9vpgfoyyptu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4p7tc3szl9vpgfoyyptu.png" alt="Diagrama báico de um deep copy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dessa forma podemos alterar a cópia livremente, sem risco de causar algum efeito colateral indesejado.&lt;/p&gt;

&lt;p&gt;Esse tipo de cópia costuma ser um pouco mais custosa, muitas vezes sendo feita manualmente ou utilizando alguma biblioteca externa, como o &lt;a href="https://lodash.com/" rel="noopener noreferrer"&gt;lodash&lt;/a&gt;.&lt;/p&gt;



&lt;p&gt;Voltemos agora à nossa estrela de hoje: o &lt;strong&gt;structuredClone&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;A sintaxe do &lt;em&gt;structuredClone&lt;/em&gt; é super simples. Basta passar qual a variável a ser copiada, e será retornado uma cópia completa do que foi passado. Mesmo se for um objeto complexo, com vários níveis, tudo será espelhado.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const objetoClone = structuredClone(objetoOriginal);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Simples assim! 🤩 Não precisamos nem importar nada.&lt;/p&gt;

&lt;p&gt;Internamente, o &lt;em&gt;structuredClone&lt;/em&gt; implementa um &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm" rel="noopener noreferrer"&gt;algoritmo de cópia&lt;/a&gt; recursiva, que também dá suporte a referências circulares.&lt;/p&gt;

&lt;p&gt;Como parâmetro, podemos passar &lt;em&gt;quaaase&lt;/em&gt; qualquer tipo de variável. Caso o valor que você tente clonar não seja copiável, será disparado um erro do tipo &lt;strong&gt;DataCloneError&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Também temos um segundo parâmetro opcional, que recebe uma lista e nos permite &lt;strong&gt;transferir&lt;/strong&gt; valores. Fazendo com que passem a existir apenas na cópia e não mais no original.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Mas atenção&lt;/strong&gt;: Não é qualquer valor que pode ser movido. Apenas objetos dos tipos chamados de &lt;a href="https://developer.mozilla.org/en-US/docs/Glossary/Transferable_objects" rel="noopener noreferrer"&gt;&lt;em&gt;Transferable&lt;/em&gt;&lt;/a&gt; podem ser passados nesse parâmetro, entram nessa lista os &lt;em&gt;Buffers&lt;/em&gt;, &lt;em&gt;Streams&lt;/em&gt;, etc... Mas isso é assunto pra um outro artigo 😉&lt;/p&gt;

&lt;p&gt;Em aplicações com bastante manipulação de dados, o &lt;em&gt;structuredClone&lt;/em&gt; é extremamente útil! Prático de usar, reduz dependências, além de já ter &lt;a href="https://caniuse.com/mdn-api_structuredclone" rel="noopener noreferrer"&gt;bastante suporte entre os navegadores&lt;/a&gt;, então pode usar sem medo!&lt;/p&gt;

&lt;h2&gt;
  
  
  Quer ver mais a fundo sobre o &lt;em&gt;structuredClone&lt;/em&gt;?
&lt;/h2&gt;

&lt;p&gt;Então dá uma olhada &lt;a href="https://developer.mozilla.org/en-US/docs/Web/API/structuredClone" rel="noopener noreferrer"&gt;nessa página da MDN&lt;/a&gt;, ou veja diretamente a &lt;a href="https://html.spec.whatwg.org/multipage/structured-data.html" rel="noopener noreferrer"&gt;especificação&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;E você, já conhecia o &lt;em&gt;structuredClone&lt;/em&gt;? Faz cópias de alguma forma diferente? Comenta aqui! 😁&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>braziliandevs</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Conhecendo o inputmode</title>
      <dc:creator>Douglas Biazioli</dc:creator>
      <pubDate>Tue, 12 Jul 2022 00:28:13 +0000</pubDate>
      <link>https://dev.to/dbiazioli/conhecendo-o-inputmode-1hle</link>
      <guid>https://dev.to/dbiazioli/conhecendo-o-inputmode-1hle</guid>
      <description>&lt;p&gt;Uma das coisas que mais me incomoda quando estou preenchendo algum formulário é quando o teclado não condiz com a informação que preciso preencher. &lt;/p&gt;

&lt;p&gt;Se o campo só vai aceitar números, é muito chato ter que ficar mudando entre os teclados.&lt;/p&gt;

&lt;p&gt;Seria tão legal se houvesse uma forma de falar pro dispositivo como o teclado deveria aparecer, né?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;O legal é que existe!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;inputmode&lt;/code&gt; é um atributo padrão do HTML que já tem &lt;a href="https://caniuse.com/input-inputmode"&gt;suporte em praticamente todos&lt;/a&gt; os navegadores. Sua função é basicamente dizer pro dispositivo qual tipo de teclado deve ser exibido.&lt;/p&gt;




&lt;p&gt;Pode ser usado com um dos seguintes valores:&lt;/p&gt;

&lt;h3&gt;
  
  
  none
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qug5_gif--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/21zkzh87jnsqvjkcpkgy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qug5_gif--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/21zkzh87jnsqvjkcpkgy.png" alt="Tag input utilizando o inputmode com valor: none" width="590" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;none&lt;/code&gt; é a forma que temos para desativar o teclado. Geralmente é utilizado quando a entrada de dados vem de algum dispositivo externo (como um leitor de código de barras), ou quando um teclado customizado é criado.   &lt;/p&gt;




&lt;h3&gt;
  
  
  text
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FeMVUy7N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/543si50yzqghskmih32t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FeMVUy7N--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/543si50yzqghskmih32t.png" alt="Tag input utilizando o inputmode com valor: text" width="590" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;text&lt;/code&gt; é o valor padrão. Com ele, será carregado o teclado padrão do dispositivo, sem muitas surpresas aqui.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NPCbtSEr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aot3ymdb1zy9aohevata.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NPCbtSEr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/aot3ymdb1zy9aohevata.jpeg" alt="Teclado de texto do iOS" width="828" height="459"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  numeric
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aXzBpCM1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ov5axxaee1yyvvvy6a6k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aXzBpCM1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ov5axxaee1yyvvvy6a6k.png" alt="Tag input utilizando o inputmode com valor: numeric" width="648" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com o &lt;code&gt;numeric&lt;/code&gt; teremos o teclado numérico básico, com apenas dígitos de 0 a 9. Também sem nada demais aqui.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_QlU1xsr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ephhbyxf1qe8md66wiut.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_QlU1xsr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ephhbyxf1qe8md66wiut.jpeg" alt="Teclado numérico do iOS." width="828" height="459"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  decimal
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--A6grBfGP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0e3loz8m79to38mlvl7i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A6grBfGP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0e3loz8m79to38mlvl7i.png" alt="Tag input utilizando o inputmode com valor: decimal" width="648" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;decimal&lt;/code&gt; é bem parecido com o &lt;code&gt;numeric&lt;/code&gt;. A diferença aqui é a presença do separador de decimais, que geralmente será &lt;em&gt;ponto&lt;/em&gt; ou &lt;em&gt;vírgula&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rmQLPtcb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hzxeep9rr0iekjrnvtje.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rmQLPtcb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hzxeep9rr0iekjrnvtje.jpeg" alt="Teclado numérico do iOS com vírgula." width="828" height="456"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  tel
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y85lyCYF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7on965aohdp3qzay0k9z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y85lyCYF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7on965aohdp3qzay0k9z.png" alt="Tag input utilizando o inputmode com valor: tel" width="572" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;tel&lt;/code&gt; é mais um da família do &lt;code&gt;numeric&lt;/code&gt;. A diferença nesse é que teremos alguns caracteres adicionais, como &lt;strong&gt;+&lt;/strong&gt;, &lt;strong&gt;*&lt;/strong&gt; e &lt;strong&gt;#&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;Uma dica aqui é substituir o uso desse &lt;em&gt;inputmode&lt;/em&gt; pelo &lt;code&gt;type="tel"&lt;/code&gt;, que será mais fácil de validar o que foi inserido.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dd9kse5E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/842mkte1z7h8yjo9xzqk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dd9kse5E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/842mkte1z7h8yjo9xzqk.jpeg" alt="Teclado numérico do iOS com atalhos de telefone." width="828" height="453"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  search
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--87EjyHFZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wbns4ozhb6kr6hs7jx8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--87EjyHFZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wbns4ozhb6kr6hs7jx8h.png" alt="Tag input utilizando o inputmode com valor: search" width="630" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O &lt;code&gt;search&lt;/code&gt; é beeem parecido com o &lt;code&gt;text&lt;/code&gt; comum, mas ele costuma trazer um atalho para o disparo da busca. Também pode ser substituído pelo &lt;code&gt;type&lt;/code&gt; com o mesmo valor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7vI0C7xs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpejvwb2rnvxvnq5ojom.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7vI0C7xs--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lpejvwb2rnvxvnq5ojom.jpeg" alt="Teclado de texto do iOS com atalho para disparo da busca." width="828" height="455"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  email
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--taWNcOu6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqce4itqw9fbz6xd7aun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--taWNcOu6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qqce4itqw9fbz6xd7aun.png" alt="Tag input utilizando o inputmode com valor: email" width="610" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Seguindo a linha do anterior, o &lt;code&gt;email&lt;/code&gt; também é um teclado de texto com alguns atalhos. Nesse caso temos o &lt;strong&gt;@&lt;/strong&gt; e ponto.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YEDkYVbe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cu2o0e53xs090q32g7m.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YEDkYVbe--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cu2o0e53xs090q32g7m.jpeg" alt="Teclado de texto do iOS com caracteres úteis para e-mail, como @ e ponto." width="828" height="465"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  url
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uzcCnW3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2a8tt5qy61iw8npe5c7k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uzcCnW3t--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2a8tt5qy61iw8npe5c7k.png" alt="Tag input utilizando o inputmode com valor: url" width="572" height="120"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fechando a nossa lista, temos o &lt;code&gt;url&lt;/code&gt;. Nesse teclado, a tecla de espaço geralmente é trocada por outras mais úteis para digitarmos links, como: ponto, barra e &lt;em&gt;.com&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9Ul6fO5B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ic1m8i9lekmtf21w80he.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9Ul6fO5B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ic1m8i9lekmtf21w80he.jpeg" alt="Teclado de texto do iOS com teclas úteis para urls, como ponto, barra e “.com”." width="828" height="461"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Os &lt;code&gt;inputmodes&lt;/code&gt; melhoram bastante a experiência do usuário, e acabam até reduzindo a possibilidade de erros ao preencher algum formulário. Mas lembre-se: &lt;strong&gt;o inputmode não faz validação de dados&lt;/strong&gt;. Alie o &lt;code&gt;inputmode&lt;/code&gt; a um &lt;em&gt;type&lt;/em&gt; adequado e a alguma outra forma de validação no código, e seus formulários ficarão cada vez melhores! 😃&lt;/p&gt;







&lt;h2&gt;
  
  
  Veja na prática!
&lt;/h2&gt;

&lt;p&gt;Quer ver cada um dos possíveis &lt;code&gt;inputmode&lt;/code&gt; funcionando? &lt;br&gt;
Abra o &lt;a href="//inputmodes.com"&gt;inputmodes.com&lt;/a&gt; no seu celular, e vá tocando em cada um dos inputs disponíveis 😉&lt;/p&gt;




&lt;h2&gt;
  
  
  Quer ver mais a fundo sobre o inputmode?
&lt;/h2&gt;

&lt;p&gt;Então dá uma olhada &lt;a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes/inputmode"&gt;nessa página da MDN&lt;/a&gt;, ou veja diretamente a &lt;a href="https://html.spec.whatwg.org/multipage/interaction.html#attr-inputmode"&gt;especificação&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>html</category>
      <category>ux</category>
      <category>frontend</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
