Jump to content
marcelobbt

GRID - DIV dentro de outra DIV

Recommended Posts

Estava tentando criar um leiaute com o formato GRID, mas me deparei com um problema. Não consigo colocar DIV dentro de uma DIV do leiaute do GRID.

 

Queria saber como faço isso. Abaixo segue exemplo onde no div "col2" queria colocar duas div, uma do lado da outra:

 

CSS

.gridcontainer {
  display: grid;
  justify-content: center;
  grid-template-columns: 1fr 3fr 3fr 3fr 1fr;  
  grid-gap: 3px;
}
.gridcontainer > div {
  /*text-align: center;*/
  padding: 10px;
  /*font-size: 20px;*/
}
.esquerda {
  grid-row: 1 / 5;
}
.direita {
  grid-row: 1 / 5;
  grid-column: 5 / 5;
}
.principal {
  grid-column: 2 / 5;
  background-color: #ffffff;
  padding-left: 10px;
}

HTML

<div class="gridcontainer">
  <div class="principal">
    <p>texto</p>
  </div>
  <div class="col1">
    <p>texto</p>
  </div>
  <div class="col2">
    <div class="esquerda">
      <img src="...">
      <p>Imagem legenda</p>
    </div>
    <div class="direita">
      <p>Texto</p>
    </div>
  </div>
</div>

 

 

 

Share this post


Link to post
Share on other sites

Parece não fazer sentido pois usei parte do meu código e coloquei um exemplo simplificado apenas para tentar exemplificar o meu problema.

Share this post


Link to post
Share on other sites

@marcelobbt
Você declara um GRID de 5 colunas.
Posiciona o div principal em 2/5 e ele ocupa a segunda terceira e quarta colunas da 1a. linha.
Omite o posicionamento de col 1 e por padrão ele vai ocupar a quinta coluna da 1a. linha.
Omite o posicionamento de col 2 e por padrão ele vai ocupar a primeira coluna da 2a. linha com seus elementos
filhos.
Posiciona esquerda e direita nas linhas 1 / 5 quando só existem duas linhas no seu GRID!
O código do seu GRID não faz sentido!
 

Share this post


Link to post
Share on other sites

Como falei, peguei apenas parte do código.

Tem duas colunas, uma em cada lateral. Apenas não indiquei no html. De qualquer forma o link que você passou já me deu a dica de como fazer. Obrigado e desculpa se compliquei a coisa.

 

O que precisava era tratar a classe "col2" como um grid ("display: grid;") assim como o container, aí vai atender ao que eu quero.

 

 

Share this post


Link to post
Share on other sites

usa float:left (uma div ficará do lado da outra)

O float:left; vai em um dos dois, testa.
.gridcontainer {
  display: grid;
  justify-content: center;
  grid-template-columns: 1fr 3fr 3fr 3fr 1fr;  
  grid-gap: 3px;
//float:lef;
}
.gridcontainer > div {
  /*text-align: center;*/
  padding: 10px;
  /*font-size: 20px;*/
//float:left;
}

 

Share this post


Link to post
Share on other sites

A propriedade CSS float pode causar efeitos indesejados nos grid items.
https://www.w3.org/TR/css-grid-1/#grid-containers

Como regra geral: não use floats em grid layouts.
Em um grid layout bem projetado não há necessidade de floats.

Share this post


Link to post
Share on other sites

Ola @Thalles Rangel @Maujor

 

Bom quero aqui aproveitar este post aqui

 

Quero montar o GRID

se eu fazer ele em 4 em 4 ele fica

Quando ele forma as 2 e fazer outra ficar apenas maior preenchendo os espaço das outras 3 coluna 

Ex: htm5

				<div class="row">
					<div class="col-md-4 col-sm-6">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/home_5.jpg);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3>Produtos 1</h3>
								<h6>Visitas: 33</h6>
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>
					<div class="col-md-4 col-sm-6">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/home_5.jpg);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3>Produtos 2</h3>
								<h6>Visitas: 33</h6>
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>
					<div class="col-md-4 col-sm-6">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/home_5.jpg);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3>Produtos 3</h3>
								<h6>Visitas: 33</h6>
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>
					<div class="col-md-4 col-sm-6">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/home_5.jpg);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3>Produtos 4</h3>
								<h6>Visitas: 33</h6>
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>
					<div class="col-md-8">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/home_5.jpg);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3>Produtos 5</h3>
								<h6>Visitas: 33</h6>
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>
				</div>

No meu php montei assim

