Maquetación
Introducción
El presente documento tiene como propósito brindar lineamientos y buenas prácticas de maquetado web para ser implementados dentro de los sitios y aplicaciones de YPF S.A.
Sobre la estructura de carpetas
Para una mejor organización de los sitios se debe respetar una estructura determinada de carpetas.
En la raíz principal se ubicarán todas las páginas y las carpetas de CSS, documents, images, js, videos, etc.
En las carpetas de documents, images, videos,etc se crearán sub carpetas por página (carpetas contenedoras) para ubicar el contenido que corresponda a esa página. Para contenidos generales como logos, iconos que se usen en varias páginas, etc. colocarlos en la raíz de la carpeta contenedora.

Sobre la estructura html
La estructura básica de las páginas debe ser similar a la siguiente:

Maquetado
Para que las páginas sean gestionadas en YLITE, las maquetas deben ser HTML plano, es decir, evitar la generación de código o contenido mediante JavaScript
- Declarar el DOCTYPE
<!html>
- Declarar el lenguaje
<lang="es">
- Declarar la codificación de caracteres
<charset="UTF-8">
- Declarar la etiqueta title
<
>Título que describa el tema o propósito de la página< > - Incluir un Favicon dentro de la etiqueta
<head>
,<rel="shortcut icon" href="img/favicon.png" >
- Todas las páginas deben tener en su comienzo un link (visible o no) que apunte al main, cuya descripción sea “Saltar al contenido principal”
- Usar minúsculas en los nombres de etiquetas, atributos y valores.
- Usar un indentado consistente.
<--Indentado correcto--> < > < > < > Lorem ipsum dolor,Ducimus, alias!</ > </ > </ >
<--Indentado incorrecto--> < > < > < > Lorem ipsum dolor,Ducimus, alias!</ > </ > </ >
- Usar etiquetas semánticas nativas de HTML5 y envitar el uso de divs como
reemplazo de las mismas.
<--Etiquetado semántico correcto--> < class="componente-banner"> < > Lorem ipsum dolor < > < > Lorem ipsum dolor, Ducimus, alias! < > </ >
<--Etiquetado semántico incorrecto--> < class="seccion-componente-banner"> < class="titulo-principal">Lorem ipsum dolor < > < class="descripcion-banner">Lorem ipsum dolor, Ducimus, alias! < > </ >
- Cerrar las etiquetas correctamente, en el mismo orden en que se abrieron.
<--Cierre correcto de etiquetas--> < class="componente-banner"> < > Lorem ipsum dolor < > < > Lorem ipsum dolor, Ducimus, alias! < > </ >
<--Cierre incorrecto de etiquetas--> < class="componente-banner"> < > Lorem ipsum dolor < > Lorem ipsum dolor, Ducimus, alias! > < >
- No usar estilos en línea. Presentar las modificaciones de estilos a través de CSS asignándole una clase a las etiquetas.
- Utilizar comillas dobles tanto en la hoja CSS como en el HTML
- Individualizar cada sección, componente con comentarios.
<--Banner Principal--> < class="componente-banner"> < >Lorem ipsum dolor < > < >Lorem ipsum dolor, Ducimus, alias! < > < >
Hojas de estilo CSS
Con el fin de que las hojas de estilo queden estandarizadas,se solicita tener en cuenta los siguientes puntos:
- Al indentar código utilizar tabulaciones.
- Finalizar cada línea con un punto y coma y revisar que no queden espacios en blanco sobrantes al final.
- Sí se utilizan varios selectores para las mismas declaraciones de estilos, escribir cada selector, o cadena de selectores, en diferentes líneas para mejorar la lectura:
- Dejar solo un espacio antes de la apertura del corchete, ubicando los mismos
de la siguiente forma:
/* Correcto */ .selector { padding: 14px 10px; } /* Incorrecto */ .selector{padding: 14px 10px;} .selector { padding: 14px 10px; }
- Para el nombramiento de las clases, evitar todo tipo de caracteres
especiales (acentos, comas, llaves, etc.) y no incluir caracteres en
mayúscula.
Los nombres de las clases que requieran 2 o más palabras, deberán estar
separados por - (guiones medios).
<--Nombre de clases correctos--> < class="seccion-banner"> ... </ >
<--Nombre de clases incorrectos--> < class="Sección,_banner"> ... </ >
- Dejar solo un espacio luego de los dos puntos en cada declaración.
- Utilizar comillas dobles tanto en la hoja CSS como en el HTML.
- Cuando se trabaje sobre una hoja que le da estilos a varias páginas o
componentes, individualizar cada uno de la siguiente forma:
/********************************************************* *********** Nombre de pagina o componente a estilar ************ **********************************************************/
- Cuando se deba hacer algún comentario dentro de estas secciones hacerlo de
la siguiente forma:
/* Fix para el menu principal por motivo XXX */
- Agregar los comentarios siempre arriba de las líneas, no al final de las mismas.
Optimización de imagenes
Una incorrecta optimización del contenido gráfico nos da como resultado páginas más lentas y pesadas que generan una mala experiencia para el usuario, así como también un porcentaje muy alto de rebote y perdida de los mismos.
Para la correcta optimización de las imágenes tener en cuenta los siguientes puntos:
- Tipo de archivo: Usar archivos JPG, PNG, WEBP, SVG, GIF
- Resolución: Usar imágenes con resoluciones a 72 dpi
- Dimensión: Usar la dimensión correcta para el contenedor donde va a estar la imagen. Por ejemplo, si sabemos que el contenedor va a tener un ancho máximo de 500 px, no usar una imagen de 1200px de ancho.
- Nombre del archivo: El nombre tiene que ser relevante
respecto
al tema que se está tratando en el contenido redactado:
- Evitar nombres como: 6708.jpg, imagen-1.jpg, whatsapp-img-dsdf.jpg.
- No usar tildes o caracteres especiales.
- Separa las palabras con guiones.
- Tiene que ser descriptivo y conciso.
- Evitar palabras como "del, el" solo palabras claves.
- Texto alternativo: Añadir texto alternativo a las imágenes
es
una de las primeras reglas del SEO de imágenes y también es un principio
clave
de la accesibilidad web.
La alternativa textual debe describir el aspecto y la función de la imagen en la página. Si la imagen no llega a ser relevante y es meramente decorativa, igualmente hay que agregar siempre el atributo alt=”” en el código html.
Librería de terceros
- Las librerías de terceros no tienen que estar editadas. Por ejemplo, Jquery, Bootstrap, etc.
- De llegar a modificar librerías , editarlas en un archivo separado.
- Deben ser locales y no usar CDN externos.
Accesibilidad
Todos los sitios y plataformas de YPF están alcanzados por la Disposición ONTI N°6/2019 que establece que el nivel mínimo de conformidad a ser cumplimentado por las organizaciones alcanzadas por la Ley N° 26.653 deberá ser de veinte (20) criterios para el primer año de vigencia de esta disposición y de treinta (30) criterios para períodos subsiguientes. A tales efectos se debe considerar como total los treinta y ocho (38) criterios de conformidad referidos en el ANEXO II que integra la presente Disposición.
Se recomienda realizar testeos manuales, las herramientas o aplicaciones de testeos automáticos ( ver sugeridas ) tienen limitantes en varios criterios del análisis. Las mismas analizan puramente el código y no pueden hacer una devolución, por ejemplo, si el usuario puede navegar con el teclado y llegar a todos los links de la página, si los elementos enfocables tienen un foco visible, si los textos alternativos son los adecuados, etc. por lo tanto, se recomiendan usarlas de apoyo en el análisis.
Ver sección de accesibilidadComponentes
YPF-header
Este componente web ypf-header, es un elemento HTML personalizado que representa un encabezado con navegación para el sitio web de YPF. Está diseñado para ser altamente personalizable y proporciona un encabezado fijo con varias secciones, botones y enlaces.
Uso
Para utilizar el componente web ypf-header, simplemente incluye el link:
https://lineamientos.ypf.com/js/ypf-header-webComponent.js
en tu proyecto e impórtalo en tu archivo HTML:

