Problema: Centrare immagine tr tabella

Stato
Discussione chiusa ad ulteriori risposte.

Luca1996Olov

Utente Bronze
2 Luglio 2015
9
2
0
34
Salve,
Vi scrivo perchè sto impazzendo per un codice probabilmente molto semplice, ma che non riesco a trovare.
http://paginaprovaolo.altervista.org/index2.html
Questa è la pagina che sto creando. Ho implementato un menu mobile. Credo che il float da sinistra mi impedisca di centrare il logo "immagine jpg chiamata gl". Come posso centrare l'immagine alla riga, se il menu è inserito nella riga stessa? Il logo è un'immagine prova. Come potete vedere il logo non è centrato, ma leggermente a destra rispetto al centro della riga.
Source:

Codice:
<table width="100%" align="center" border="1" bordercolor="white">
<tbody>
<tr>
<td bgcolor="red"><div id="contentmenu"> <!-- Inizio menu -->
   
      <div id="out" style="display: none;"> <!-- Menu aperto -->
          <ul>
              <a href=""><li><font color="black">Prova</font></li></a>
              <a href="mailto:[email protected]"><li><font color="black">Contattaci</font></li></a>
              <a href="tel:371"><li><font color="black">Chiamaci</font></li></a>
          </ul>
      </div>

      <div id="menu"> <!-- Menu -->
      <span class="entypo-menu"></span>
      </div>
       
        <script> <!-- Script Open/Close -->
          $( "#menu" ).click(function() {
            $( "#out" ).toggle( "slow" );
          });
        </script>
  
  
      </div><img src="gl.jpg" class="ridim" style="margin:auto; display:block" alt="Logo" title="Logo"></td>
</tr>

Grazie in anticipo.
 
Salve,
Vi scrivo perchè sto impazzendo per un codice probabilmente molto semplice, ma che non riesco a trovare.
http://paginaprovaolo.altervista.org/index2.html
Questa è la pagina che sto creando. Ho implementato un menu mobile. Credo che il float da sinistra mi impedisca di centrare il logo "immagine jpg chiamata gl". Come posso centrare l'immagine alla riga, se il menu è inserito nella riga stessa? Il logo è un'immagine prova. Come potete vedere il logo non è centrato, ma leggermente a destra rispetto al centro della riga.
Source:

Codice:
<table width="100%" align="center" border="1" bordercolor="white">
<tbody>
<tr>
<td bgcolor="red"><div id="contentmenu"> <!-- Inizio menu -->
 
      <div id="out" style="display: none;"> <!-- Menu aperto -->
          <ul>
              <a href=""><li><font color="black">Prova</font></li></a>
              <a href="mailto:[email protected]"><li><font color="black">Contattaci</font></li></a>
              <a href="tel:371"><li><font color="black">Chiamaci</font></li></a>
          </ul>
      </div>

      <div id="menu"> <!-- Menu -->
      <span class="entypo-menu"></span>
      </div>
     
        <script> <!-- Script Open/Close -->
          $( "#menu" ).click(function() {
            $( "#out" ).toggle( "slow" );
          });
        </script>


      </div><img src="gl.jpg" class="ridim" style="margin:auto; display:block" alt="Logo" title="Logo"></td>
</tr>

Grazie in anticipo.
Racchiudi #out e #menu in un altro div contenitore, il quale dovrà avere "position:absolute;" oppure "position:fixed;", dipende da quello che ti serve.

PS: Con fixed il div rimane nella sua posizione rispetto alla finestra, e non al documento. Perciò anche se scrolli la pagina il div rimarrà sempre in alto a sinistra dello schermo, mentre con absolute il div rimarrà accanto al logo

EDIT: Non avevo notato che il contenitore già c'è. Ti basta cambiare la proprietà position a #contentmenu
 
  • Mi piace
Reazioni: Luca1996Olov
Ultima modifica:
Infinite grazie, risolto!

EDIT: Ora torna un problema, però:
Ho attributo al contentmenu il position:absolute, ovvero:
Codice:
#contentmenu {
position: absolute;
}

Il logo è quindi centrato, ed è ok, ma all'apertura del menu, il button menu scrolla insieme al menu aperto, ma con questo il resto del sito non viene scrollato verso destra.
Mi spiego in parole semplici: Apro il menu (situato a sinistra, che scrolla verso destra), ma il resto della pagina resta lì dov'è, senza scrollare verso destra, seguendo il menu. Come posso risolvere? :eek:
 
