lunes, 29 de abril de 2013

Tips HTML5 – Control slider

Este es un control es formulario, es un control de tipo gráfico, es en realidad un subtipo del control input, y nos permite crear un slider, que no es mas que un control deslizante, similar a un control de volumen, el cual nos permite seleccionar un valor dentro de un rango definido.

Su uso es realmente sencillo y es de mucha utilidad.
<input type="range" id="puntaje" min="1" max="10"/>
Para usar este control, debemos definir el input de tipo range, y cuenta con los siguientes atributos:
  • min = define el valor mínimo que puede ser seleccionado.
  • max = define el valor máximo que puede ser seleccionado.
  • step = define el paso, o valor del intervalo.
  • value = indica el valor por defecto que tendrá el control.
Tristemente aun no esta soportado en Firefox que es mi navegador preferido, así que dejo una captura de como se ve en Opera.

Slider

viernes, 26 de abril de 2013

Lectura recomendada – Fundamentos de JQuery de Rebecca Murphey en español

libro-jquery

Para aquellos que quieran empezar con JQuery, hoy les traigo una lectura recomendada, su autora goza de gran reconocimiento en el área de desarrollo web, y no cabe duda que el material es de gran calidad, y sobre todo, completamente libre.

Originalmente fue publicado en ingles, y esta disponible acá, debido a la buena acogida que esta iniciativa tuvo, Leandro D'Onofrio se dio a la tarea de traducir el libro, el cual se encuentra disponible en www.librojquery.com, también lo pueden obtener junto con las fuentes de los ejemplos en la pagina de GitHub del proyecto, o acá directamente.

Tengan en cuenta que es un proyecto que aun esta activo y se esta actualizando con frecuencia, por lo tanto es recomendable darse una vuelta por su sitio con alguna frecuencia en busca de actualizaciones.

lunes, 22 de abril de 2013

Tips HTML5 – Control Calendario

Una de las novedades incluidas en HTML5 a sido una amplia variedad de controles de tipo gráfico, en este momento vamos a ver como usar el nuevo control calendario incluido en HTML5.

Este es básicamente un subtipo derivado del control input, y su uso es realmente sencillo.
<input type="date" id="cumpleanos" name="cumpleanos"/>
Como se puede observar es muy fácil de usar, desafortunadamente a la fecha aun no esta soportado por todos los navegadores, así que para facilitar las cosas adjunto una imagen de como se muestra el control en Chrome.

TestCalendario

Por otra parte, existen otros tipos de calendarios, los cuales nos permiten seleccionar la fecha y hora, semanas enteras y meses enteros, lo que en realidad me parece genial.

En el caso de fecha y hora cambiamos el tipo a datetime y listo:
<input type="datetime" id="citamedica" name="citamedica"/>
Este control luce así en Opera.

TestCalendarioDateTime

Si queremos seleccionar semanas completas solo cambiamos el tipo a week y listo.
<input type="week" id="vacaciones" name="vacaciones"/>
Este control luce así en Opera
TestCalendarioWeek

Y por ultimo los meses, para este caso cambiamos el tipo por month y ya podremos seleccionar mese completos.
<input type="month" id="capacitacion" name="capacitacion"/>
Este control luce así en Opera

TestCalendarioMonth

Como pueden ver son de gran utilidad y muy fáciles de usar, ahora con un poco de CSS de seguro que se logra una gran apariencia.

jueves, 18 de abril de 2013

Tips CSS3 – Colores predeterminados

Como bien sabemos cada nueva versión de CSS trae consigo grandes mejoras, en este caso vamos a hablar acerca del soporte de colores, y es que en la nueva versión se soportan 147 colores de forma predeterminada, lo que sin duda alguna es de gran ayuda para todos.

A continuación dejo la tabla con dichos colores, tomada de la definición de la W3C. Si desean profundizar mas sobre el modulo de colores y las mejoras que incluye pueden revisar la especificación.

