Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Un chiarimento: da <TABLE> a Box Model in puro css

    Ciao a tutti!
    Ho iniziato a studiare il css da poco e chiedo a voi per capirne di piu' (non che non ci siano informazioni in internet, ma forse dal mio punto di vista ce ne sono troppe e troppo confuse).

    Parto da questo assunto: voglio realizzare un box di larghezza fissa ed altezza variabile con i bordi arrotondati dati dalle immagini.

    Questo il codice che ho scritto in prima istanza.

    Foglio di stile:


    td.boxul { /* Upper left */
    background-image: url(http://www.gisport.org/images/box/boxul.png);
    width: 12px;
    height: 24px;
    background-position: top left;
    background-repeat: no-repeat;
    }
    td.boxuc { /* Upper center */
    background-image: url(http://www.gisport.org/images/box/boxuc.png);
    width: auto;
    height: 24px;
    background-position: top;
    background-repeat: repeat-x;
    }
    td.boxur { /* Upper right */
    background-image: url(http://www.gisport.org/images/box/boxur.png);
    width: 12px;
    height: 24px;
    background-position: top right;
    background-repeat: no-repeat;
    }
    td.boxml { /* Middle left */
    background-image: url(http://www.gisport.org/images/box/boxml.png);
    width: 12px;
    height: auto;
    background-position: left;
    background-repeat: repeat-y;
    }
    td.boxmc { /* Middle Center */
    background-image: url(http://www.gisport.org/images/box/boxmc.png);
    width: auto;
    height: auto;
    background-position: center;
    background-repeat: repeat;
    }
    td.boxmr { /* Middle right */
    background-image: url(http://www.gisport.org/images/box/boxmr.png);
    width: 12px;
    height: auto;
    background-position: right;
    background-repeat: repeat-y;
    }
    td.boxll { /* Lower left */
    background-image: url(http://www.gisport.org/images/box/boxll.png);
    width: 12px;
    height: 23px;
    background-position: bottom left;
    background-repeat: no-repeat;
    }
    td.boxlc { /* Lower center */
    background-image: url(http://www.gisport.org/images/box/boxlc.png);
    width: auto;
    height: 23px;
    background-position: bottom;
    background-repeat: repeat-x;
    }
    td.boxlr { /* Lower right */
    background-image: url(http://www.gisport.org/images/box/boxlr.png);
    width: 12px;
    height: 23px;
    background-position: bottom right;
    background-repeat: no-repeat;
    }


    E questo l'html con i TAG <TABLE> & Co.


    <table border="0" cellpadding="0" cellspacing="0" style="width: 500px">
    <tr>
    <td class='boxul'></td>
    <td class='boxuc'></td>
    <td class='boxur'></td>
    </tr>
    <tr>
    <td class='boxml'></td>
    <td class='boxmc'>Testo di prova testo di prova
    La chiamavano Bocca di Rosa</td>
    <td class='boxmr'></td>
    </tr>
    <tr>
    <td class='boxll'></td>
    <td class='boxlc'></td>
    <td class='boxlr'></td>
    </tr>
    </table>


    Ora, stavo valutando la possibilita' di tradurre il tutto utilizzando almeno 8 o 9 DIV annidiati solo per provare a capirne di piu' ma non sono venuto a capo di niente.

    Qualche domanda, per iniziare:
    - Perche' (ma soprattutto e' vero che...) e' bene preferire i tag DIV annidiati piuttosto che la tabella (considerando che la tabella funziona perfettamente sulla maggior parte dei browser che ho testato)?
    - Come posso tradurre il tutto nella maniera piu' elegante che conoscete considerando che la stessa tabella (nella struttura ma non nei contenuti) potra' essere riportata in piu' punti della pagina e/o in piu' pagine con contenuti differenti?

    Per favore non rimandatemi a visitare le pagine
    http://css.html.it/articoli/leggi/28...ati-con-i-css/
    piuttosto che i dettaglio sui nifty corners

    So perfettamente (ho visto!) che questo argomento e' stato trattato migliaia di volte, ma sono di coccio, cosa vi posso dire!

    Anticipatamente buona giornata,
    Stefa
    Il saggio coltiva Linux poichè Windows si pianta da solo

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Devi scegliere se vuoi una cosa fatta bene, oppure un sito "che si veda nei tre-quattro browser piu` diffusi".
    Nell'ultimo caso, fai presto: prendi un editor qualsiasi, butti giu` una tabella e la cosa funziona.

    Se invece vuoi trasmettere delle informazioni, che siano visibili non solo al 95% dei visitatori, ma anche a quelli che:
    - non usano IE o FF
    - navigano con i cellulari, PDA, ... (schermo ridotto)
    - non possono vedere la pagina
    - hanno bisogno di supporti esterni per navigare
    - ai sitemi di indicizzazione (automatici, non umani)

    Allora devi trasmettere le informazioni in una forma che sia ragionevolmente formattata.
    una tabella e` semanticamente legata a dei dati con interazione riga-colonna: se tale interazione non c'e` l'uso della tabella inserisce delle informazioni false.

    Poi devi fare un passo alla volta: e` piu` importante che gli angoli siano arrotondati o che il messaggio (suppongo che il sito ti serva per trasmettere un messaggio a qualcuno/qualcosa) sia trasmesso in modo corretto? Nota che io non ho la risposta (la risposta che ti posso dare io e` quella valida nel 95% dei casi, ma non so se il tuo ricade in questo 95%).

    Se gli angoli sono un abbellimento, conviene che prima fai il sito/pagina, verifichi che funzioni in tutti i browser (i validatori possono dare un grosso aiuto); poi inserisci gli angoli arrotondati (che non devono pregiudicare la visibilta` nei browser piu` "grezzi").
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Grazie mille Mich_!

    Ti rispondo con ordine:

    - Al momento il sito e' gia' operativo sulla intranet dell'azienda per cui lavoro. Come tale le informazioni che sono contenute nelle tabelle ci sono gia' tutte e visibili dal 100% dei browser installati sulle ns. macchine. Ma questo non e' un buon motivo per non provare ad abbellire il tutto anche in vista di un un sito (esterno alla mia azienda) che sto sviluppando e che sara' pubblico (spero) presto.

    - Potendo e dovendo partire da zero credo sia piu' opportuno partire con una struttura che abbia la piena compatibilita' con tutti i browser (anche e soprattuto per via del fatto che i css sono abbastanza nuovi per me e questa e' un'occasione ottima per imparare qualcosa di nuovo).

    - Potrei (e' vero) partire sfruttando la struttura con il tag <TABLE> e poi cambiare le carte in corsa o quando il tutto sara' pubblico, ma vorrei anche valutare quanto mi convenga perdere anche un po' piu' di tempo subito per fare qualcosa di elegante e intelleggibile da tutti i browser per poi non doverci ritornare in futuro.

    - Gli angoli sono solo ed unicamente un abbellimento (assolutamente d'accordo con te!) ma mi son detto perche' no?!?

    Diciamo che allo stato attuale ho solo voglia di imparare come si fa (e non a caso chiedo aiuto a voi!) se poi questa cosa non mi stravolge di molto tutto il lavoro gia' fatto per pubblicare un qualcosa che sia bello da subito e compatibile per tutti, beh allora credo che valga la pena spendere qualche ora in piu' da subito imparando qualcosa di nuovo.

    Posto che m'hai risposto alla prima domana (il perche') e ti ringrazio ancora, torno alla mia domanda in origine: come?

    Ancora grazie mille!
    Ste
    Il saggio coltiva Linux poichè Windows si pianta da solo

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non so se hai gia` visto il tutorial CSS di HTML.it. Altrimenti vale la pena che lo studi ...

    Per quanto riguarda il layout, in linea di massima NON conviene partire dalle tabelle e poi "convertire". Conviene partire da una cosa gia` corretta.

    Tra i "link utili" - sezione layout - ci sono vari riferimenti a layout, alcuni anche molto belli.
    In linea di massima un layout fatto con <div> e CSS e` molto piu` semplice e accessibile di uno a tabelle, ma comporta un "cambiamento di prospettiva" per cui all'inizio puo` sembrare complesso, mentra dopo un minimo di esperienza risulta piu` semplice di uno a tabelle.

    Quando si realizza con i CSS si deve (nell'ordine):
    1. sezionare la pagina secondo la logica (non secondo la grafica)
    2. attribuire un significato semantico ad ogni oggetto e scegliere la marcatura piu` adatta
    3. sistemare la marcatura (= codice HTML)
    4. dare forma alla marcatura (= pensare al CSS)
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    OK! ci (ri)provo (ri)leggendo il tutorial!
    Al piu' mi permetto di disturbarti(/vi) nuovamente!

    Buona giornata,
    Stefano
    Il saggio coltiva Linux poichè Windows si pianta da solo

  6. #6
    Con un po' di sbattimento penso di aver risolto...

    Mi permetto di postare il codice che ho utilizzato sia se dovesse servire a qualcuno newbie come me, sia per farmelo correggere/abbellire da ogni uomo di buona volonta':

    Prerequisito: Ottenere una tabella come questa:


    1' metodo: utilizzo del tag <TABLE>


    CSS
    td.boxul { /* Upper left */
    background-image: url(http://www.gisport.org/images/box/boxul.png);
    width: 12px;
    height: 24px;
    background-position: top left;
    background-repeat: no-repeat;
    }
    td.boxuc { /* Upper center */
    background-image: url(http://www.gisport.org/images/box/boxuc.png);
    width: auto;
    height: 24px;
    background-position: top;
    background-repeat: repeat-x;
    }
    td.boxur { /* Upper right */
    background-image: url(http://www.gisport.org/images/box/boxur.png);
    width: 12px;
    height: 24px;
    background-position: top right;
    background-repeat: no-repeat;
    }
    td.boxml { /* Middle left */
    background-image: url(http://www.gisport.org/images/box/boxml.png);
    width: 12px;
    height: auto;
    background-position: left;
    background-repeat: repeat-y;
    }
    td.boxmc { /* Middle Center */
    background-image: url(http://www.gisport.org/images/box/boxmc.png);
    width: auto;
    height: auto;
    background-position: center;
    background-repeat: repeat;
    }
    td.boxmr { /* Middle right */
    background-image: url(http://www.gisport.org/images/box/boxmr.png);
    width: 12px;
    height: auto;
    background-position: right;
    background-repeat: repeat-y;
    }
    td.boxll { /* Lower left */
    background-image: url(http://www.gisport.org/images/box/boxll.png);
    width: 12px;
    height: 23px;
    background-position: bottom left;
    background-repeat: no-repeat;
    }
    td.boxlc { /* Lower center */
    background-image: url(http://www.gisport.org/images/box/boxlc.png);
    width: auto;
    height: 23px;
    background-position: bottom;
    background-repeat: repeat-x;
    }
    td.boxlr { /* Lower right */
    background-image: url(http://www.gisport.org/images/box/boxlr.png);
    width: 12px;
    height: 23px;
    background-position: bottom right;
    background-repeat: no-repeat;
    }

    CODICE HTML
    <table border="0" cellpadding="0" cellspacing="0" style="width: 150px">
    <tr>
    <td class='boxul'></td>
    <td class='boxuc'></td>
    <td class='boxur'></td>
    </tr>
    <tr>
    <td class='boxml'></td>
    <td class='boxmc'>
    Qui va il contenuto
    E tante belle cose
    Prova Prova Prova
    </td>
    <td class='boxmr'></td>
    </tr>
    <tr>
    <td class='boxll'></td>
    <td class='boxlc'></td>
    <td class='boxlr'></td>
    </tr>
    </table>


    2' metodo: utilizzo del tag <DIV>


    CSS
    .contenitore {
    width: 150px;
    color: #000;
    background: url(http://www.gisport.org/images/box/boxmc.png) repeat center center;
    }
    .topcenter { background: url(http://www.gisport.org/images/box/boxuc.png) repeat-x top; }
    .lowcenter { background: url(http://www.gisport.org/images/box/boxlc.png) repeat-x bottom; }
    .middleleft { background: url(http://www.gisport.org/images/box/boxml.png) repeat-y left; }
    .middleright { background: url(http://www.gisport.org/images/box/boxmr.png) repeat-y right; }
    .topleft { background: url(http://www.gisport.org/images/box/boxul.png) no-repeat top left; }
    .topright { background: url(http://www.gisport.org/images/box/boxur.png) no-repeat top right; }
    .bottomleft { background: url(http://www.gisport.org/images/box/boxll.png) no-repeat bottom left; }
    .bottomright { background: url(http://www.gisport.org/images/box/boxlr.png) no-repeat bottom right; }
    .contenuto { padding: 10px; }

    CODICE HTML
    <div class="contenitore">
    <div class="topcenter">
    <div class="lowcenter">
    <div class="middleleft">
    <div class="middleright">
    <div class="topleft">
    <div class="topright">
    <div class="bottomleft">
    <div class="bottomright">
    <div class="contenuto">
    Qui va il contenuto
    E tante belle cose
    Prova Prova Prova
    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </div>
    </div>


    Se qualcuno vuole utilizzare, correggere, pulire, integrare il codice di cui sopra e' naturalmente piu' che il benvenuto!

    Buona serata a tutti!
    Stefano
    Il saggio coltiva Linux poichè Windows si pianta da solo

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Troppi box ed innestati male.

    Anzitutto occorre verificare se nel tuo caso e` possibile fissare la larghezza totale: in tal caso la marcatura si semplifica di molto.

    Comunque lasciando quelle immagini, la struttura HTML dovrebbe essere la seguente:
    codice:
    <div class="contenitore">
      <div class="topleft"> </div>
      <div class="topcenter"> </div>
      <div class="topright"> </div>
      <div class="middleleft"> </div>
      <div class="contenuto">
        
    
    Qui va il contenuto
    E tante belle cose
    Prova Prova Prova</p>
      </div>
      <div class="middleright">
      <div class="bottomleft">
      <div class="bottomcenter">
      <div class="bottomright">
    </div>
    Naturalmente i blocchi dei bordi avranno una dimensione fissa (due dimensioni fisse gli angoli)


    La stessa cosa si puo` realizzare usando gli angoli arrotondati (nifty corners):
    Con un uso sapiente dei box, studiando bordi e margini, si puo` realizzare usando:
    codice:
    <div class="contenitore">
      <div class="bordoesterno">
        <div class="contenuto">
          
    
    Qui va il contenuto
    E tante belle cose
    Prova Prova Prova</p>
        </div>
      </div>
    </div>
    .
    Il contenitore avra` sfondo blu (e angoli retti);
    bordoesterno avra` angoli arrotondati, bordo nero e sfondo chiaro;
    contenuto avra` angoli arrotondati, bordo nero e sfondo grigio.
    Volendo si puo` dare sfondo sfumato al bordoesterno, in modo da simulare il cambio di colore da bianco al grigiochiaro.
    Chiaramente il raggio dei nifty sara` diverso nei due blocchi.

    Nota: per questa soluzione occorre fare un CSS diverso per IE (quirks mode), dato che bordi e padding si comportano in modo diverso rispetto ai browser standard. Occorre usare i commenti condizionali.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  8. #8
    ciao Mich_
    ho applicato il tuo suggerimento ma il risultato non e' lo stesso...

    codice:
    <div class="contenitore">
      <div class="topleft"></div>
      <div class="topcenter"></div>
      <div class="topright"></div>
      <div class="middleleft"></div>
      <div class="contenuto">
        
    
    Testo di prova</p>
      </div>
      <div class="middleright"></div>
      <div class="bottomleft"></div>
      <div class="bottomcenter"></div>
      <div class="bottomright"></div>
    </div>
    Quello che e' visualizzato e' un box totalmente grigio... sembrerebbe che il div "contenuto" sia sul layer superiore. Il DIV puo' essere aperto e chiuso senza contenuti?
    Il saggio coltiva Linux poichè Windows si pianta da solo

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    sembrerebbe che il div "contenuto" sia sul layer superiore.
    Non ci sono elementi float, o elementi posizionati, vero?
    Perche` quanto dici succede in questi casi.

    Il DIV puo' essere aperto e chiuso senza contenuti?
    No, alcuni browser ignorano un blocco vuoto. Mettici dentro almeno uno spazio (vedi il mio codice - dove ho dimenticato una serie di </div>, ma tu lo hai gia` corretto).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  10. #10
    Mhm...

    Ho riletto piu' volte la tua procedura e probabilmente sbaglio qualcosa ma non capisco dove.

    Ho anche riprodotto tutta la pagina in un singolo file:

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head profile="http://gmpg.org/xfn/11">
    <meta http-equiv="Content-Type" content="text/html" charset=UTF-8" />
    <title>Devel x www.scienafregia.it</title>
      <meta name="generator" content="Stefano Radaelli" />
    
      <style type="text/css">
        .contenitore  { width: 100%; color: #000; background: url(http://www.gisport.org/images/box/boxmc.png) repeat center center; }
        .topcenter    { display: block; background: url(http://www.gisport.org/images/box/boxuc.png) repeat-x top;                       }
        .lowcenter    { background: url(http://www.gisport.org/images/box/boxlc.png) repeat-x bottom;                    }
        .middleleft   { background: url(http://www.gisport.org/images/box/boxml.png) repeat-y left;                      }
        .middleright  { background: url(http://www.gisport.org/images/box/boxmr.png) repeat-y right;                     }
        .topleft      { background: url(http://www.gisport.org/images/box/boxul.png) no-repeat top left;                 }
        .topright     { background: url(http://www.gisport.org/images/box/boxur.png) no-repeat top right;                }
        .bottomleft   { background: url(http://www.gisport.org/images/box/boxll.png) no-repeat bottom left;              }
        .bottomright  { display: block; background: url(http://www.gisport.org/images/box/boxlr.png) no-repeat bottom right;             }
        .contenuto    { margin: 10px; padding: 10px; }
      </style>
    </head>
    <body>
      
     
      <div style="width: 150px">
        <div class="contenitore">
          <div class="topcenter">
          <div class="lowcenter">
          <div class="middleleft">
          <div class="middleright">
             <div class="topleft">
             <div class="topright">
             <div class="bottomleft">
             <div class="bottomright">
                <div class="contenuto">
                  
    
    Qui va il contenuto
    Finto Testo
    Finto Testo</p>
                </div>
             </div>
             </div>
             </div>
             </div>
          </div>
          </div>
          </div>
          </div>
        </div>
      </div>
      
      <hr />
      
     
    <div style="width: 200px">
      <div class="contenitore">
        <div class="topleft"> </div>
        <div class="topcenter"> </div>
        <div class="topright"> </div>
        <div class="middleleft"> </div>
        <div class="contenuto">
          
    
    Qui va il contenuto
    Finto Testo
    Finto Testo</p>
        </div>
        <div class="middleright"> </div>
        <div class="bottomleft"> </div>
        <div class="bottomcenter"> </div>
        <div class="bottomright"> </div>
      </div>
    </div>
    </body>
    </html>
    Ma il comportamento si conferma quello che ti dicevo:
    :master: http://www.gisport.org/_dev/prova.html

    Mi spiace anche passare per pedante poiche' son due giorni che ti stresso sull'argomento... ma mi piace capirne di piu'

    Grazie! ciao!
    Stefano
    Il saggio coltiva Linux poichè Windows si pianta da solo

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.