Produkt FlexLayout v2024b

by Petr Haluza

HTML

<main>
  <section id="__main-prod-list" class="style-gallery">
	
    <article>
      <a href="" rel="bookmark">
        <div class="__product-image-area">
          <div class="__product-image">
            <img src="https://www.img4.cz/www/img/imgthumb?code=NOTD55730">          
          </div>
          <ul class="__product-tags">
            <li class="__cenova-akce">CENOVÁ AKCE</li>
            <li class="__">3 ROKY ZÁRUKY</li>
          </ul>
          <ul class="__product-functions">
            <li><button>🔍 Náhled</button></li>
            <li><button>♡ Oblíbený</button></li>
            <li><button>✔ Porovnat</button></li>
            <li><button>Do nabídky</button></li>
            <li><button>Expresní nákup</button></li>
          </ul>          
        </div>
        <div class="__product-name-area">
          <h3>DELL Latitude 5340/ i5-1345U/ 16GB/ 512GB SSD/ 13.3" FHD/ FPR/ Iris Xe/ W11Pro/ vPro/ 3Y PS on-site </h3>
        </div>
      </a>
      
      <div>
        <div class="__price-area">
          <div class="__main-price"><span><b>26 493 Kč</b> bez DPH</span></div> 
          <div class="__secondary-price">
            <span>32 110 Kč s DPH</span>
            <span>26 537 Kč bez DPH + popl.</span>
          </div>
          <div class="__buy-area">
							<input type="text" value="Koupit" class="fakeButton" disabled>
							<input type="text" value="1" class="quantity">
              <div class="QtyControll"><div class="pridatKus">+</div><div class="odebratKus">-</div></div>
          </div>
        </div>
        <div class="__stock-area">
          <a href="#" class="__on-stock">Brno <b>5 ks</b></a>
          <a href="#" class="">Praha <b>24.12.</b></a>
          <a href="#" class="">ČB <b>25.12.</b></a>
          <a href="#" class="">EXT <b>25.12.</b></a>
        </div>
        <div class="__meta-area">
          <div>PN: <a>N-3525-N2-555K</a></div>
          <div>Kód: <a>NOTD53860</a></div>
        </div>
      </div>
    </article>
  ...

CSS

@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@100;200;300;400;500;700&family=Roboto:wght@100;300;400;500;700&display=swap');

body {font-size:13px; font-family: 'Roboto', sans-serif;}
main {background: #f1f4f6; padding:1em; margin: 2em 0 4em}
#__main-prod-list {display: flex;flex-wrap: wrap; gap: 1em; container-type: inline-size;  container-name: galleryHolder; position:relative; }

#__main-prod-list article { display: flex;flex-direction: column;justify-content: space-between; transition: width 0.4s ease; width:300px; background-color: hsla(217, 83%, 70%, 0.1); border: none; border-radius:3px; overflow:hidden}
#__main-prod-list article a {text-decoration:none;}
#__main-prod-list article.hover {box-shadow:0 0 0px 1px white, 0 5px 10px rgba(4,9,20,.2) }

@container galleryHolder (max-width: 1800px) { #__main-prod-list article {  width: 20% } }
@container galleryHolder (max-width: 1400px) { #__main-prod-list article {  width: 25% } }
@container galleryHolder (max-width: 1130px) { #__main-prod-list article {  width: 33% } }
@container galleryHolder (max-width: 850px)  { #__main-prod-list article {  width: calc(50% - .5em) } }
@container galleryHolder (max-width: 500px)  { #__main-prod-list article { width: 100% } }

#__main-prod-list .__product-image-area { position: relative; padding: 5px 5px 0}

#__main-prod-list .__product-image { background: white; border-radius: 2px; overflow: hidden; text-align: center}
#__main-prod-list .__product-image img {max-width:100%;max-height:100%; height:220px; transition: transform .15s}
#__main-prod-list .hover .__product-image img { transform: translate(-50px, 0px);}

#__main-prod-list .__product-tags { position: absolute; top: 5px; left: 5px; display: flex; flex-direction: column; gap: 2px;}
#__main-prod-list .__product-tags li { background: #e4ebf5; padding: 3px 5px; color: #67818a; font-size:10px; text-align:center }
#__main-prod-list .__product-tags li.__cenova-akce { background: #dc8c57; color: white;...

JavaScript

/* zakázat link na vysouvacím panelu funkcí */
$(".__product-functions").click(function(e){
    e.preventDefault();
});

/* hover pro box produktu / ukážeme funkce */
$("article").each(articleHover);
function articleHover(i, element) {
  var articleTimeout;
  $(this).hover(function() {
      clearTimeout(articleTimeout);
      $(this).addClass('hover');
  }, function() {
      var $self = $(this);
      articleTimeout = setTimeout(function() {
          $self.removeClass('hover');
      }, 150);
  });
}

/* hover pro inputy počtu produktu do košíku */  
$(".__buy-area").each(createHover);
function createHover(i, element) {
  var hoverTimeout;
  $(this).hover(function() {
      clearTimeout(hoverTimeout);
      $(this).addClass('hover');
  }, function() {
      var $self = $(this);
      hoverTimeout = setTimeout(function() {
          $self.removeClass('hover');
      }, 1000);
  });
}

/* přidat ke všem inputům na počt produktů ovladače* /
// říká DJ že je to pičovina
$(document).ready(function() {
    $(".__buy-area").append('<div class="QtyControll"><div class="pridatKus">+</div><div class="odebratKus">-</div></div>');
});
*/

/*ovladač počtu kusů do košíku, už je na b2b*/
		$(document).ready(function() {
			$('body').on('click', '.pridatKus', function (e) {
				var $kusy = $(this).parent().prev(".quantity").val();
                var $max = $(this).parent().prev(".quantity").attr("data-max");
                if ($max!= undefined &&  $kusy != undefined) {
                   if($kusy >= $max) {
                        alert('Toto zboží lze objednat v maximálním počtu '+ $max +' ks');
                        return false;
                   }
                }
				$(this).parent().prev(".quantity").val(parseInt($kusy) + 1);
			});

			$('body').on('click', '.odebratKus', function (e) {
				var $kusy = $(this).parent().prev(".quantity").val();
				if (parseInt($kusy) >  0) {
					$(this).parent().prev(".quantity").val(parseInt($kusy) - 1);
				}
			});
		});


/*...