Named Numeric Color name Hex rgb Decimal
    aliceblue #f0f8ff 240,248,255
    antiquewhite #faebd7 250,235,215
    aqua #00ffff 0,255,255
    aquamarine #7fffd4 127,255,212
    azure #f0ffff 240,255,255
    beige #f5f5dc 245,245,220
    bisque #ffe4c4 255,228,196
    black #000000 0,0,0
    blanchedalmond #ffebcd 255,235,205
    blue #0000ff 0,0,255
    blueviolet #8a2be2 138,43,226
    brown #a52a2a 165,42,42
    burlywood #deb887 222,184,135
    cadetblue #5f9ea0 95,158,160
    chartreuse #7fff00 127,255,0
    chocolate #d2691e 210,105,30
    coral #ff7f50 255,127,80
    cornflowerblue #6495ed 100,149,237
    cornsilk #fff8dc 255,248,220
    crimson #dc143c 220,20,60
    cyan #00ffff 0,255,255
    darkblue #00008b 0,0,139
    darkcyan #008b8b 0,139,139
    darkgoldenrod #b8860b 184,134,11
    darkgray #a9a9a9 169,169,169
    darkgreen #006400 0,100,0
    darkgrey #a9a9a9 169,169,169
    darkkhaki #bdb76b 189,183,107
    darkmagenta #8b008b 139,0,139
    darkolivegreen #556b2f 85,107,47
    darkorange #ff8c00 255,140,0
    darkorchid #9932cc 153,50,204
    darkred #8b0000 139,0,0
    darksalmon #e9967a 233,150,122
    darkseagreen #8fbc8f 143,188,143
    darkslateblue #483d8b 72,61,139
    darkslategray #2f4f4f 47,79,79
    darkslategrey #2f4f4f 47,79,79
    darkturquoise #00ced1 0,206,209
    darkviolet #9400d3 148,0,211
    deeppink #ff1493 255,20,147
    deepskyblue #00bfff 0,191,255
    dimgray #696969 105,105,105
    dimgrey #696969 105,105,105
    dodgerblue #1e90ff 30,144,255
    firebrick #b22222 178,34,34
    floralwhite #fffaf0 255,250,240
    forestgreen #228b22 34,139,34
    fuchsia #ff00ff 255,0,255
    gainsboro #dcdcdc 220,220,220
    ghostwhite #f8f8ff 248,248,255
    gold #ffd700 255,215,0
    goldenrod #daa520 218,165,32
    gray #808080 128,128,128
    green #008000 0,128,0
    greenyellow #adff2f 173,255,47
    grey #808080 128,128,128
    honeydew #f0fff0 240,255,240
    hotpink #ff69b4 255,105,180
    indianred #cd5c5c 205,92,92
    indigo #4b0082 75,0,130
    ivory #fffff0 255,255,240
    khaki #f0e68c 240,230,140
    lavender #e6e6fa 230,230,250
    lavenderblush #fff0f5 255,240,245
    lawngreen #7cfc00 124,252,0
    lemonchiffon #fffacd 255,250,205
    lightblue #add8e6 173,216,230
    lightcoral #f08080 240,128,128
    lightcyan #e0ffff 224,255,255
    lightgoldenrodyellow #fafad2 250,250,210
    lightgray #d3d3d3 211,211,211
    lightgreen #90ee90 144,238,144
    lightgrey #d3d3d3 211,211,211
    lightpink #ffb6c1 255,182,193
    lightsalmon #ffa07a 255,160,122
    lightseagreen #20b2aa 32,178,170
    lightskyblue #87cefa 135,206,250
    lightslategray #778899 119,136,153
    lightslategrey #778899 119,136,153
    lightsteelblue #b0c4de 176,196,222
    lightyellow #ffffe0 255,255,224
    lime #00ff00 0,255,0
    limegreen #32cd32 50,205,50
    linen #faf0e6 250,240,230
    magenta #ff00ff 255,0,255
    maroon #800000 128,0,0
    mediumaquamarine #66cdaa 102,205,170
    mediumblue #0000cd 0,0,205
    mediumorchid #ba55d3 186,85,211
    mediumpurple #9370db 147,112,219
    mediumseagreen #3cb371 60,179,113
    mediumslateblue #7b68ee 123,104,238
    mediumspringgreen #00fa9a 0,250,154
    mediumturquoise #48d1cc 72,209,204
    mediumvioletred #c71585 199,21,133
    midnightblue #191970 25,25,112
    mintcream #f5fffa 245,255,250
    mistyrose #ffe4e1 255,228,225
    moccasin #ffe4b5 255,228,181
    navajowhite #ffdead 255,222,173
    navy #000080 0,0,128
    oldlace #fdf5e6 253,245,230
    olive #808000 128,128,0
    olivedrab #6b8e23 107,142,35
    orange #ffa500 255,165,0
    orangered #ff4500 255,69,0
    orchid #da70d6 218,112,214
    palegoldenrod #eee8aa 238,232,170
    palegreen #98fb98 152,251,152
    paleturquoise #afeeee 175,238,238
    palevioletred #db7093 219,112,147
    papayawhip #ffefd5 255,239,213
    peachpuff #ffdab9 255,218,185
    peru #cd853f 205,133,63
    pink #ffc0cb 255,192,203
    plum #dda0dd 221,160,221
    powderblue #b0e0e6 176,224,230
    purple #800080 128,0,128
    red #ff0000 255,0,0
    rosybrown #bc8f8f 188,143,143
    royalblue #4169e1 65,105,225
    saddlebrown #8b4513 139,69,19
    salmon #fa8072 250,128,114
    sandybrown #f4a460 244,164,96
    seagreen #2e8b57 46,139,87
    seashell #fff5ee 255,245,238
    sienna #a0522d 160,82,45
    silver #c0c0c0 192,192,192
    skyblue #87ceeb 135,206,235
    slateblue #6a5acd 106,90,205
    slategray #708090 112,128,144
    slategrey #708090 112,128,144
    snow #fffafa 255,250,250
    springgreen #00ff7f 0,255,127
    steelblue #4682b4 70,130,180
    tan #d2b48c 210,180,140
    teal #008080 0,128,128
    thistle #d8bfd8 216,191,216
    tomato #ff6347 255,99,71
    turquoise #40e0d0 64,224,208
    violet #ee82ee 238,130,238
    wheat #f5deb3 245,222,179
    white #ffffff 255,255,255
    whitesmoke #f5f5f5 245,245,245
    yellow #ffff00 255,255,0
    yellowgreen #9acd32 154,205,50