Infinite grazie, risolto!

EDIT: Ora torna un problema, però:
Ho attributo al contentmenu il position:absolute, ovvero:
Codice:
#contentmenu {
position: absolute;
}

Il logo è quindi centrato, ed è ok, ma all'apertura del menu, il button menu scrolla insieme al menu aperto, ma con questo il resto del sito non viene scrollato verso destra.
Mi spiego in parole semplici: Apro il menu (situato a sinistra, che scrolla verso destra), ma il resto della pagina resta lì dov'è, senza scrollare verso destra, seguendo il menu. Come posso risolvere? :eek:

Le tabelle non si usano da anni.. ormai c'è il CSS e HTML5
 
  • Mi piace
Reazioni: TheSeeker
Non capisco perche usare le tabelle per i layout nel 2015.. hai tutti gli strumenti per non usarle.

Sent from my Ascend G510 using Tapatalk
 
In poche parole tu vuoi che il contenuto principale sia ridotto in larghezza '''schiacciato''' dal menu.

Sent from my Ascend G510 using Tapatalk
 
A prescindere dal JavaScript, quando si apre il menu, per il CSS dovresti dare una larghezza di N% al menu e 100-N% al box principale, e applicare float: left al menu.

Codice:
#menu, #content {
     padding: 0;
     margin: 0;
}

#menu {
    width: 60%;
    float: left;
}

#content {
    width: 40%;
}

Non ho provato ma dovrebbe andare @Rendernos che dici?



Ti consiglio altamente di riscrivere il sito senza usare le tabelle.
 
  • Mi piace
Reazioni: Luca1996Olov
A prescindere dal JavaScript, quando si apre il menu, per il CSS dovresti dare una larghezza di N% al menu e 100-N% al box principale, e applicare float: left al menu.

Codice:
#menu, #content {
     padding: 0;
     margin: 0;
}

#menu {
    width: 60%;
    float: left;
}

#content {
    width: 40%;
}

Non ho provato ma dovrebbe andare @Rendernos che dici?



Ti consiglio altamente di riscrivere il sito senza usare le tabelle.

Io sconsiglio l'utilizzo della proprietà float.

Codice:
#menu, #content {
     display: inline-table;
     padding: 0;
     margin: 0;

      vertical-align: middle
}

#menu {
    width: 60%;
}

#content {
    width: 35%;
}

Resterà un margine di 5% quindi per centrarlo, aggiungi un altro coteniotre, per #menu & #content
assegnali il valore table alla proprietà display ed il valore center alla proprietà text-align
 
  • Mi piace
Reazioni: Luca1996Olov
Io sconsiglio l'utilizzo della proprietà float.

Codice:
#menu, #content {
     display: inline-table;
     padding: 0;
     margin: 0;

      vertical-align: middle
}

#menu {
    width: 60%;
}

#content {
    width: 35%;
}

Resterà un margine di 5% quindi per centrarlo, aggiungi un altro coteniotre, per #menu & #content
assegnali il valore table alla proprietà display ed il valore center alla proprietà text-align
Perché sconsigli float? E perché usi display: inline-table?
 
Perché sconsigli float? E perché usi display: inline-table?

1. Perché usando la proprietà float il padre non terrà conto dell'altezza dei figli che la usano, sembra quasi che gli elementi che ne facciano uso vengono mandati fuori dal flusso del documento esattamente come fa la proprietà position con valori absolute o fixed

2. Perché utilizzando le tabelle (in CSS) io creo ottime grid system centrate anche verticalmente (vertical-align funziona solo con i display table-cell e inline-table);

uso inline-table e non table-cell perché a differenza dell'ultimo mi va a capo da solo e quindi la maggior parte delle volte io ho già tutto responsive, non uso quasi mai le media query e puoi creare quante colonne ti pare

nel esempio prima ho fatto 35% e 60%, per farlo andare a capo a certe risoluzioni, basta aggiungere un po di margine non servono nemmeno qui le media query

e possibile impostare anche la width su auto e si adatta da solo.
 
  • Mi piace
