Executando verificação de segurança...
2

A "magia" do Flexbox para alinhar elementos HTML; Exemplo sem e com Flexbox

Meu cunhado começou a estudar HTML e CSS. Um dia destes, durante sua rotina de estudos, ele esbarrou no Flexbox e me perguntou o que era.

Expliquei o que eu sabia: é um conjunto de propriedades que facilita a criação de páginas HTML flexíveis e responsivas.

Como achei a explicação vaga, resolvi mostrar um exemplo prático. A ideia proposta era criar um cabeçalho de um site com três elementos: um espaço à esquerda para o botão de menu; a logo do site ao centro; e à direita um botão para fazer login.

Comecei mostrando como faríamos isso sem Flexbox e posteriormente alterei o código para utilizar Flexbox. O objetivo era mostrar a diferença das duas abordagens. Por isso, não me preocupei em utilizar os elementos <img> e <button>. Apenas criei os "espaços" utilizando <div> para transmitir a ideia.

Sem Flexbox

Código

<html>

	<head>

		<style>

			header {
				width: 100%;
				height: 50px;
				background: #323232;
				color: #fff;
			}

			.menu {
				width: 20%;
				float: left;
			}

			.logo {
				width: 60%;
				float: left;
				text-align: center;
			}

			.login {
				width: 20%;
				float: right;
				text-align: right;
			}


		</style>

	</head>

	<body>

		<header>
			<div class="menu">
				Menu
			</div>
			<div class="logo">
				globo.com
			</div>
			<div class="login">
				Entrar
			</div>
		</header>


	</body>

</html>

Resultado

Resultado sem Flexbox

Repare que para criar a página proposta sem Flexbox, foi necessário estilizar cada um dos elementos dentro da tag <header>. Precisamos definir os tamanhos, se seriam alinhados à direita ou à esquerda e ainda precisamos definir o elemento da logo como text-align: center.

Com Flexbox

Código

<html>
	
	<head>

		<style>

			header {
				width: 100%;
				height: 50px;
				display: flex;
				justify-content: space-between;
				align-items: center;
				background: #323232;
				color: #fff;
			}


		</style>

	</head>

	<body>

		<header>
			<div>
				Menu
			</div>
			<div>
				globo.com
			</div>
			<div>
				Entrar
			</div>
		</header>


	</body>

</html>

Resultado

Resultado com Flexbox

Com Flexbox foi possível produzir o mesmo resultado (na verdade, melhor) escrevendo menos código.

Ao adicionar a propriedade display: flex ao elemento <header>, todos os elementos filhos passaram a ser flex items. Com isso, a largura padrão da <div> será o tamanho do seu conteúdo.

Com a propriedade justify-content: space-between conseguimos fazer com que o elemento do "Menu" fosse alinhado à esquerda, a logo ao centro e o "Entrar" à direita. Uma vez que esta propriedade distribui os elementos com espaçamento igualitário entre eles, colocando o primeiro elemento no ínicio e o último ao final.

Simples assim, não precisamos definir o tamanho dos elementos e nem nos preocupar em utilizar float ou text-align para alinhar os elementos e o texto deles.

A propriedade align-items: center foi utilizada como um "bônus" para alinhar verticalmente os elementos "filhos" ao centro, respeitando a altura de <header>.

Você pode ler mais sobre Flexbox no site da Mozilla. Também gosto deste guia da Origamid.

Carregando publicação patrocinada...
1