lunes, 15 de abril de 2013

Tips CSS3 – Pseudo clase Required, Valid, Invalid, Optional

Como muchos saben, una de las novedades presentes en HTML5 es el soporte de validación de controles de formulario sin la necesidad de JavaScript.

De esta forma, cuando se envía la información contenida en el formulario, el navegador valida los campos y retorna un error si se encuentra alguna incongruencia en la información introducida, todo esto sucede de forma automática.

Estas funciones de validación se activan cuando se define el atributo required en los controles del formulario.

En CSS3 contamos con unas pseudo clases asociadas a los controles de formulario, que nos van a permitir definir el estilo que tendrán los controles en lo que a la validación refiere.

Pseudo clase Required

Esta pseudo clase nos permite definir el estilo para el control de formulario cuando es obligatorio ingresar un dato.
[required]{
  border-color: green;
  box-shadow: 0px 0px 5px green;
}

Pseudo clase Valid

Con esta pseudo clase definimos el estilo del control cuando su contenido es valido, en realidad no es muy usado pero no esta de mas saber sobre su uso.
:valid{
  border-color: blue;
}

Pseudo clase Invalid

Usaremos esta pseudo clase para definir el estilo del control cuando los datos que se han introducidos son inválidos.
:invalid{
  border-color: red;
  box-shadow: 0px 0px 5px red;
}

Pseudo clase Optional

A diferencia del las anteriores, esta pseudo clase se aplica a los elementos input cuando el atributo required no ha sido definido, es decir cuando los controles no son obligatorios. Al igual que la pseudo clase Valid, no es muy usado pero no esta de mas saber como usarlo.
:optional{
  border-color: yellow;
}

