Es mostren els missatges amb l'etiqueta de comentaris html. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris html. Mostrar tots els missatges

divendres, 15 de juliol del 2011

Taules amb cantonades rodones (reprise)

En un post anterior vaig explicar com  fer caixes amb els cantons rodons amb HTML.

En aquella ocasió la solució es basava en taules HTML aplicant estils a etiquetes <table> <tr> i <td>.

En ocasions , un enfocament com l'anterior pot ser necessari, perquè hi han un munt de pàgines web que fan servir, o han fet servir, les taules per a maquetar-ne la presentació, i pot ser que ens calgui retocar-les.

Des de fa temps, però, la solució amb taules es considera inadequada. Les taules HTML només haurien de fer-se servir per presentar dades en format tabular, i formatar-les amb css.

Per a maquetar, la recomanació general és fer servir capes (etiquetes <div>). Per al cas concret de taules amb cantons rodons, vet aquí solucions possibles.

Si em cal crear els gràfics corresponents a les caixes amb els cantons rodons, faig servir la combinació de Inkscape i Gimp. Inkscape permet crear caixes amb cantons rodons, especificant mides i radis dels cantons,  aplicar diferents efectes i exportar les caixes a format png. Després, per retallar les diferents cantonades, les o tapes, o els costats, es pot fer servir el Gimp, per exemple.

OpenOffice.org/LibreOffice Draw també permet crear caixes amb els cantons rodons amb l'eina de dibuix caixa i fent, després Format-Posició i Mida i ajustant el radi a la pestanya Inclinació i Radi de la Cantonada. La pega de fer servir aquesta eina és que no disposa de la unitat "píxel", d'us comú al disseny web. Si la fem servir segurament ens caldrà fer una conversió prèvia a les unitats de treball OOo/LO. Per exemple, fer servir punts, la conversió és 3pt aprox. igual a  4px.

El cas trivial és que coneixem d'antuvi la mida que tindrà la taula. En aquest cas, n'hi ha prou amb fer-servir la caixa de background d'un div:

<div class="caixa">Compte amb no sortir-se'n dels
marges pre-establerts.<br>
<ul>
  <li>ítem 1</li>
  <li>ítem 2</li>
  <li>ítem 3</li>
  <li>ítem 4</li>
  <li>ítem 5</li>
  <li>ítem 6</li>
  <li>ítem 7</li>
</ul>
</div>

i tindré la següent definició per a la class caixa:

.caixa {
  border-style: none;
  margin: 0px;
  padding: 5px;
  width: 401px;
  background-image: url(http://localhost/albert/prova01/img/quadre401x201px.gif);
  background-repeat: no-repeat;
  height: 201px;
  font-family: Arial,Helvetica,sans-serif;
  color: #000099;
  top: 0px;
  right: 0px;
  bottom: 0px;
  left: 0px;
}

On la imatge és aquesta:


Pot ser útil  crear caixes que es redimensionin automàticament:

Aquesta és una caixa que pot  créixer en vertical. Cal fer tres capes: una capa per la tapa superior, una capa central, i una capa per a la tapa inferior.

<div class="topbox">&nbsp;</div>

<div class="midbox">exemple de caixa que port créixer en
vertical. Només cal anar afegint text per veure com creix sense haver
de fer res més.<br>
</div>

<div class="bottombox">&nbsp;</div>

Les css corresponents:

.topbox {
  background-image: url(img/top-quadre301x12px.png);
  width: 301px;
  height: 12px;
  background-repeat: no-repeat;
}
.midbox {
  padding: 5px;
  background-image: url(img/bg-quadre301x1px.png);
  width: 301px;
  font-family: Arial,Helvetica,sans-serif;
  font-size: 25px;
  background-repeat: repeat-y;
}
.bottombox {
  width: 301px;
  background-repeat: no-repeat;
  background-image: url(img/bottom-quadre301x12px.png);
  height: 12px;

Les mides de les imatges han de coincidir amb les dels div.

Les imatges de les tapes superior i inferior:

i la imatge central que és d'1 pixel d'amplada i que aconsegueix emplenar la capa en vertical amb el background-repeat: repeat-y
 

De forma similar, es pot crear una caixa capaç d'adaptar-se, fins un tamany màxim, a divrerents llargades horitzontals. Em cal una tapa a l'esquerra, una capa central i la tapa de la dreta. Aleshores cal indicar que la imatge central ha de repetir-se en horitzontal.
Com cal posar les capes una a continuació de l'altre, cal indicar que "floten":

<div class="leftbox">&nbsp;</div>

<div class="midbox2">exemple de caixa que pot créixer en
horitzontal fins un màxim de 900px. Cal vigilar perquè tindrà un màxim
de línies útils.<br>
</div>

<div class="rightbox">&nbsp;</div>

Els css corresponents són:

.leftbox {
  background-image: url(img/left-quadre12x151px.png);
  background-repeat: no-repeat;
  height: 151px;
  width: 12px;
  float: left;
}
.midbox2 {
  padding: 5px;
  background-repeat: repeat-x;
  float: left;
  font-family: Arial,Helvetica,sans-serif;
  background-image: url(img/bg-quadre1x151px.png);
  height: 151px;
  max-width: 900px;
  font-size: 40px;
}
.rightbox {
  background-image: url(img/right-quadre12x151px.png);
  background-repeat: no-repeat;
  width: 12px;
  height: 151px;
  float: left;
}

Les imatges són:




En aquest últim cas,  caldrà tenir en compte que les dimensions de la pantalla poden provocar que alguna capa passi a la fila inferior, desmuntant l'efecte de caixa. Es pot prendre la precaució d'agrupar les tres capes anteriors en una capa de dimensions suficients i que forçaria l'aparició de la barra d'scroll horitzontal si calgués.

Finalment, pot ser interessant disposar d'un mètode general per a fer caixes de mida ajustable.

El següent és una tècnica adaptada de http://www.neuroticweb.com/recursos/css-rounded-box/. Amb aquesta tècnica només cal fixar la mida horitzontal.

Com en els casos anteriors tindrem una tapa superior, una capa central i una capa de tapa inferior.  Però les tapes tindran, a més sengles capes addicionals per a fer cada una la cantonada dreta corresponent.

Vet aquí el codi. Podem ampliar el text o posar i treure <br> per veure'n els resultats.

<div class="rbbox">

    <div class="rbltop">
        <div class="rbrtop">&nbsp;</div>
    </div>

    <div class="rbcontent">
        <p>aquesta és una prova de caixa que s'adapta de forma<br>
        automàtica a la mida del seu contingut.<br>
        Adaptat de 

        <a href="http://www.neuroticweb.com/recursos/css-rounded-box/">
        http://www.neuroticweb.com/recursos/css-rounded-box/</a></p>
    </div>

    <div class="rblbot">
        <div class="rbrbot">&nbsp;</div>
    </div>
</div>


Els css són aquests:

.rbbox { background: url(img/rbbg.gif) repeat; width: 300px; margin: 0 100px; }
.rbltop { background: url(img/rbtl.gif) no-repeat top left; }
.rbrtop { background: url(img/rbtr.gif) no-repeat top right; }
.rblbot { background: url(img/rbbl.gif) no-repeat bottom left; }
.rbrbot { background: url(img/rbbr.gif) no-repeat bottom right; }
.rbcontent { margin: 5px 5px; }


I les imatges:






Finalment, dir que de tècniques per a fer cantonades rodones amb HTML i CSS  n'hi han moltes. A aquest enllaç (http://www.devwebpro.com/25-rounded-corners-techniques-with-css/) en podem trobar un bon grapat.

divendres, 24 de juny del 2011

CSS Box model. quirks mode vs. w3c mode

Recentment he estat involucrat en la creació de pàgines web amb crossbrowsing per a Internet Explorer 6,7,8 i FireFox 3,3.6 i 4.

Per crossbrowsing s'entén la creació de pàgines web que es vegin igual amb tots els navegadors.

És, doncs,  l'art d'eliminar les diferències de visualització que hi han entre dieferents navegadors, entre versions d'un mateix navegador o entre un mateix navegador  a diferents sistemes operatius.

Per exemple: les diferències de visualització entre Internet Explorer, FireFox i Chrome; les diferències de visualització entre Internet Explorer 6, 7,8 i 9; o les diferències de visualització entre Windows i Unix.


Un dels aspectes que dificulten el crossbrowsing és el model de caixes del CSS.

El model de caixes aplica a les capes i a un  munt d'etiquetes. El model de caixes especifica els marges, el padding o espai entre els límits  de la caixa i l'espai útil de la caixa, especifica la forma i mida de les vores de la caixa...

 
El model de caixes està definit en una especificació del WWW Consortium i l'honoren tots els navegadors importants, si més no en les seves versions actuals. És l'standard model. Ara bé, les versions antigues de l'Internet Explorer feien servir un model de caixes propi. I les versions modernes han optat per mantenir aquest model per a totes aquelles pàgines HTML que no tinguin DOCTYPE, o que el DOCTYPE defineixi la pàgina com HTML 3, com HTML 4 Transitional, o es tracti d'un document de framesets. El que es coneix com Quirqs mode.

Això ens parla de la importància de donar un DOCTYPE adequat a les pàgines que tinguem que crear.

A Internet n'hi han un munt de pàgines que provoquen que l'Internet Explorer les visualitzi en quirks mode.

Per això, cal tenir present les diferències entre el model de caixes del quirks mode i el model de caixes estàndar.

La següent imatge, agafada de http://www.456bereastreet.com/archive/200612/internet_explorer_and_the_css_box_model/, il·lustra aquestes diferències. Aquesta és una imatge clau que cal tenir present a l'hora de desenvolupar

La tècnica de desenvolupament tenint el cross-browsing en ment seguiria els següents principis:

1. desenvolupar per a un navegador base, per exemple Firefox.
2. separar tots els estils en un document css.
3. examinar el resultat en els navegadors per als que es vol garantir el crossbrowsing, per exemple Internet Explorer
4. fent us de condicionals. En el cas de Internet Explorer es disposa de les etiquetes <!--[IF IE nn ]>   .....    <![END IF] --> (amb nn versió de IE).

 Un bon motiu per a desenvolupar primer amb FireFox és que després és molt senzill associar uns CSS específics per al cross browsing amb IE fent servir les etiquetes condicionals de l'IE. En canvi, si es pren IE com navegador base, aleshores cal utilitzar condicionals amb javascript per a associar CSS a Firefox.

El codi dels condicionals amb FireFox quedaria així

<link rel="stylesheet" type="text/css" href="/css/ff_css.css"/>
<!--[IF IE 7 ]>
<link rel="stylesheet" type="text/css" href="/css/ie7_css.css"/>
<![END IF] -->
<!--[IF IE 8 ]>
<link rel="stylesheet" type="text/css" href="/css/ie8_css.css"/>
<![END IF] -->

dijous, 12 d’agost del 2010

com fer taules HTML amb les cantonades rodones? / 14 juny 2010

com fer taules HTML amb les cantonades rodones?

Vet aquí una solució que fa us de la propietat background de les etiquetes TD.

<table cellspacing="0px" cellpadding="0px" >
    <tr>
        <td style="padding:0px;
                   background-image:url('AmuntEsquerra.gif');
                background-position:left top;
                background-repeat:no-repeat;">               
            <table>
            <tr><td>

                 <!--Aquí va el contingut -->

            </td></tr>
            </table>
        </td>

        <td style="padding:0px;
                   background-image:url('AmuntDreta.gif');
                   background-position:left top;
                   background-repeat:no-repeat;"
            width="10px">
        </td>
    </tr>

    <tr>
        <td style="padding:0px;
                   background-image:url('AvallEsquerra.gif'); 
                   background-position:left top;
                   background-repeat:no-repeat;"
            height="10px">
        </td>

        <td style="padding:0px;
                   background-image:url('AvallDreta.gif'); 
                   background-position:left top;
                   background-repeat:no-repeat;"
            height="10px"
            width="10px">
        </td>
    </tr>
</table>

Com han de ser els gifs dels backgrounds?

AvallDreta.gif: el més petit de tots, la cantonada inferior-dreta.



AvallEsquerra.gif: la cantonada inferior esquerra i l'aresta inferior de la caixa.




AmuntDreta.gif: la cantonada superior dreta i l'aresta de la dreta



AmuntEsquerra.gif: ens proporciona el fons de la cel·la útil per mostrar informació. La resta de cel·les només tenen la missió de mostrar les cantonades rodones, és dir, només seran tan amples o altes com ho siguin la corba de la cantonada a mostrar.



Ara tenen sentit els valors de l'HTML, oi? El bo del cas és que el tamany de la caixa d'adaptarà al contingut de la cel·la TD superior esquerra. Cal tenir, doncs, la previsió de dimensionar el tamany dels gifs de backgrounds per a que siguin suficients per a les dades a mostrar.

Com fer que una capa "floti" sobre un flash? / 14 juny 2010

Com fer que una capa "floti" sobre un flash?

Si superposem una capa HTML sobre un flash resultarà que veurem com la capa queda oculta pel flash. La capa está "a sota". Aleshores, per conseguir l'efecte de que la capa "floti" sobre el flash cal fer el flash "transparent". Diguem que cal que deixi veure el que "té a sota". L'efecte que s'aconsegueix és justament que que la capa está flotant "sobre" el flash.
N'hi ha prou amb afegir el paràmetre wmode al tag object (ressaltat en groc), com es mostra en el codi d'exemple.
<object
classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0"
id="bannerflash"
width="600" height="400">
<param name="movie" value="el-meu-flash.swf" />
<param name="quality" value="high" />
<param name="wmode" value="transparent" />
<embed
src="el-meu-flash.swf"
quality="high"
width="600" height="400"
type="application/x-shockwave-flash"
wmode="transparent"
pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">
</embed>
</object>