Autor: Rodrigo Portillo

  • Termos Slave e Master são abolidos do Python

    Termos Slave e Master são abolidos do Python

    A partir da versão 3.8 do Python, os termos master e slave serão alterados para worker e helper. A decisão se dá após debates da comunidade sobre a terminologia usada,  que já duram quase duas décadas.

    “Por razões de diversidade, seria legal tentar evitar a terminologia ‘mestre’ e ‘escravo’, que pode ser associada a escravidão”, escreveu Victor Stinner, um dos desenvolvedores no Red Hat, em seu pedido mais recente para troca da terminologia.

    O pedido gerou diversas discussões e dentre sugestões, críticas e respostas, um usuário identificado como Steve D’Aprano, comentou “Na verdade, nas subculturas BDSM, ‘mestre/escravo’ pode ter conotações *positivas*. Você quer dar suporte a diversidade, então por que quer discriminar essa subcultura?”.

    Sugestões foram feitas, como webmaster/postmaster, master/apprentice, parent/children, etc. Mas no final ficou decidido que passaria a se chamar “workers” e “helpers” (algo como operário e ajudante) e o “master process” passará a se chamar “parent process” (processo pai/mãe).

    Apesar da terminologia jé ser muito usado na área de hardware, outras comunidades na área de software já fizeram modificações similares. Em 2014, Drupal e Django trocaram as terminologias para primary/replica e leader/follower, respectivamente.

    Com informações do Motheboard.vice.com e bugs.python

  • Adobe Anuncia Plataforma Aberta para Experience Design com o Adobe XD CC

    Adobe Anuncia Plataforma Aberta para Experience Design com o Adobe XD CC

    A Adobe anunciou que está abrindo uma plataforma para permitir que usuários, empresas e desenvolvedores criem ferramentas personalizadas para serem usadas com o ecossistema do Adobe XD.

    Já disponível para parceiros, a API do Adobe XD agora é aberta para que os desenvolvedores possa adicionar novas ferramentas, automatizar projetos e conectar a ferramentas e serviços comuns aos designers ou específicas para cada projeto.

    Junto a isso, o Adobe XD também agora apresenta integração com ambientes de colaboração populares como o Microsoft Teams, Slack e Jira Software Cloud.

    “Estamos compromissados como o desenvolvimento de um ecossistema ricos acerca do Adobe XD, para atender as necessidades do designer moderno. (…) Oferecer experiências de usuário atraentes e engajadas é imperativo para marcas, empresas e todos os produtos digitas, e a Adobe está focada em prover aos designers poderosos recursos de colaboração”

    Scott Belsky. Diretor de Produto e Vice-Presidente Executivo do Adobe Creative Cloud.

    A plataforma aberta estará disponível ainda em 2018, mas a Adobe já vem trabalhando para construir plugins com o XD com parceiros como a Microsoft, Trello, UserTesting, Airtable, Dribble, Sillicon Publishg, Slope, inMotionNow, Astute Graphics, Anima e Google Cloud, além de suas próprias ferramentas como o Behance e Adobe Stock.

    Fundo de 10 milhões de dólares para capacitação em inovação criativa

    A Adobe também revelou que seu fundo de incentivo ao design, Adobe Fund for Design, criado em Maio deste ano, distribuiu uma grande quantidade  de investimentos para desenvolvedores de UX em todo mundo. Os investimentos iniciais incluíram indivíduos e empresas, com diversos produtos disponíveis ainda este mês:

    • CloudApp – Video, webcam, captura de tela com anotação e criação de GIF através da nuvem.
    • Protoio, Inc., makers of Overflow – Capacita designers a projetar, apresentar e compartilhar bonitos diagramas de fluxo que contam uma história.
    • Stark – Ajuda seu projeto e a construir produtos que são acessíveis éticos e inclusivos.
    • Florian Schulz, Maker of Ratio – Criar ferramentas para integração de tipografia.
    • Precious Design Studio – Um estúdio que ajuda inovadores a modelarem produtos e serviços que as pessoas amem interagir, bem como ferramentas de design como Data Populator e Open Color Tools.
    • Odin Chart – Tyler Wolf é um designer de visualização de dados construtor do Odin Chart, uma ferramenta simples que cria gráficos para produtos digitais e publiccações.
    • Iconscout by Chamestudio – Ícones de alta qualidade, ilustrações e fotos stock em um único lugar.
    • Impekable – Agência digital especializada em experiência do usuário e desenvolvimento de softwares.
    • UI Faces – Avatares para maquetes (mockups) de design.
    • Prototypr.io – Comunide para designers que querem compartilhar seus trabalhos e ficarem atualizados com as últimas ferramentas e novidades sobre design.
    • Modulz – Gerador de código para construção de interfaces gráficas sem a necessidade de programar.
    • Design+Code – O time por traz dos populares cursos de código e dedsign e do plugin Angle.
    • Yummygum – Criar designs belos e experiencias refrescantes para web e mobile.

     

    A Adobe também anunciou algumas novidades para o Adobe XD, como facilidade nos workflows, para o processo designer-desenvolvedor e opções de extrair assets.

    O Adobe XD está disponível gratuitamente através do plano Start da Adobe ou através dos planos de aplicativo único ou do Adobe CC.

     

    Com informações do Abduzeedo e Adobe News

  • Como redirecionar seu site / página por localização

    Como redirecionar seu site / página por localização

    As vezes você precisa trabalhar com sites ou projetos multi-idiomas. Alguns desses projetos carregam dinamicamente a tradução ou possui páginas específicas em outro idioma. Redirecionar automaticamente para o conteúdo específico da região é um comportamento fundamental para uma boa experiência do usuário.

    Detecção por Geolocalização

    A forma mais simples e rápida de fazer isso, é através de uma API open-source online chamada Nekudo (https://geoip.nekudo.com/). O Nekudo não está mais disponível e virou IPI. Você precisa fazer um cadastro gratuito em https://ipapi.com/product e pegar sua chave e cadastrar o IP. Na dúvida de saber qual o IP do seu server, abra o seu prompt de comando (windows) ou terminal (Unix/Mac/Linux) e digite ping seusite.com.br.

    A forma ideal de fazer isso é a partir da sugestão, ao invés do redirecionamento direto, como é feito no site da Apple e Adobe. Isso porque o usuário pode estar em viagem ou simplesmente preferir usar o conteúdo em outro idioma.

    Vamos para a prática.

    Javascript

    Para facilitar, vamos usar um jQuery básico, que está presente em quase todos os sites e sistemas. Basta um “ajaxizinho” apenas para chamarmos a API do Geoplugin.

    A URL https://api.ipapi.com/, seguido da chave e IP já devolve os dados em formato JSON. Como ele vai pegar o IP atual do usuário, não é necessário passar o IP:

    O retorno então será:

    
    

    Agora basta tratarmos o código para que execute uma ação e depois redirecione. Ficando assim:

    Nesse ponto, apenas verificamos se não está no Brasil e ele vai redirecionar a página em questão.

    Todavia, ele não vai guardar essa preferência. Logo, toda vez que a pessoa entrar no site, ela vai ter que responder a pergunta novamente. Mas para evitar que isso ocorra, podemos usar o localStorage. Garantindo assim que seja memorizada a opção e evitando que a API seja requerida desnecessariamente. O código final ficaria assim:


    Como saber se está funcionando?

    Para testar, basta você usar um serviço de VPN. Você pode fazer isso através de algum site, programa ou simplesmente rodando pelo Opera, que já possui uma VPN própria e é ótimo mantê-lo instalado para testes. Recomendamos que você use o Opera, pois, além de ser um bom navegador, ele é mais seguro para evitar usar sites duvidosos ou serviços de terceiros. O Opera Developer é uma boa opção e possui VPN integrado. Clique na imagem para ser direcionado a página de download oficial.

    Baixar Opera Developer

    Após instalar o Ópera, para habilitar o VPN, basta ir nas configurações, a partir do símbolo do O, no canto superior esquerdo.

    Indo na guia Avançados > Recursos, ele vai retornar a primeira opção como VPN. Simplesmente a habilite.

    Feito isso, a opção de VPN vai ficar visível e você poderá testar o funcionamento em diversos locais.

    Ah, mas eu não quero redirecionar assim, quero que seja pelo servidor

    Muito bem, digamos que você queira que o redirecionamento seja feito direto pelo servidor porque você é mal que nem um pica-pau. Sem problemas.

    Para isso, você pode usar o cURL da sua linguagem de preferência e fazer o redirecionamento através dela. Aqui vai um exemplo mais comum, em PHP:

    Lembrando que isso precisa ser inserido antes mesmo do doctype, pois se não pode retornar o erro de Headers Already Sent.

    Concluindo

    É bem simples testar o IP quanto a localização. Há diversos serviços, alguns pagos e outros gratuitos, que fazem esse tipo de redirecionamento. Também há plugins e extensões que você pode instalar em seu servidor, mas certamente a demonstrada aqui vai servir para a grande maioria dos projetos.

    Curta e compartilhe 😀

  • Como Selecionar o Item de Uma Tabela HTML

    Como Selecionar o Item de Uma Tabela HTML

    Uma dúvida foi postada no grupo de Design e Programação de nossa página, lá no Facebook, hoje. Essa pergunta era referente a como selecionar de uma linha de uma tabela HTML?

    Para tal, basta usar um pouco de Javascript e CSS.

    Montando a Tabela

    Vamos montar, para testar, uma tabela simples, respeitando a semântica HTML básica. Vamos aproveitar para colocar logo um botão, que vai ser por onde podemos visualizar os dados da linha selecionada:

    <table id='minhaTabela'>
         <thead>
              <tr>
                   <th>ID</th>
                   <th>Nome</th>
                   <th>Idade</th>
              <tr>
         </thead>
         <tbody>
              <tr>
                   <td>01</td>
                   <td>Rodrigo</td>
                   <td>33</td>
                   </tr>
              <tr>
                   <td>02</td>
                   <td>Taynara</td>
                   <td>21</td>
              </tr>
              <tr>
                   <td>03</td>
                   <td>Raveny</td>
                   <td>22</td>
              </tr>
              <tr>
                   <td>04</td>
                   <td>Sérgio</td>
                   <td>51</td>
              </tr>
              <tr>
                   <td>05</td>
                   <td>Alice</td>
                   <td>20</td>
              </tr>
         </tbody>
    </table>
    
    <button id="visualizarDados">Visualizar Dados</button>
    

    Agora precisamos incluir um estilo para que a tabela fique mais elegante.

    É importantíssimo prestar atenção ao class “selecionado” que vai ser a referência para o seu javascript saber qual linha está selecionada na tabela.

    #minhaTabela{
      width:80%;
      margin:0 auto;
      border:0;
      box-shadow: 0 5px 30px darkgrey;
      border-spacing: 0;
    }
    
    #minhaTabela thead th{
      font-weight: bold;
      background-color: black;
      color:white;
      
      padding:5px 10px;
    }
    
    #minhaTabela tr td{
      padding:5px 10px;
      text-align: center;
      
      cursor: pointer; /**importante para não mostrar cursor de texto**/
    }
    
    #minhaTabela tr td:last-child{
      text-align: right;
    }
    
    /**Cores**/
    #minhaTabela tr:nth-child(odd){
      background-color: #eee;
    }
    
    /**Cor quando passar por cima**/
    #minhaTabela tr:hover td{
      background-color: #feffb7;
    }
    
    /**Cor quando selecionado**/
    #minhaTabela tr.selecionado td{
      background-color: #aff7ff;
    }
    
    button#visualizarDados{
      background-color: white;
      border: 1px solid black;
      width:50%;
      margin: 10px auto;
      padding:10px 0;
      display: block;
      color: black;
    }
    

    Javascript

    Para sermos mais justos, vamos fazer o exemplo usando Javascript puro. No nosso exemplo, vamos contemplar a opção de selecionar uma única linha ou mais de uma linha, opção determinada apenas por um parâmetro. Ainda vamos ver como manipular os dados.

    Inicialmente, precisamos capturar a tabela e adicionar, à ação de clique, uma função que adicione ou remova a classe de seleção:

    var tabela = document.getElementById("minhaTabela");
    var linhas = tabela.getElementsByTagName("tr");
    
    for(var i = 0; i < linhas.length; i++){
    	var linha = linhas[i];
      linha.addEventListener("click", function(){
      	//Adicionar ao atual
    		selLinha(this, false); //Selecione apenas um
                    //selLinha(this, true); //Selecione quantos quiser
    	});
    }
    

    A função selLinha() vai ser responsável por adicionar ou remover a class “selecionado” do nó. Passamos também um parâmetro que vai determinar se poderá selecionar mais que uma linha ou apenas uma. O primeiro laço, caso múltiplos seja falso, irá apenas desmarcar todos as linhas antes de marcar a linha clicada.

    /**
    Caso passe true, você pode selecionar multiplas linhas.
    Caso passe false, você só pode selecionar uma linha por vez.
    **/
    function selLinha(linha, multiplos){
      if(!multiplos){
      	var linhas = linha.parentElement.getElementsByTagName("tr");
            for(var i = 0; i < linhas.length; i++){
               var linha_ = linhas[i];
               linha_.classList.remove("selecionado");    
            }
      }
      linha.classList.toggle("selecionado");
    }
    

    Agora vamos adicionar uma função ao clique do botão para que a gente possa visualizar os dados selecionados. Para isso, iremos justamente capturar apenas as linhas que tiverem a class “selecionado” e, através de um laço, vamos concatenar os valores dentro dos nós <td> da(s) linha(s) selecionada(s).

    /**
    Exemplo de como capturar os dados
    **/
    var btnVisualizar = document.getElementById("visualizarDados");
    
    btnVisualizar.addEventListener("click", function(){
    	var selecionados = tabela.getElementsByClassName("selecionado");
      //Verificar se eestá selecionado
      if(selecionados.length < 1){
      	alert("Selecione pelo menos uma linha");
        return false;
      }
      
      var dados = "";
      
      for(var i = 0; i < selecionados.length; i++){
      	var selecionado = selecionados[i];
        selecionado = selecionado.getElementsByTagName("td");
        dados += "ID: " + selecionado[0].innerHTML + " - Nome: " + selecionado[1].innerHTML + " - Idade: " + selecionado[2].innerHTML + "\n";
      }
      
      alert(dados);
    });
    

    Vamos Testar?

    ID Nome Idade
    01 Rodrigo 33
    02 Taynara 21
    03 Raveny 22
    04 Sérgio 51
    05 Alice 20

    No entanto, se você preferir ver todo código completo, acesse o JsFiddle incorporado abaixo:


    Gostou do post curtinho? Tem dúvidas? Deixe seu comentário e compartilhe com quem você achar que vai gostar. Aproveite para entrar no nosso grupo de Design e Programação no Facebook ou em nossa página. Acompanhe-nos no Twitter e Instagram.

  • Corel Lança Nova Versão de Sua Suite Focada em Design de Produtos

    Corel Lança Nova Versão de Sua Suite Focada em Design de Produtos

    No último dia 12 de Junho, a Corel lançou a nova versão de sua suite específica para designers de produtos e engenheiros. Chamada de CorelDRAW Techinical Suite 2018, esta versão traz ainda mais integração com plataformas CAD e se foca na criação e finalização de produtos técnicos, como esquemas, manuais de construção e similares.

    A suite inclui o Corel DESIGNER e os já conhecidos pela maioria, Corel DRAW e Corel PHOTO-PAINT, dentre outros aplicativos satélites.

    Tela do Corel Designer
    Tela do Corel DESIGNER 64 bits

    Dentre as novidades da versão 2018 estão o novo modelo de desenho por simetria (modo similar ao perspectiva, do Illustrator, que permite desenhar em planos tridimensionais) e a conversão quase automática de modelos 3D em imagens vetorias 2D para ilustração profissional.

    Modo de desenho por Simetria
    O novo modo de simetria ajuda o usuário a criar ilustrações isométricas.
    Modo de conversão 3D
    É possível converter modelos 3D para 2D para editar os vetores e dar melhores contextos a manuais e esquemas técnicos

    O que está incluso?

    • Corel DESIGNER® 2018 – Ilustração de precisão técnica
    • CorelDRAW® 2018 – Conhecido programa de ilustração e impressão
    • PHOTO-PAINT® 2018 – Editor de imagem matricial
    • PowerTRACE® 2018 – Converso de imagem matricial para vetorial
    • Font Manager™ 2018 – Gerenciador de fontes
    • XVL Studio Corel Edition – Visualização 3D
    • CONNECT™ – Gerenciador de conteúdo
    • CAPTURE™ 2018 – Captura de tela
    • AfterShot™ 3 HDR – Editor de fotos RAW
    • PhotoZoom Pro 4 – Plugin de exportação de fotos digitais para o PHOTO-PAINT

    O novo CorelDRAW Techinical Suite 2018 já está disponível no Brasil por R$2.699,00, permanentemente ou através de assinatura anual por R$1.099,00 e pode ser adquirido direto no site da Corel.

    Com informações do blog da Corel e da página oficial do produto

  • Adobe apresenta solução para criação de objetos em Realidade Aumentada

    Adobe apresenta solução para criação de objetos em Realidade Aumentada

    Na última WWDC, a Adobe apresentou uma solução de RA (Realidade Aumentada) que visa facilitar a produção de conteúdo para esse segmento. Nomeada de Adobe Aero, essa solução consiste em um conjunto de ações, complementos e aplicativos para agilizar o desenvolvimento de objetos 3D para realidade aumentada, tanto para design quanto para criação de aplicativos.

    Em colaboração com a Apple e a Pixar, a Adobe também anunciou o suporte de USDZ (Universal Scene Description -Zipped) para o Adobe Creative Cloud. Designers podem criar e editar seus objetos em ferramentas como o Photoshop CC e Dimension CC, para então exportar nativamente para o USDZ que pode ser consumido pelo ecossistema da Apple.

    O Project Aero consiste em desenvolver soluções para serem usadas com o ARKit da Apple e vinculando ao Xcode para refinamento e o uso no desenvolvimento.

    Exemplos do uso das novas funcionalidades da Adobe poderão ser vistos no Festival do Impossível, que vai acontecer no começo de Junho em São Francisco.

    Caso você seja desenvolvedor ou designer e tenha interesse em experimentar o Projeto Aero, estão abertas inscrições para acesso antecipado através do site da própria Adobe. Vale ressaltar que precisa possuir um iPhone 6S ou mais recente para usar a solução.

    Mais informações surgirão na Adobe MAX, durante o outono americano.

  • Gráfico / Loader Radial com CSS e Javascript Puro

    Gráfico / Loader Radial com CSS e Javascript Puro

    Disclaimer: If you are coming from an english or international chat/group, please roll to jsfiddle at the end of this post and get all comments and explanations in english or access jsfiddle link.

    Bibliotecas de gráficos existem aos montes. A maioria pesada e com poucas (ou complexas) opções de personalização. De modo que, pensei, será que é possível usar a animação do CSS para criar um gráfico leve? Como exercício, talvez eu pudesse desenvolver uma solução de gráfico radial que pudesse funcionar bem. Esse questionamento veio a partir da pergunta de uma pessoa, em um grupo, que queria criar um loading infinito com CSS.

    Criando o CSS

    Para poder criar a animação do load, pensei em diversas formas que já são usadas como solução, como o gradient ou gambiarras com contornos, mas eles não usam realmente o conceito da animação do raio a partir do centro. Para resolver, pensei em apelar para a trigonometria. Dividi então o círculo em 4 triângulos retângulos.


    A partir daí podemos considerar a animação a partir de cada dos vértices da hipotenusa, se abrindo do raio, formando o triângulo retângulo, como no exemplo abaixo:

    <style>
     .triangulo{
        width: 200px;
        height: 200px;
        background-color: #c1f347;
        margin:0 auto;
        animation: triangle 3s infinite  alternate;
    }
    
    @keyframes triangle {
        from   {
            clip-path: polygon(50% 0%, 0% 100%, 0 100%);
        }
        to {
            clip-path: polygon(50% 0%, 0% 100%, 100% 100%);
        }
    }
    <style>

    OK, conseguimos criar os triângulos com o clip-path do CSS. Graças ao ele podemos colocar caminhos de uma imagem a partir de vértices. Mas como colocar isso nos 4 triângulos? Não faria o menor sentido colocar os triângulos um do lado do outro. Como fazer então para utilizar um caminho completo para dar o efeito de transição radial?

    Para isso, basta fazermos um cálculo simples. Quantos vértices seriam necessários para criar um polígono que dê a volta? Bem, basta contarmos o vértices do quadrado (4) mais um ao centro que define os triângulos e mais um para fechar a animação. Ou seja, precisamos de um hexagono.

    <style>
     .hexagono{
         width: 250px;
         height: 250px;
         background-color: #f98b2a;
         margin: 0 auto;
         animation: hexagon 3s infinite  alternate;
    }
    
    @keyframes hexagon {
         from   {
              clip-path: polygon(50% 0%, 90% 20%, 100% 60%, 75% 100%, 25% 100%, 0% 60%, 10% 20%);
              background-color: #2af9f7;
         }
        to {
              clip-path: polygon(50% 0%, 100% 0, 100% 60%, 100% 100%, 0 100%, 0% 60%, 0 0);
         }
    }
    <style>

    Agora basta manipular os vértices do hexagono para se comportar similar ao triângulo retângulo, levando os pontos do vértice, em fila, sempre ao próximo ponto do quadrado.

    <style>
     .quadrado{
        width: 250px;
        height: 250px;
        background-color: #f98b2a;
        margin:0 auto;
        animation: square 3s infinite  alternate;
    }
    
    @keyframes square {
        0%   {
            clip-path: polygon(100% 0, 100% 0%, 100% 0%, 100% 0%, 100% 0%, 50% 50%);
            background-color: #36ff9a;
        }
        25%  {
            clip-path: polygon(100% 0, 100% 100%, 100% 100%, 100% 100%, 100% 100%, 50% 50%);
            background-color: #fccf40;
        }
        50%{
            clip-path: polygon(100% 0, 100% 100%, 0% 100%, 0% 100%, 0 100%, 50% 50%);
            background-color: #f40696;
        }
        75%  {
            clip-path: polygon(100% 0, 100% 100%, 0 100%, 0 0%, 0 0, 50% 50%);
            background-color: #55aadd;
        }
        100% {
            clip-path: polygon(100% 0, 100% 100%, 0 100%, 0 0, 100% 0, 50% 50%);
            background-color: #36ff9a;
        }
    }
    <style>

    Basta colocar agora a animação como linear, para evitar as pausas (o padrão possui um ease) e adicionar um elemento acima com um overflow: false e um border-radius: 50%, de forma a ficar realmente circular:

    Controlando com Javascript

    Podemos fazer um jeitinho para que o Javascript controle a animação. Para isso, podemos usar algumas propriedades que controlam a animação. Em especial, vamos poder pausar e continuar a animação, através do parâmetro animationPlayState.

    O código completo está disponível pelo jsFiddle. O código está todo comentado e pode ser testado diretamente abaixo:

    0%




    Obs. Não use filtro blur ou muitas sombras se quiser compatibilidade com o Safari iOS.

    Provavelmente, esta não é a melhor solução para criação de um gráfico radial. Mas é interessante vermos que podemos desenvolver novas soluções, e mais leves, a partir de tecnologias mais recentes. Se você gostou, compartilhe, se tem alguma dúvida, comente. Aproveite para curtir nossa página do Facebook e entrar no grupo, através do link abaixo.

  • CSS – Como usar transition com display:block?

    CSS – Como usar transition com display:block?

    Todos sabemos que transições são importantes para diminuir a sensação de repentinidade para o usuário e preparar o cérebro para, aos poucos, compreender a nova informação.

    Porém, o  transition do CSS3 não funciona uniformemente com todos os parâmetros. Quem nunca quis que um elemento HTML em tela sumisse aos poucos?

    O mais comum é utilizar o bom e velho display: none;, porém este simplesmente não funciona ao aplicar um transition. Usemos a lógica de que a passagem de um bloco para um nada não é uma transição. No CSS, uma transição inicialmente precisa ser um comando baseado em números.

    Como usar o CSS para fazer a transição de um objeto sumir?

    Para realizar esta ação, vamos usar um pequeno truque. Ao invés de simplesmente não mostrar o objeto, vamos desativar sua propriedade de ser manipulável com o mouse ou toque. Para isso podemos usar a propriedade pointer-events, ficando:

    div{
        opacity: 1;
        transition: opacity .5s linear;
    }
    
    div.hide{
        opacity: 0;
        pointer-events: none;
    }

    Para fazer o objeto desaparecer vamos usar um pouco de JavaScript apenas para adicionar ou remover a classe CSS da div:

    function ocultar(){
        var element = document.getElementById("idDaDiv");
              element.classList.add("hide");
    }
    function mostrar(){
        var element = document.getElementById("idDaDiv");
              element.classList.remove("hide");
    }

    Vamos testar?

    Mas e se você quiser que ele também não ocupe um espaço? Pois pode ficar um buraco perturbador. Nesse caso você pode modificar a altura do elemento para poder aproveitar melhor esse espaço. Todavia, a propriedade height não é animável (talvez por possuir uma propriedade auto). Para esse caso, você precisa usar o max-height para realizar esta animação.

    div {
      overflow:hidden;
      max-height: 200px;
      transition: max-height 1s ease-in-out;
    }
    
    div.hide {
      max-height: 0;
      pointer-events: none;
    }

    Lembre-se que para evitar que o conteúdo seja mostrado independente da div que você vai aplicar a transição, será necessário colocar a propriedade overflow como hidden. Também é importante salientar que a propriedade max-height só é animável caso você use as medidas fixas em pixels. Como ele determina apenas o tamanho máximo, não vai influenciar se você colocar um tamanho maior que o esperado, o que se torna funcional também para responsividade.

    Vamos Testar?

    Se acredita que essa dica de CSS é útil para mais alguém, compartilhe e curta esta página!