jueves, 11 de abril de 2013

Tips HTML5 – Etiqueta SVG

Esta es una etiqueta nueva en HTML5, y nos permite introducir gráficos de vectoriales en un documento web de forma nativa.

Como bien sabemos, SVG es un lenguaje para descripción de gráficos en 2D usando XML, lo que significa que cada elemento esta disponible dentro del SVG DOM, y al mismo tiempo permite incluir eventos JavaScript dentro de estos elementos.

En SVG cada figura dibujada es considerada un objeto, de modo que si se cambian loa atributos de un objeto, el navegador esta en capacidad de dibujar automáticamente toda la figura.

Una de las grandes ventajas que SVG trae consigo, es la independencia de la resolución, esto significa que si se amplia la imagen, la calidad de esta no se deteriora, pues en realidad se esta dibujando completamente teniendo en cuenta las nuevas condiciones, cosa que no sucede con las imágenes de formatos como por ejemplo jpg, las cuales al ampliarlas se pixelaran.

Su principal desventaja es que cuando el grafico SVG es muy complejo el renderizado de este se tornara lento, básicamente porque cualquier cosa que use demasiado el DOM tendrá problemas de rendimiento.

El uso de esta etiqueta es relativamente sencillo, tal como vemos a continuación:
<svg xmlns="http://www.w3.org/2000/svg">
    ...    
</svg>
Como pueden ver, básicamente solo necesita especificar el espacio de nombres que corresponde a la especificación SVG y listo, partiendo de este punto veamos algunos ejemplos del uso de esta etiqueta con algunas figuras básicas.

Crear un Circulo
<svg id="circulo" height="200" xmlns="http://www.w3.org/2000/svg">
    <circle id="circuloRojo" cx="50" cy="50" r="50" fill="red" />
</svg>
Crear un circulo es muy sencillo, para ello hacemos uso de la etiqueta circle, esta tiene los siguientes atributos:
  • cx = centro en el eje x, medido en pixeles.
  • cy = centro en el eje y, medido en pixeles.
  • r = radio del circulo, medido en pixeles.
  • fill = color de relleno.
Crear un rectángulo
<svg id="rectangulo" height="200" xmlns="http://www.w3.org/2000/svg">
    <rect id="rectanguloAzul" width="200" height="100" fill="blue" />
</svg>
Para crear un rectángulo hacemos uso de la etiqueta rect, esta tiene los siguientes atributos:
  • width = ancho del elemento en pixeles.
  • height = altura del elemento en pixeles.
  • fill = color de relleno del elemento.
Crear una elipse
<svg id="elipse" height="200" xmlns="http://www.w3.org/2000/svg">
    <ellipse id="elipseRoja" cx="100" cy="50" rx="100" ry="50" fill="red" />
</svg>
Para este caso, hacemos uso de la etiqueta ellipse, la cual tiene los siguientes atributos:
  • cx = centro en el eje x, medido en pixeles.
  • cy = centro en el eje y, medido en pixeles.
  • rx = radio en el eje x, medido en pixeles
  • ry = radio en el eje y, medido en pixeles.
  • fill = color de relleno del elemento.
Crear un polígono
<svg id="poligono" height="200" xmlns="http://www.w3.org/2000/svg">
    <polygon id="poligonoAmarillo" points="20,10 200,20, 150,50" fill="#ffff21" />
</svg>
Para crear un polígono, hacemos uso de la etiqueta polygon, la cual tiene los siguientes atributos:
  • points = corresponde a la lista de puntos (coordenadas x e y) que conforman los extremos del polígono.
  • fill = color de relleno del elemento.
Crear líneas rectas
<svg id="linea" height="200" xmlns="http://www.w3.org/2000/svg">
    <line id ="lineaNegra" x1="0" y1="0" x2="200" y2="100" style="stroke:black;stroke-width:2"/>
