6
respostas

Texto sobre imagem

Olá, pessoal! Estou criando um blog para a minha esposa, porém estou sofrendo, mesmo depois de ter concluído vários cursos na parte de front-end. É o seguinte, eu quero colocar uma imagem que eu tenho e um texto sobre ela . Abaixo disso, eu quero fazer um grid com 4 quadrados referentes aos posts, ou seja, com imagem, texto e link.

  • Porém a imagem que eu linkei fica gigantesca e o texto só fica embaixo dela.
  • mesmo criando divs e section as imagens dos posts ficam em cima do texto e da imagem do banner.

Vou colocar o código abaixo e o link para o meu codepen, mas as imagens estão no meu computador então não vai carregar o erro que eu estou vendo.

HTML

<!DOCTYPE html>
<html lang="pt-br">

  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>Eu Sustentável</title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/style.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css">
    <link href="https://fonts.googleapis.com/css?family=Lato&display=swap" rel="stylesheet">
  </head>
  <body>
      <header class="cabecalho">
                  <h1><img class="logo"src="img/logo.png"></h1>
                  <nav>
                      <ul class="nav__links">
                          <li><a href="#">comece aqui</a></li>
                          <li><a href="#">livros</a></li>
                          <li><a href="#">consultoria</a></li>
                          <li><a href="#">sobre</a></li>
                      </ul>
                  </nav>
                  <a class="cta" href="a">
                      <li><i class="fab fa fa-facebook fa-2x"></i></li>
                      <li><i class="fab fa fa-twitter fa-2x"></i></li>
                      <li><i class="fab fa fa-instagram fa-2x"></i></li>
                      <button>contato</a></button>

        </header>
        <header>
            <div class="banner_principal">
              <section>
                     <img class="fundo_principal" src="img/fundo_principal.jpg">
                    <h2 class="banner_texto">Eu, <br>sustentável?</h2>            
            </section>
            </div>
        </header>
            <div class="homepage__blocos">
              <nav class="homepage__ultimasPostagens">
                <h3>Últimas Postagens</h3>
            <div class="homepage__ultimasPostagens___posts">
            <div class="homepage__ultimasPostagens___post1">
                <a href="*"></a>
                <img src="img/post1.jpg">


              </div>


            </div>
              </nav>

            </div>
    </body>

CSS

* {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
    background-color: fff: 
}

li, a, button {
    font-family: 'Lato', sans-serif;
    font-weight: 600;
    font-size: 14px;
    color: #363636;
    text-decoration: none;
    text-transform: uppercase;
}

.cabecalho {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 0 2%;
    border-bottom: 2px solid darkgrey;

}

.logo {
    cursor: pointer;
    width: 100px;
    height: 100px;
}

.nav__links {
    list-style: none;

}

.nav__links li {
    display: inline-block;
    padding: 0 20px;
}

.nav__links li a {
    transition: all 0.3s ease 0s;
}

.nav__links li a:hover {
    color: green;
}

button {
    padding: 9px 25px;
    background-color: rgba(203, 199, 174, 1);
    border: none;
    border-radius: 50px;
    cursor: pointer;
    transition: all 0.3s ease 0s;


}

button:hover {
    background-color: rgba(203, 199, 174, 0.8);
}

.cta li {
display: inline-block;
    padding: 0 20px;

}

.fundo_principal {
display: block;
width: 100vw;
clip: rect(0px,1200px,500px,0px)
border-bottom: 2px solid darkgrey; 
}

.banner_texto {
    display: grid;
    font-family: 'Lato', sans-serif;
    font-weight: 1000;
    font-size: 100px;
    color: #363636;
    text-transform: uppercase;
    margin: 40px;

}

.homepage__blocos {
    position: relative;
    clear: both;
}

Obrigado :)

6 respostas

Eae meu chefe beleza? Então, pra ver se eu entendi certinho você quer colocar uma imagem de "background" e um texto em cima desta imagem e logo abaixo quer colocar uma grid com 4 colunas uniformes +- desta forma: https://imgur.com/q6XVnII ?

Caso seja +- isso eu te aconselho primeiramente fazer a IMG de background no CSS com o caminho:

.banner_principal section {
     background-image: url("img/fundo_principal.jpg");
     background-position: center;
     background-repeat: no-repeat;
     background-size: cover;
}

Nisso, ela irá ocupar o tamanho completo da div/section que você inseriu, neste caso será a parte do HTML onde está:

 <div class="banner_principal">
              <section>
                     <img class="fundo_principal" src="img/fundo_principal.jpg">
                    <h2 class="banner_texto">Eu, <br>sustentável?</h2>            
            </section>

Para colocar o texto por cima você utiliza o esquema que você fez de DIVs e posiciona a DIV com o esquema de position: absolute!!!

Se sua imagem for "grande" o suficiente para fazer um background você pode usar este esquema aqui:

HTML

<div class="container">
    <img class="banner-principal" src="sua_img.png" alt="banner-    principal">
    <div class="texto-bloco">
        <h2 class="banner_texto"> Eu, 
            <br> sustentável 
        </h2>
    </div>
</div> 

CSS

.container {
    position: relative;
    widht: 100%;
}

.texto-bloco {
      position: absolute;
      bottom: 5vh;
      right: 5vw;
      background-color: red;
      color: black;
      padding-left: 20px;
      padding-right: 20px;
}

Agora para a GRID de 4 colunas você pode usar o display FLEXBOX ou GRID (eu aconselho o FLEXBOX pq é mais intuitivo e mais adaptável em geral), ou pode usar o float: left se preferir (mas é mais específico e não acho tão flexível como o flexbox)

Caso não seja nada disto que queres eu tento responder de forma diferente!

Att, Ferraz :D

Muito obrigado pela ajuda. Resolveu parcialmente o que eu queria, mas já está bem melhor. Agora eu já consigo colocar as outras imagens, relativas ao post, sem bagunçar o projeto inteiro. A única coisa que incomoda agora é que qualquer coisa que eu faça no site (tipo abrir o painel do desenvolvedor, o texto que está na imagem automaticamente vai para cima da página. Acho que isso acontece por causa do

position: absolute;

existe alguma outra forma de conseguir o mesmo efeito sem ser usando ele?

Valeu :)

Vai pra cima da página como? Teria como mandar uma foto? Não to conseguindo visualizar o erro perdão :/

É que pra mim ele ta fluindo junto do container

https://imgur.com/a/AXGFbTL Coloquei um print das telas, uma com o site do jeito que eu quero, outra depois que eu abro o painel de desenvolvedor. O título é deslocado. Se eu aumentar o zoom ou diminuir acaba mexendo na posição do título também.

Então chefe, a primeira coisa que eu faria seria inverter as tags <div> e <section> para deixar a DIV dentro da SECTION, pra poder criar um limitador de tamanho nesta DIV.

Esta DIV "banner_principal" eu usaria como um "container" pra deixar tudo dentro dela pois assim se aumentar o zoom da página aumenta tudo dentro do "container" então ficaria assim a estrutura:

<section>
       <div class="container">
            <img class="banner-principal" src="sua_img.png" alt="banner-    principal">
            <div class="texto-bloco">
                <h2 class="banner_texto"> Eu, 
                    <br> sustentável 
                </h2>
            </div>
    </div> 
</section>

Caso ainda assim não dê certo me fala que tentaremos algo diferente :D

Tentei e ainda não deu! Outra sugestão? :)