GRID funciona mais não do jeito que esta do produto 5

 

				<div class="row">
 	<?php 
    while($dados = mysqli_fetch_assoc($resultado)){ 
	$id = $dados['id'];
	$titulo = $dados['titulo'];
	$imagem = $dados['imagem'];
    $visitas = $dados['visitas'];
	?>                 
                  
					<div class="col-md-4 col-sm-6">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/<?php echo $imagem; ?>);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3><?php echo $titulo; ?></h3> <!-- TITULO -->
								<h6>Visitas: <?php echo $visitas; ?></h6> <!-- VISITAS -->
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>
                    <!-- AQUI NO COL-MD-8 
QUERO QUE ELE APAREÇA QUANDO O GRID NÃO ESTIVER COMPLETO EM SUAS COL-MD4 COL-SM-6 -->
					<div class="col-md-8">
						<a href="#" class="exp-img" style="background-image: url(./assets/img/<?php echo $imagem; ?>);background-size: cover;">
							<span class="filter"></span>
							<div class="img-info">
								<h3><?php echo $titulo; ?></h3> <!-- TITULO -->
								<h6>Visitas: <?php echo $visitas; ?></h6> <!-- VISITAS -->
								<span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
							</div>
						</a>
					</div>                  
                  <?php } ?>
</div> <!-- ROW -->

 

Fazer igual da imagem ai

 

grid.jpg

Espero que tenha entendido ai o que eu quero

Share this post


Link to post
Share on other sites

Antes de sugerir a solução considere o seguinte:
Se você quer uma linha completa com três "slots" e o número total de imóveis a mostrar é indeterminado temos as seguintes situações:

  1. 1 imóvel => em uma linha de 3 slots;
  2. 2 imóveis => em uma linha, um em 1 slot e outro em 2slots;
  3. 3 imóveis => em uma linha, cada imóvel em um slot;
  4. 4 imóveis => em duas linhas, a segunda com o imóvel em 3 slots; 
  5. 5 imóveis => em duas linhas, a segunda linha com 1slot + 2slots (é o caso da figura que você postou)
  6. A partir daqui segue o mesmo padrão

    Informe se é isso.

Share this post


Link to post
Share on other sites

@Jack Oliveira

Fiz alguns testes com seu código e:
Não é uma boa ideia ajustar uma linha que não contenha 3 imóveis conforme você pretende e mostrou na figura, pois a imagem do imóvel será parcialmente mostrada e não há como corrigir isso.
Observe que na sua figura a última imagem (Com piscina) mostra apenas a parte superior da foto. E, quanto maior a tela do usuário tanto menor a faixa superior a ser mostrada.

A melhor solução é deixar que os imóveis ocupem sua área de apresentação sem completar a última linha.
Eis o código para isso:
 

<div class="container">
  <div class="row">
<?php
while ($row = $result->fetch_assoc()) {
?>
    <div class="col-md-4">
      <a href="#" class="exp-img" style="min-height: 200px;display: block;background-image: url(<?php echo $row['imagem']; ?>);background-size: 350px 200px;">
        <span class="filter"></span>
        <div class="img-info">
          <h3><?php echo $row['titulo'] ?></h3> <!-- TITULO -->
          <h6><?php echo 'Visitas: ' . $row['visitas']; ?></h6> <!-- VISITAS -->
          <span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
        </div>
      </a>
    </div>
<?php } ?>
  </div> <!-- /.row -->
</div> <!-- /.container -->



 

 

Share this post


Link to post
Share on other sites
Em 13/04/2019 at 15:21, Maujor disse:

@Jack Oliveira

Fiz alguns testes com seu código e:
Não é uma boa ideia ajustar uma linha que não contenha 3 imóveis conforme você pretende e mostrou na figura, pois a imagem do imóvel será parcialmente mostrada e não há como corrigir isso.
Observe que na sua figura a última imagem (Com piscina) mostra apenas a parte superior da foto. E, quanto maior a tela do usuário tanto menor a faixa superior a ser mostrada.

A melhor solução é deixar que os imóveis ocupem sua área de apresentação sem completar a última linha.
Eis o código para isso:
 


<div class="container">
  <div class="row">
<?php
while ($row = $result->fetch_assoc()) {
?>
    <div class="col-md-4">
      <a href="#" class="exp-img" style="min-height: 200px;display: block;background-image: url(<?php echo $row['imagem']; ?>);background-size: 350px 200px;">
        <span class="filter"></span>
        <div class="img-info">
          <h3><?php echo $row['titulo'] ?></h3> <!-- TITULO -->
          <h6><?php echo 'Visitas: ' . $row['visitas']; ?></h6> <!-- VISITAS -->
          <span class="ffs-bs btn btn-small btn-primary">Ver mais...</span>
        </div>
      </a>
    </div>
<?php } ?>
  </div> <!-- /.row -->