</svg>
Crear una línea rectas es realmente sencillo, para ello hacemos uso de la etiqueta line, la cual cuenta con los siguientes atributos:
  • x1 = punto inicial en el eje x, en pixeles.
  • y1 = punto inicial en el eje y, en pixeles.
  • x2 = punto final en el eje x, en pixeles.
  • y2 = punto final en el eje y, en pixeles.
  • style = estilo del elemento.
Crear gradientes a un elemento
<svg id="gradientes" height="200" xmlns="http://www.w3.org/2000/svg">
   <defs>
      <radialGradient id="gradient" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
          <stop offset="0%" style="stop-color:rgb(200,200,200); stop-opacity:0"/>
          <stop offset="100%" style="stop-color:rgb(0,0,255); stop-opacity:1"/>
      </radialGradient>
   </defs>
   <ellipse id="elipseGradiente" cx="100" cy="50" rx="100" ry="50" style="fill:url(#gradient)"/>
</svg>
Es posible definir gradientes a un elemento, para ello es necesario que se define la gradiente a aplicar en el atributo style del elemento, como vemos en el ejemplo.

La etiqueta defs no permite agrupar el código que tiene como fin definir algún tipo de característica de los elementos, el código que esta dentro de estas etiquetas no es mostrado en el navegador.

En nuestro caso particular, definimos las características de la gradiente enmarcando los pasos dentro de la etiqueta radialGradient, la cual tiene el id que usamos en el estilo definido en el elemento al que afecta.

Insertar imágenes vectoriales en HTML mediante el lenguaje SVG

Por medio de los ejemplos anteriores hemos podido ver los sencillo que es crear figuras por medio del lenguaje SVG, pero también es posible tomar una imagen definida en formato vectorial e incrustarla en nuestro documento.

Como ejemplo usare el siguiente logo:

LogoUnderground

Como pueden ver, lo he realizado usando Inkscape, que es una herramienta libre para la creación de gráficos vectoriales. una vez terminado el logo, lo guardo en formato SVG plano, el cual voy a abrir usando Notepad++.

svgNotepad

Ahora podemos ver nuestro logo definido en el lenguaje SVG, ahora podemos tomar la información contenida en este archivo y ponerla en nuestro documento HTML.
<svg id="LogoUnderground" xmlns:svg="http://www.w3.org/2000/svg" viewBox="0 0 200 200">
  <defs
     id="defs4" />
  <metadata
     id="metadata7">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
        <dc:title></dc:title>
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     id="layer4"
     style="display:inline">
    <g
       id="g3823">
      <path
         d="m 359.64285,348.125 c -80.047,0 -144.9375,64.8905 -144.9375,144.9375 0,80.047 64.8905,144.9375 144.9375,144.9375 80.047,0 144.9375,-64.8905 144.9375,-144.9375 0,-80.047 -64.8905,-144.9375 -144.9375,-144.9375 z m -0.375,52.0625 c 51.49101,0 93.25,41.43473 93.25,92.53125 0,51.09652 -41.75899,92.53125 -93.25,92.53125 -51.49101,0 -93.21875,-41.43473 -93.21875,-92.53125 0,-51.09652 41.72774,-92.53125 93.21875,-92.53125 z"
         id="path3006"
         style="fill:#ff0000;fill-rule:evenodd;stroke:none;display:inline" />
      <rect
         width="353.57141"
         height="59.285713"
         x="182.85715"
         y="463.41965"
         id="rect3794"
         style="fill:#0036fb;fill-opacity:1;stroke:none" />
      <text
         x="359.21317"
         y="507.37894"
         id="text3796"
         xml:space="preserve"
         style="font-size:40px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:center;line-height:120.00000477%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;font-family:Arial;-inkscape-font-specification:Arial Bold"><tspan
           x="359.21317"
           y="507.37894"
           id="tspan3821">UNDERGROUND</tspan></text>
    </g>
  </g>
</svg>
De esta manera podemos incluir las imágenes vectoriales en nuestro documento HTML, queda claro que no es del todo una buena practica, pues como sabemos no ayuda mucho a los temas de mantenibilidad.