juanpowerplanet / store-framework

https://lab.github.com/vtex-trainings/store-framework
0 stars 0 forks source link

CSS Handles and the power of customizing blocks #6

Open github-learning-lab[bot] opened 4 years ago

github-learning-lab[bot] commented 4 years ago

CSS Handles y el poder de la personalización de bloques

:sparkles: Branch: csshandles

Introducción

Si echa un vistazo a su tienda actual, podrá ver que todos los componentes tienen estilos parecidos, incluso si usted no ha realizado ninguna personalización.

Todos estos, incluyendo el Info Card recién configurado, comparten valores preestablecidos para fuente, color de fondo, color principal, formato de los botones, etc.

Esto se debe al style.json, archivo responsable de declarar valores genéricos de personalización para toda tienda del Store Framework.

style

Para crear una identidad propia para los componentes de su tienda, puede sobrescribir estos valores a través de personalizaciones de CSS.

Analizando el recipe para personalizaciones de tienda por CSS, percibimos que serán necesarios algunos pasos para aplicar el estilo propio que usted desea, como:

  1. Cree un nuevo archivo dentro de la carpeta CSS con el nombre vtex.{AppName}.css.
  2. Utilice el CSS Handle del componente que se personalizará dentro de este archivo siguiendo el formato a continuación:
.{CSSHandle} {
    {PropriedadeDeCSS}: {ValorDesejado};
    {PropriedadeDeCSS}: {ValorDesejado};
}
  1. En ausencia de CSS Handles, aplicar CSS Selectors permitidos, como es el caso de :global(vtex-{componentName}).
  2. Para aplicar CSS en un bloque específico y no a todos los bloques de aquel tipo, se utiliza el recurso de blockClass, que aparece junto a los handles de css al inspeccionar el código. Los blockClass deben ser declarados como una prop en el bloque en cuestión, y luego hacer referencia en el archivo de estilo como se muestra a continuación:
.{CSSHandle}--{blockClass} {
    {PropriedadeDeCSS}: {ValorDesejado};
    {PropriedadeDeCSS}: {ValorDesejado};
}

Personalizando el Info Card

Para descubrir los CSS Handles de un componente, como el Info Card, basta con acceder a la sección Customization de su documentación.

De acuerdo con la descripción de CSS Handles y con el recipe de personalizaciones de tienda por CSS, pudimos implementar un ejemplo de Info Card personalizado, cambiando su título y la configuración del botón call to action al agregar el siguiente código al archivo vtex.store-components.css dentro de /styles/css:

.infoCardHeadline {
    font-family: serif;
    font-size: 2.25rem;
    font-weight: normal;
    color: gray;
    border: 2px solid black;
    padding: 24px;
}

.infoCardCallActionContainer :global(.vtex-button) {
    color: white;
    background-color: gray;
    border: transparent;
}

.infoCardCallActionContainer :global(.vtex-button):hover {
    color: gray;
    background-color: blue;
    border: transparent;
}

Puedes comprobar el efecto de los cambios realizados ejecutando el comando vtex link.

image

En seguida, añadiremos un estilo específico al info card Vintage. Para empezar, agregue la prop blockClass en el info-card#button-right como se muestra a continuación:

"info-card#button-right": {
  "props": {
    "isFullModeStyle": false,
    "textPosition": "right",
    "imageUrl": "https://appliancetheme.vteximg.com.br/arquivos/cozinha-rosa-min.png",
    "headline": "Vintage Pink",
    "subhead": "Give your kitchen a boho style adding vintage apparels.<br>Available until January 2020.",
    "callToActionMode": "button",
    "callToActionText": "Explore",
    "callToActionUrl": "/sale/d",
    "textAlignment": "center",
    "blockClass": "vintage"     //  <------------
  }
}

Y entonces declare un background-color para este info card específico en su archivo de css:

.infoCardContainer--vintage {
  background-color: #EDCFD1
}

Observe el efecto alcanzado al enlazar su app.

image

Actividad

  1. En el archivo vtex.store-components.css, copie el código anterior para usarlo en el archivo CSS de su tema, siguiendo el recipe sobre personalizaciones de tienda por CSS.
  2. Basado en los Handles del Info Card, defina el ancho máximo (max-width) de todos los info cards en 1260px, el margin en 0 auto y el padding en 0.
  3. Cambie el color del título del componente a black .
  4. Coloque el título en negrita (bold) .
  5. Cambie el color de fondo del botón durante el hover a white .
  6. Paralelamente al blockClass vintage, aplique un nuevo block class llamado metal en el info card info-card#button-left y aplique el color de fondo de #e1e1e1 en este.

image


:no_entry_sign: ¿Perdido?

¿Hay algún problema con este paso? ¿Qué tal si nos envía un feedback? :pray:

Crear feedback


Si aún tiene alguna duda sobre cómo enviar su respuesta, puede revisar aquí.

vtex-course-hub[bot] commented 4 years ago

Oopsie, something went wrong :crying_cat_face:

Results

:x::white_check_mark::x::x::x::x::x::x::x::x::x::x::x::x::x::x::x::x:

Tests

:x: Couldn't find the correct css file on your styles folder. Check your css file's name. :white_check_mark: First test - Code compilation :x: You haven't declared .infoCardContainer classes for the image :x: Cannot convert undefined or null to object :x: Cannot read property '1' of undefined :x: You haven't declared .infoCardHeadline classes for the text :x: Cannot convert undefined or null to object :x: Cannot read property '1' of undefined :x: You haven't declared .infoCardCallActionContainer :global(.vtex-button) classes for the button :x: Cannot convert undefined or null to object :x: You haven't declared [object Object] classes and blockClass :x: Cannot read property '1' of undefined :x: You haven't declared .infoCardContainer--vintage classes for the Vintage infocard :x: Cannot read property '1' of undefined :x: Cannot read property '1' of undefined :x: You haven't declared .infoCardCallActionContainer :global(.vtex-button):hover classes for the button hover :x: Cannot convert undefined or null to object :x: Cannot read property '1' of undefined

Try again :grin:

vtex-course-hub[bot] commented 4 years ago

You did great! :grin:

Results

:white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark::white_check_mark:

Tests

:white_check_mark: Getting the file :white_check_mark: First test - Code compilation :white_check_mark: Check Css Classes - Image :white_check_mark: Check Css Attributes - Image :white_check_mark: Check Css Attributes values - Image :white_check_mark: Check Css Classes - Text :white_check_mark: Check Css Attributes - Text :white_check_mark: Check Css Attributes values - Text :white_check_mark: Check Css Classes - Button :white_check_mark: Check Css Attributes - Button :white_check_mark: Check Css Classes and Metal blockClass :white_check_mark: Check Css Attribute Values - Metal blockclass :white_check_mark: Check Css Classes and Vintage blockClass :white_check_mark: Check Css Attribute Values - Vintage :white_check_mark: Check Css Attributes values - Button :white_check_mark: Check Css Classes - Button Hover :white_check_mark: Check Css Attributes - Button Hover :white_check_mark: Check Css Attributes values - Button Hover

github-learning-lab[bot] commented 4 years ago

¡Ha completado este paso con éxito!

Vaya al siguiente paso!