</div> <!-- /.container -->



 

 

Boa tarde @Maujor Entende 

Obrigado pelo conselho e bom sempre aprender e seguir conselhos e ideias 

:)

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By kaioneresm
      Olá boa tarde, alguem sabe um codigo javascript facil que sirva para abrir uma div como se fosse um pou-up no centro da tela e dentro dela conter um X para fechá-la? 
       
      obrigado!!
    • By luiz monteiro
      E aí pessoal!
      Minha questão de hoje é a seguinte, ao usar o display inline-block ou inline-flex ocorre um desalinhamento dos blocos. Tentei usar outro inline, porem sem sucesso.
      Para melhor visualizar o que quero dizer, anexo esta uma print do resultado indesejável.
      Preciso que os blocos fiquem alinhados, porem ao inserir duas divs  (2 e 3) no terceiro bloco ocorre o desalinhamento.
      Vou deixar o código para melhor entender.
       
      //==================HTML
       
      <!DOCTYPE html>
      <html lang="pt-br">
      <head>
          <meta charset="utf-8">
          <title></title>
          <link rel="stylesheet" type="text/css" href="./css/style.css">
      </head>
      <body>

          <div class="container">
              
              <div class="blocos">0</div>
              
              <div class="blocos">1</div>
              
              <div class="blocos">
                  <div class="linhas">2</div>
                  <div class="linhas">3</div>
              </div>
              
              <div class="blocos">4</div>
          </div>
       
      </body>
      </html>
       
       
      //================== CSS
      @charset "utf-8";
      *
      {
          margin: 0px;
          padding: 0px;
          list-style: none;
          resize: none;
          outline: none;
          text-decoration: none;
      }
      html, body
      {
          width: 100%;
          overflow-x: hidden;
          font-family: verdana;
          letter-spacing: 1.5555px;
          font-weight: normal;
      }
      .container
      {
          width: 100%;
          padding-left: 13px;
          background: #000;
      }
      .blocos
      {
          display: inline-block;
          width: 300px;
          height: 250px;
          background: #888;
      }
      .linhas
      {
          background: #f60;
          width: 100%;
          height: 122px;
          margin-bottom: 2px;
      }
       
      Agradeço desde já.
       
       
       

    • By Artur Mendonça
      Olá amigos.
      espero que estejam todos bem.
       
      Estou tentando criar uma galeria de imagens e colocar nestas um botão para votação (Gosto como no Facebook).

      Já consegui criar a galeria e colocar o Like nas imagens, mas acontece que quando  as imagens passam para a linha de baixo o botão Like não acompanha a imagem.
       
      Junto uma imagem para exemplificar como está e como deveria ser.
       
      O CSS está assim
      h1 { text-align: center; color: forestgreen; margin: 30px 0 50px; } .container h2 { text-align: center; color: rgb(8, 8, 8); margin: 30px 0 50px; } .gallery { margin: 10px 50px; padding-right: 0px; padding-left: 0px; } .gallery img { width: 230px; padding: 0px; opacity: 0.5; filter: grayscale(10%); transition: 1s; margin-top: 10px; margin-left: 10px; margin-bottom: 10px; margin-right: 0px; border: 2px solid #ccc; border-radius: 10%; } .ilike { display: grid; border-radius: 10%; box-sizing: border-box; text-align: left; padding: 15px; font-size: 20px; vertical-align: top; position: absolute; z-index: 1000; margin-top: 10px; margin-left: 10px; overflow: hidden; color: white; } O código da página da galeria de fotos está assim:
      <div class="gallery"> <?php $sql = "SELECT * FROM tbl_gallery where aid=$aid"; $num_rows = mysqli_num_rows(mysqli_query($conectar, $sql)); $result = mysqli_query($conectar, $sql); while ($row = mysqli_fetch_array($result)) { $gimage = $row['gimages']; $fotoid = $row['gid']; $likes = $row['likes']; ?> <a href="páginapararegistarovoto" ?> "><i class="far fa-thumbs-up ilike" alt="Vote"> <?php echo $likes; ?> </i></a> <i class="inum" > <?php echo "Foto " . $fotoid; ?> </i> <?php echo "<a href='../fotos/$gimage' data-lightbox='mygallery' data-title='Foto n.º: $fotoid'><img src='../thumbnails/$gimage' class='pic'></a>"; } ?> </div>  
       
       

    • By LucasRochaPL
      Olá a todos, estou construindo um pequeno site para a empresa que eu trabalho atualmente, porém como ainda sou iniciante estou tendo algumas dificuldades, e uma delas é que eu não consigo colocar as divs lado a lado, tentei varias coisas como usar o inline e float, mas fica tudo bem bagunçado, se vocês puderem por favor dar alguma dica ou me dizer oque estou fazendo de errado.
      <style> * {box-sizing: border-box;}   .container {   position: relative;   width: 50%;   max-width: 300px; }   .image {   display: block;   width: 100%;   height: auto; }   .overlay {   position: absolute;    bottom: 0;    background: rgb(0, 0, 0);   background: rgba(0, 0, 0, 0.5); /* Black see-through */   color: #f1f1f1;    width: 100%;   transition: .5s ease;   opacity:0;   color: white;   font-size: 20px;   padding: 20px;   text-align: center; }   .container:hover .overlay {   opacity: 1; } .container::after {   content: "";   clear: both;   display: table; } </style>   <div class="titulo">Produtos</div> <p>A Gap conta com uma grande variedade de      rádios e equipamentos, para atender melhor      a necessidade de nossos clientes, trabalhamos com rádios moveis,      portáteis e equipamentos para videomonitoramento. </p>   <div class="titulo">Portáteis</div> <div class="container">     <img src="products/images/dep450.jpg" alt="rádio motorola DEP450" class="image">     <div class="overlay">Motorola DEP450</div> </div> <div class="container">     <img src="products/images/ep450.jpg" alt="rádio motorola EP450" class="image">     <div class="overlay">Motorola EP450</div> </div> <div class="container">     <img src="products/images/dgp8050.jpg" alt="rádio motorola DGP8050" class="image">     <div class="overlay">Motorola DGP8050</div> </div>   <div class="titulo">Móveis</div>   <div class="container">     <img src="products/images/dem300.jpg" alt="rádio motorola DGM5000" class="image">     <div class="overlay">Motorola DEM300</div> </div>   <div class="titulo">Videomonitoramento</div>   <div class="container">     <img src="products/images/intelbrass3330.jpg" alt="camera " class="image">     <div class="overlay">Câmera Intelbras S3330</div> </div>   
    • By higordiasz
      Boa Tarde,
      Estou tendo problemas em conseguir colocar as div lado a lado alinhadas corretamente .. casso possam me ajudar ficaria grato.
       
      Segue meu código CSS responsável pelas div.
       
      .col-100 { width: 100%; float: left; position: relative; } .principal-text { background-color: #424242; } .ul-softwares { list-style-type: none; display: inline-block; height: 350; width: 90%; float: left; border: 2px solid #656565; border-radius: 15px; background-color: #373737; margin: 0 auto; } .ul-bancodedados { list-style-type: none; display: inline-block; height: 350; width: 90%; border: 2px solid #656565; border-radius: 15px; background-color: #373737; margin: 0 auto; } .ul-mobile { list-style-type: none; display: inline-block; height: 350; width: 90%; border: 2px solid #656565; border-radius: 15px; background-color: #373737; margin: 0 auto; } .ul-redeestruturada { list-style-type: none; display: inline-block; height: 350; width: 90%; float: right; border: 2px solid #656565; border-radius: 15px; background-color: #373737; margin: 0 auto; } .principal-text ul li { margin: auto; text-align: center; } .uls-principal { text-align: center; } .li-img { padding-top: 6px; } .uls-principal div { display: inline-block; width: 180; padding-right: 20px; } Abaixo meu código HTML:
       
      <div class="col-100 principal-text"> <main class="uls-principal"> <div class="div-prog"> <ul class="ul-softwares"> <li class="li-img"><img src="./img/programacao.png"></li> <li> <h1>Softwares</h1> </li> <li> <p>Possuimos diversos Softwares para a sua empresa.</p> </li> <li></li> </ul> </div> <div class="div-bd"> <ul class="ul-bancodedados"> <li class="li-img"><img src="./img/bancodedados.png"></li> <li> <h1>Banco de Dados</h1> </li> <li> <p>Organimazanos todos seus dados e configuramos oque precisa.</p> </li> <li></li> </ul> </div> <div class="div-mobile"> <ul class="ul-mobile"> <li class="li-img"><img src="./img/mobile.png"></li> <li> <h1>Desenvol. Mobile</h1> </li> <li> <p>Fazemos o aplicativo ideal para a sua Empresa.</p> </li> <li></li> </ul> </div> <div class="div-rede"> <ul class="ul-redeestruturada"> <li class="li-img"><img src="./img/rede.png"></li> <li> <h1>Estrutura de Rede</h1> </li> <li> <p>Fazemos toda o mapiamento da rede e implantação.</p> </li> <li></li> </ul> </div> </main> </div> Print das DIV: 
       

       
      Alguem sabe oq posso alterar para alinhar elas corretamente ? 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.