Conclusión
El componente web ypf-header es un poderoso encabezado personalizable para el sitio web de YPF. Ofrece una experiencia de usuario fluida con transiciones suaves y un diseño receptivo. Para ejecutar el componente web en local, levanta tu solución sobre el puerto 8080 || 5500 con esto podras ver el componente web en acción.
Solicitud de API GraphQL utilizando JavaScript
En resumen, este código realiza una solicitud a una API GraphQL utilizando la función fetch, pasando una consulta GraphQL como datos en formato JSON. Luego, procesa la respuesta y extrae los resultados de la consulta para utilizarlos en el resto del código.

El código JSON proporcionado describe la estructura de un encabezado de navegación que consta de elementos como "secciones" y "grupos" con sus respectivos enlaces y propiedades de estilo. Cada elemento tiene un "tipo" específico que indica si es una sección, grupo o enlace.
A continuación, una breve explicación de la estructura del header:
- El header está representado por un array con la clave "items".
- Cada elemento del array representa una sección del header y tiene
las
siguientes propiedades:
- "title": El título de la sección.
- "data": Un array que contiene los elementos del grupo, cada uno representado por un objeto con sus propiedades.
- Los elementos del grupo tienen las siguientes propiedades:
- "text": El texto del enlace o grupo.
- "props": Un objeto que contiene las propiedades del enlace.
- "type": El tipo del elemento, que puede ser "seccion", "grupo" o "link".
- "children": Un array que puede contener elementos hijos dentro del grupo.
El JSON describe un enxabezado jerárquico con secciones y grupos anidados, y cada grupo contiene enlaces con sus respectivas URLs y propiedades de estilo.
YPF-footer
Este componente web ypf-footer es un elemento HTML personalizado que representa un pie de pagina con navegación para el sitio web de YPF. Está diseñado para ser altamente personalizable y proporciona un pie de pagina fijo con '/arias secciones, botones y enlaces.
Uso
Para utilizar el componente web ypf-footer, simplemente incluye el link:
https://lineamientos.ypf.com/js/ypf-footer-webComponent.js
en tu proyecto e impórtalo en tu archivo HTML:

