Solucionado (ver solução)
Solucionado
(ver solução)
11
respostas

Layout responsivo

Bom dia, Estou com um problema que já venho tentando solucionar a um bom tempo, e não consigo, que é deixar o layout do site pegando a pagina toda, ele fica desse jeito. https://ibb.co/cHEeS7 (print de como está)

Repare que ele ocupa apenas 70% da tela, o código está assim.

//login.js
class Login extends Component {
render() {
        return (
            <div className="container" id="container-login">
                <div>
                <h2 className="mb-5">Form subscription</h2>
                    <form>
                        <p className="h5 text-center mb-4">Subscribe</p>
                        <Input label="Your name" icon="user" group type="email" validate error="wrong" success="right"/>
                        <Input label="Your email" icon="envelope" group type="email" validate error="wrong" success="right"/>
                        <div className="text-center">
                            <Button color="deep-orange" color="indigo">Send</Button>
                        </div>
                    </form>
                </div>
 </div>

O CSS

//App.css

html{
 border:black;
  border-style: solid;
  border-width: 2px;

}
body{
  border:rgb(92, 252, 0);
  border-style: solid;
  border-width: 2px;
}
#root{  
  border: gold;
  border-style: solid;
  border-width: 2px;
  background-image: url("./img/download.jpg");
}
#div-app{
  border: royalblue;
  border-style: solid;
  border-width: 2px;
}

#div-main{
  border: red;
  border-style: solid;
  border-width: 2px;

}

#container-login{
border:rgb(147, 9, 160);
    border-style: solid;
    border-width: 2px;

}

Coloquei borda em cada div para tentar explicar melhor o meu problema,

Unica maneira que consegui fazer funcionar foi setando um ( height: 100%; ) em todos desdo HTML até #container-login, isso fez com que pegasse 100% da tela,.

Segue imagem https://ibb.co/kOMLZn

Pensei que o problema taria resolvido, porem quando coloco a resolução simulando um celular junto com mais formulários e botões a tela estoura para baixo e as div não vem junto.

segue imagem https://ibb.co/fa7mqS

Nesse exemplo aqui https://ibb.co/jEvgqS consigo deixar mais claro oque acontece.

Se alguém puder me ajudar agradeço

11 respostas

Denis, faz um teste pra mim? Verifica se usar 100vw no height em vez do 100% funciona, por favor?

Bom dia, Fiz como solicitado Wanderson e não funcionou, ficou praticamente igual com 100%

Obs: Eu coloquei o height: 100vw; em todos desdo HTML,

Caso não era pra ser em todos me avisa

Alguma outra ideia do que pode ser ?

Denis, mostra pra gente o restante do estilo da página. Pode ter alguma coisa afetando o comportamento da relação dos elementos com o container do background.

Retirei a cor das bordas porem essa foi a unica mudança.

html{

  height: 100%;
}
body{

  height: 100%;
}
#root{  
  background-image: url("./img/fundo.jpg");
  height: 100%;
}
#div-app{

  height: 100%;
}

#div-main{

  height: 100%;
}

#container-login{

    height: 100%;
}
.row-login{

  height: 100%;
}
#form-login{
  padding: 5%;
  border-radius: 3%;
  height: 100%;
}

.btn-login{
  margin-top: 25%;
}
#logo-header{
width: 15%;
}

Bom dia Wanderson, apaguei esse exercício que estava fazendo e comecei outro do zero.

O comportamento das telas estava funcionando como o esperado sem surpresas, porem aconteceu um problema semelhante, uma row esta passando o tamanho pra fora da sua div pai.

img = https://ibb.co/iqiVcH

em azul é a div pai e dentro dela a row em preto, o codigo esta assim:

    render(){
        var nomeUsuario = sessionStorage.getItem("nome")
        var idUsuario = sessionStorage.getItem("usuario")
        return(
         <div className="border border-primary">{/* DIV pai cor azul*/}
            <Helmet> <title itemProp="name" lang="en">{idUsuario} - {nomeUsuario}</title> </Helmet>
            <Header></Header>
            <div className="row border border-dark"> {/* DIV cor preto*/}
                <div className="col-6 border border-dark">
                    <ListGroupCollapse/>
                </div>
                <div className="col-6 border border-dark">
                  <Chart type="bar" data={this.state.notasMes} />
                </div>         
            </div>                
         </div>
        );

    }

Posso estar fazendo errado mas, teoricamente a row deveria respeitar o tamanho determinado pela sua div pai , ou se não pelo menos ela deveria estender junto a div azul, não passar por cima como se estivesse fora da div.

Wanderson teria algum curso para me indicar, onde eu consiga entender melhor isso, pois estou travando muito nesse assunto que parece ser basico...

Quando um elemento sobrepassa outro nós podemos ter basicamente dois casos:

  1. Uso de propriedades de posicionamento.
  2. Propriedades de dimensão que forçam a sobreposição.

Tudo isso é visto nos cursos de HTML5 e CSS3 I e II. Caso você pretenda estudar questões de responsive diretamente, temo o curso de Design Responsivo também.

Que framework CSS você está utilizando? Nenhum?

Estou usando MDB Bootstrap e Sass,

Mas o estranho é que já refiz usando apenas HTML CSS JS e rodou tudo certo, quando eu uso o React que começa dar essas loucuras.

Sera que pode ser a maneira como o React trabalha ? fazendo com que eu tivesse que ter alguns cuidados diferentes com ele ?

solução!

O React não deve interferir nos estilos CSS. A classe row do bootstrap tem uma manipulação de margens um pouco estranha que até hoje eu não entendi bem por que é assim. Ele usa um -20px ou -15px na lateral esquerda e aumenta o tamanho do elemento em no mesmo valor para centralizar.

Isso deve ser por causa das margens das colunas.

O que eu estou me perguntando aqui é: onde está seu container? Como ele centraliza a área de conteúdo na página , você acaba não tendo esses problemas.

Aliás, o row nunca recebe estilos extras. Ele é apenas para agrupar divs com até 12 colunas.

Da forma que vejo agora, não me parece um problema de CSS. Sim na forma como está usando o bootstrap.

Obrigado pela atenção Wanderson, vou dar uma estudada no Bootstrap e depois refazer o exercício, caso vir a acontecer novamente eu abro uma nova discussão.

Ótimo! Fique a vontade. Estaremos por aqui pro que precisar!