Otevře se na nové kartě

Novinka: Vizuální editor pro éru AI webů: www.directedit.dev

Dynamické náhledové obrázky (výměna obrázku při hover)

Jak v Bricks udělat dynamické náhledové obrázky? Bez pluginu?

Jitka Klingenbergová
Jitka Klingenbergová
Vytvořeno: 20. 8. 2024 | Aktualizováno: 17. 1. 2025

Zajímá vás, jak v Bricks udělat dynamické náhledové obrázky? Např. prolnutí náhledového obrázku produktu za jiný? A bez pluginu?

  • Bude vám k tomu stačit pár řádek PHP, CSS a správná struktura, kterou si v Bricks hravě připravíte.

1. Kód do child theme

Do child theme přidejte funkci, která vrací 1. obrázek z galerie, pokud tam nějaký je. Pokud není, vrátí ten náhledový (aby tam nebylo prázdné místo). Nezapomeňte to také v Bricks registrovat (to je ta 2. funkce).


/**
 * produkt gallery - image change on hover 
 */
function get_first_image_from_product_gallery() {	
    $image_id = wc_get_product()->get_gallery_image_ids()[0] ; 
		
    if ( $image_id ) {
		return $image_id;
		
    } else {  
        return wc_get_product()->get_image_id();
    }		
}

add_filter( 'bricks/code/echo_function_names', function() {
  return [
     'get_first_image_from_product_gallery',
  ];
} );

2. Vytvořte si v Bricks loop, kde budou dva obrázky v bloku

Kód funguje pro custom strukturu, tj. pokud si v loopu vypíšete produkty a skládáte si strukturu, jak je libo (nikolik klasický blok pro výpis produktů).

  • Container – drží strukturu produktů – tím je můžete vypsat třeba do 4 sloupců.
    • Block – s loopem, který iteruje přes produkty
      • Block (označený žlutou) – je obalovací element pro obrázky
        • Image
        • Image – hover
      • Block – pro vlastní obsah (nadpis, popisek, cenu, tlačítko, cokoli…)
        • zbytek struktury (pro tento příklad nepodstatný)
image

3. CSS, která je třeba nastavit

Block (označený žlutou barvou)

  • position: relative
  • aspect-ratio: 1
  • custom css:
%root% img{
  transition: all 300ms linear;
}

%root% img:nth-child(1){
  opacity: 1;
}

%root% img:nth-child(2){
  opacity: 0;
}

%root%:hover img:nth-child(1){
  opacity: 0;
}

%root%:hover img:nth-child(2){
  opacity: 1;
}

Image

  • dynamický obsah:
  • aspect-ratio: 1
  • object-fit: cover
  • width: 100%
  • max-width: 100%

Image – hover

  • dynamický obsah:
  • aspect-ratio: 1
  • object-fit: cover
  • width: 100%
  • max-width: 100%
  • position: absolute

Princip efektu

  1. Díky absolutnímu pozicování a aspect-ratio budou obrázky za sebou a budou stejné velké. Z-index pak určí, že ten správný bude opravdu nahoře.
  2. Cílový efekt prolnutí udělá opacity, které se na hover změní. Díky tomu se obrázky plynule vymění.

Pošlete to dál:

Jitka Klingenbergová

Jitka Klingenbergová

Absolventka ČVUT FIT oboru Informatika | Programátorka | Webová vývojářka, konzultantka a mentorka
tvorime@vyladeny-web.cz

Vaše komentáře

Zanechte první komentář

Pravidelná dávka užitečných tipů až do schránky

Hledat