Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    il tag IMG invade il DIV seguente

    Ciao a tutti!
    Vi chiedo di risolvermi un dubbio!
    Mi capita una cosa che non capisco: in un template con DIV e relativo CSS.
    Tipo così:

    <div id="container">
    <div id="header"></div>
    <div id="faux">
    <div id="leftcolumn"></div>
    <div id="rightcolumn">
    <div id="bloccotesto1"></div>
    <div id="bloccotesto2"></div>
    </div>
    <div class="clear"></div>
    </div>
    <div id="footer"></div>
    </div>

    Dentro rightcolumn nel primo DIV bloccotesto1 c'è:

    <h1>TITOLO TITOLO</h1>
    <p align="left">[img]immagine.jpg[/img]testo testo testo testo testo testo testo testo testo testo testo </p>

    Il testo è poco, alla destra dell'immagine. Quindi sotto il testo (a fianco dell'immagine) dovrebbe esserci un bel po' di spazio bianco e andrebbe bene così.
    Subito sotto a questo codice si apre un secondo DIV bloccotesto2 che conterrà un blocco per le notizie.

    Qual è il problema?
    Se, come in questo caso, il testo è poco e l'immagine è alta succede che il div successivo (bloccotesto2) non viene mostrato subito sotto l'immagine - come dovrebbe essere - ma viene invece collocato subito sotto il testo. Essendoci l'align left dell'immagine, il div successivo viene anch'esso allineato alla destra dell'immagine, esattamente come il testo.
    Questo non va bene e rovina di brutto la struttura.
    Mi chiedo, non c'è una specie di CLEAR che evita che anche il div successivo sia allineato alla destra dell'immagine?
    Per risolvere questa situazione. devo mandare a capo tante volte affinche il testo si spinga fin oltre l'immagine. In questo modo il DIV successivo si vedrà correttamente sotto l'immagine e non a fianco.
    Soluzione assai poco elegante, purtroppo.

    Non ho pubblicato il CSS per evitare un messaggio lughissimo.
    Inserico solo:

    #rightcolumn {
    float: right;
    width: 518px;
    display: inline;
    position: relative;
    }

    bloccotesto 1 e 2 non hanno nulla di particolare. width: auto;


    Spero di essermi spiegata! Grazie.

  2. #2
    Utente di HTML.it L'avatar di salasir
    Registrato dal
    Apr 2004
    Messaggi
    1,887
    Prova così:
    codice:
    .sx { float: left; margin: 10px; }
    .clear { clear: left; }
    
    <h1>TITOLO TITOLO</h1>
    
    
    
    [img]immagine.jpg[/img]testo testo testo testo testo testo testo testo testo testo testo </p>
    <div class="clear">testo testo testo testo testo testo testo testo testo testo testo </div>
    Maurizio

    "se ami il lavoro che fai, non lavorerai mai un giorno in vita tua!"

  3. #3
    Grazie, proverò a vedere se funziona.
    Ma mi chiedo perché il tag DIV viene influenzato dall'align LEFT del tag IMG.
    In fondo, DIV non dovrebbe ignorare l'align LEFT e incominciare su una nuova linea esattamente sotto l'immagine? Perché invece subisce l'align left dell'immagine ed è quindi collocato a fianco all'immagine e non sotto?
    Vorrei capire il perché!! Qualcuno sa spiegarmelo? Ho sbagliato qualcosa? Manca qualche DISPLAY o qualcos'altro?

    grazie!

  4. #4
    Utente di HTML.it L'avatar di salasir
    Registrato dal
    Apr 2004
    Messaggi
    1,887
    Non credo ..

    In effetti se imposti due blocchi di dimensioni tali che non superino la dimensione del blocco contenitore e li allinei a sinistra (o destra), vengono affiancati (vedi per esempio due immagini).
    Maurizio

    "se ami il lavoro che fai, non lavorerai mai un giorno in vita tua!"

  5. #5
    Allora, tanto per chiarire il dubbio ho provato a creare una situazione assai più semplice, avulsa dal sito.
    Creo nuovo foglio html, inserisco un DIV e al suo interno una immagine allineata a sinistra con del testo vicino. Chiudo DIV. Subito sotto un altro DIV con dell'altro testo.

    Il comportamento è lo stesso: Il secondo DIV si affianca all'immagine e non va sotto.
    A questo punto non è un errore, ma è proprio così che vanno le cose. Amara soddisfazione.

    Cmq, ho trovato in rete una soluzione più elegante e facilmente gestibile da un cliente inesperto (con FCKeditor per esempio), unito a quello che diceva Salasir.

    img { float: left; margin: 10px; }
    br#break { clear: left; }


    Codice PHP:
    <BODY>.
    ***********   -------
    |          |  -------
    immagine |  --<br id="break" />
    |          |  
    ***********
    -----------------
    ...
    </
    BODY
    Voi conoscete qualche altro modo per farlo? Io resto sempre in attesa!
    Grazie a tutti!

  6. #6
    Utente di HTML.it L'avatar di salasir
    Registrato dal
    Apr 2004
    Messaggi
    1,887
    Mi sembra la stessa soluzione che ti ho indicato io ...

    Tra l'altro, puoi assegnare il clear al div successivo come classe, invece di inserire tag superflui
    . Inoltre, come lo hai indicato, utilizzi un id che non potrà essere replicato, in quanto univoco, se dovesse presentarsi la necessità di "pulire" il float in un'altra posizione della pagina.
    Maurizio

    "se ami il lavoro che fai, non lavorerai mai un giorno in vita tua!"

  7. #7
    Hai ragione Salasir, è d'obbligo la classe al posto dell'ID. Mi veniva comodo associarlo al BR semplicemente perché pensavo di modificare l'FCKeditor inserendo un nuovo bottone BR con la classe "break". In questo modo il cliente fa click sul bottone e non deve pensare a nulla.
    Ad ogni modo oggi guardavo il corriere.it, ma non le notizie... stavo studiacchiando il loro CSS. Insomma, lì ho trovato una soluzione elegantissima che farà in modo che i clienti non debbano fare nulla, manco il BR. E questa è davvero una gran cosa, conoscendo quanto anche la cosa più semplice tipo "ricordatevi di inserire il BR" può essere vissuta come un incubo!
    Il corriere stesso si rifà a questo articolo.


    Codice PHP:
    .clearfix:after {
        
    content"."
        
    displayblock
        
    height0
        
    clearboth
        
    visibilityhidden;
    }

    .
    clearfix {displayinline-block;}

    /* Hides from IE-mac \*/
    html .clearfix {height1%;}
    .
    clearfix {displayblock;}
    /* End hide from IE-mac */ 
    Se il div che conterrà l'immagine avrà questa classe, l'elemento che segue non sarà più condizionato dal float left senza bisogno di fare nulla a livello di html.
    Voi cosa ne pensate? Secondo me è la soluzione perfetta. L'ho provata e funziona!
    Ciao!

  8. #8
    Utente di HTML.it L'avatar di salasir
    Registrato dal
    Apr 2004
    Messaggi
    1,887
    L'articolo che citi l'avevo già visto e credo sia la soluzione ottimale, che non necessita di markup aggiuntivo e inutile.

    Non te l'avevo suggerito perchè so che IE6 non supporta la pseudoclasse :after e i contenuti generati da CSS.
    Ma non l'ho letto approfonditamente...

    In effetti scorrendolo mi sono accorto che c'è il "trucchetto" per IE.
    Maurizio

    "se ami il lavoro che fai, non lavorerai mai un giorno in vita tua!"

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.