Conclusión
El componente web ypf-footer es un poderoso pie de página personafizable para el sitio web de YPF. Ofrece una experiencia de usuario fluida con transiciones suaves y un diseño receptivo. Para ejecutar el componente web en local, levanta tu solución sobre ei puerto 8080 j| 5500 con esto podres ver el componente web en acción.
Solicitud de API GraphQL utilizando JavaScript
En resumen, este código realiza una solicitud a una APJ GraphQL utilizando la función fetch, pasando una consulta GraphQL como datos en formato JSON. Luego, procesa la respuesta y extrae los resultados de la consulta para utilizarlos en el resto del código.

El código JSON proporcionado describe la estructura de un footer de navegación que consta de elementos como "secciones' y "grupos' con sus respectivos enlaces y propiedades de estilo.
A continuación, una breve explicación de la estructura del footer:
- El footer está representado por un array con la clave "items".
- Cada elemento del array representa una sección del footer y tiene las
siguientes propiedades:
- "title": El título de la sección.
- "data": Un array que contiene los elementos del grupo, cada uno representado por un objeto con sus propiedades.
- Los elementos del grupo tienen las siguientes propiedades:
- "text": El texto del enlace o grupo.
- "props": Un objeto que contiene las propiedades del enlace.
- "type": El tipo del elemento, que puede ser "seccion", "grupo" o "link".
- "children": Un array que puede contener elementos hijos dentro del grupo.
El JSON describe un pie de pagina jerárquico con secciones y grupos anidados, y cada grupo contiene enlaces con sus respectivas URLs y propiedades de estilo.
Testeos y pruebas
Navegadores
Debido a que el maquetado de los sitios debe ser responsivo, solicitamos su testeo en los siguientes navegadores y dispositivos:
Desktop
- IE Edge
- Chrome
- Firefox
- Safari
Móviles
- Android 4.4 o menor con browser default del SO
- Android mayor a 4.4 con browser Chrome
- iOS
Dispositivos móviles
Realizar prueba de optimización para móviles en mobile friendly google
W3C
Validar las páginas en la W3C con el validator.w3.org
Accesibilidad
Sugerimos realizar testeos manuales para abordar los criterios que el análisis automático no llega tomar.
Herramientas de testeo recomendadas:
- Axe DevTools
- WAVE
- Validador de la ONTI (usuario: onti y password: accesibilidad)