Reazioni: TheSeeker
1. Perché usando la proprietà float il padre non terrà conto dell'altezza dei figli che la usano, sembra quasi che gli elementi che ne facciano uso vengono mandati fuori dal flusso del documento esattamente come fa la proprietà position con valori absolute o fixed

2. Perché utilizzando le tabelle (in CSS) io creo ottime grid system centrate anche verticalmente (vertical-align funziona solo con i display table-cell e inline-table);

uso inline-table e non table-cell perché a differenza dell'ultimo mi va a capo da solo e quindi la maggior parte delle volte io ho già tutto responsive, non uso quasi mai le media query e puoi creare quante colonne ti pare

nel esempio prima ho fatto 35% e 60%, per farlo andare a capo a certe risoluzioni, basta aggiungere un po di margine non servono nemmeno qui le media query

e possibile impostare anche la width su auto e si adatta da solo.
Grazie per la spiegazione, farò dei test al più presto :D
 
Il punto è che, anche appena provato come mi avete spiegato voi, e vi ringrazio molto, se rimuovo il position: absolute, il logo del sito non viene centrato alla riga della tabella... So che potrà sembrare facile, ma a me sembra una cosa molto complessa, e purtroppo non riesco a centrarlo in nessun modo... Se allego il file HTML qualcuno sarebbe in grado di sistemarlo, se non è una cosa impegnativa? Grazie :(
 
Ad esempio tu Rendernos, che da quanto visto, so che sviluppi anche propri menu, quindi magari per te è una cavolata sistemarlo, mi faresti un enorme favore. Il punto è riuscire a tenere il logo centrato, mantenendo il menu che scrolla, e fa scrollare anche il resto della riga :(
 
Codice:
#out {
    background: #FFF none repeat scroll 0% 0%;
    width: 250px;
    float: left;
}

Codice:
#menu {
    width: 35px;
    height: 35px;
    background: #F00 none repeat scroll 0% 0%;
    cursor: pointer;
    color: #FFFAFA;
    text-align: center;
    font-size: 32px;
    float: left;
    margin: 15px;
}

Codice:
#contentmenu {
  position: absolute;
  left: -250px;
  width: 315px;
}

Codice:
body {
background: #FFF none repeat scroll 0% 0%;
font-family: "Arial Black",sans-serif;
transition: left 1s ease 0s;
position: relative;
overflow-x: hidden;
left: 250px;
padding-left: 5px;
}

Sostituisci queste parti, e poi sostituisci la parte javascript con questo:

Codice:
$( "#menu" ).click(function() {
     if($("body").css("left") == "0px"){
            $( "body" ).css( "left","250px" );
     } else {
            $( "body" ).css( "left","0px" );
     }
});

@Luca1996Olov
 
  • Mi piace
Reazioni: Luca1996Olov
1. Perché usando la proprietà float il padre non terrà conto dell'altezza dei figli che la usano, sembra quasi che gli elementi che ne facciano uso vengono mandati fuori dal flusso del documento esattamente come fa la proprietà position con valori absolute o fixed
Se proprio devi utilizzare float esiste un fix per il problema dell'altezza. Basta mettere dopo gli elementi float un altro elemento che abbia la proprietà "clear:both;"
 
  • Mi piace
Reazioni: TheSeeker
Ringrazio molto per l'aiuto, ma purtroppo nemmeno così funziona. il contentmenu viene visualizzato come se fosse fuori dalla riga, quindi esternato al body :(
Vi lascio il mio index, e l'index modificato come appena fatto, spero possiate aiutarmi :(
 

Allegati

  • index.zip
    4.4 KB · Visualizzazioni: 16
Ringrazio molto per l'aiuto, ma purtroppo nemmeno così funziona. il contentmenu viene visualizzato come se fosse fuori dalla riga, quindi esternato al body :(
Vi lascio il mio index, e l'index modificato come appena fatto, spero possiate aiutarmi :(
Ecco il file index funzionante, ho due cose da dirti:
1) Impara ad indentare. Ho perso più tempo per rendere tutto "leggibile" che a sistemare realmente la pagina :\
2) Come già ti è stato detto non utilizzare le tabelle per il layout della pagina, ma solo per contenere dati qualora servisse.
https://www.dropbox.com/s/wx2byelebgnb9eu/index modificato.html?dl=0
 
Stato
Discussione chiusa ad ulteriori risposte.