{"id":229577,"date":"2022-11-23T13:03:00","date_gmt":"2022-11-23T10:03:00","guid":{"rendered":"https:\/\/wordpress.mediadoma.com\/?p=229577"},"modified":"2022-11-09T08:32:57","modified_gmt":"2022-11-09T05:32:57","slug":"dynamiczne-centrowanie-elementu-w-kontenerze-za-pomoca-css","status":"publish","type":"post","link":"https:\/\/wordpress.mediadoma.com\/pl\/dynamiczne-centrowanie-elementu-w-kontenerze-za-pomoca-css\/","title":{"rendered":"Dynamiczne centrowanie elementu w kontenerze za pomoc\u0105 CSS"},"content":{"rendered":"\n<p>Je\u015bli chodzi o pisanie o programowaniu, rzadko m\u00f3wi\u0119 o rzeczach poza PHP i JavaScript, g\u0142\u00f3wnie dlatego, \u017ce pracuj\u0119 z tymi j\u0119zykami cz\u0119\u015bciej ni\u017c z innymi.<\/p>\n<p>Mam na my\u015bli, \u017ce tak, CSS jest cz\u0119\u015bci\u0105 umowy, podobnie jak HTML, ale w dzisiejszych czasach oczekuje si\u0119 tego, prawda?<\/p>\n<p>Wi\u0119c je\u015bli kiedykolwiek pojawi\u0142a si\u0119 dla mnie szybka wskaz\u00f3wka dotycz\u0105ca CSS, to jest to (cho\u0107 mo\u017ce powinienem napisa\u0107 wi\u0119cej?). Ci\u0119\u017cko jest, gdy <strong><a href=\"https:\/\/twitter.com\/chriscoyier\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Chris<\/a><\/strong> wykonuje tak\u0105 niesamowit\u0105 robot\u0119 przy uruchamianiu <strong><a href=\"https:\/\/css-tricks.com\/\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">sztuczek CSS<\/a><\/strong>, ale ja robi\u0119 dygresj\u0119.<\/p>\n<p>W ka\u017cdym razie oto problem i rozwi\u0105zanie.<\/p>\n<h2>Dynamiczne centrowanie elementu w kontenerze<\/h2>\n<p>Idea dynamicznego centrowania elementu opiera si\u0119 na nast\u0119puj\u0105cym scenariuszu:<\/p>\n<ul>\n<li>Wykonujesz wywo\u0142anie do interfejsu API, kt\u00f3ry b\u0119dzie odpowiada\u0142 zestawem, powiedzmy, obraz\u00f3w po zako\u0144czeniu wywo\u0142ania.<\/li>\n<li>Musisz wy\u015brodkowa\u0107 ka\u017cdy obraz w jego kontenerze.<\/li>\n<li>Obrazy nie b\u0119d\u0105 mia\u0142y sta\u0142ej wysoko\u015bci i b\u0119d\u0105 musia\u0142y by\u0107 dynamicznie pozycjonowane i wy\u015brodkowane w kontenerach w interfejsie u\u017cytkownika.<\/li>\n<\/ul>\n<p>By\u0107 mo\u017ce jest to jeszcze troch\u0119 og\u00f3lne. Je\u015bli tak, za\u0142\u00f3\u017cmy, \u017ce masz list\u0119 (uporz\u0105dkowan\u0105 lub nieuporz\u0105dkowan\u0105, nie ma to znaczenia). Maj\u0105 ustalon\u0105 wysoko\u015b\u0107 i szeroko\u015b\u0107, a obrazy b\u0119d\u0105 skalowane w ka\u017cdym elemencie.<\/p>\n<p>Pami\u0119taj: nie mo\u017cesz umieszcza\u0107 element\u00f3w takich jak elementy <strong>div w elementach<\/strong> <strong>li<\/strong> (poniewa\u017c <strong>div<\/strong> jest elementem na poziomie bloku) bez zmiany go za pomoc\u0105 jakiego\u015b CSS. I chcemy tego unikn\u0105\u0107.<\/p>\n<p>Wi\u0119c ostatecznie interfejs u\u017cytkownika mo\u017ce wygl\u0105da\u0107 mniej wi\u0119cej tak (nieproszony, wiem):<\/p>\n<p>Je\u015bli chcesz, aby ka\u017cdy obraz zosta\u0142 umieszczony w elemencie listy, chcesz, aby mia\u0142 okre\u015blon\u0105 wysoko\u015b\u0107 w skali i chcesz, aby by\u0142 wy\u015brodkowany, <strong><a href=\"https:\/\/gist.github.com\/tommcfarlin\/6fcfa9dd108af20920c937b2a1fa66c4\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">wypr\u00f3buj nast\u0119puj\u0105cy fragment kodu<\/a><\/strong> :<\/p>\n<pre><code>.acme-element {\n  position:   relative;\n  top:        50%;\n  transform:  translateY(-50%);\n  height:     auto;\n  max-height: 190px;\n}<\/code><\/pre>\n<p>Kluczem do tego jest styl transformacji. <strong><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/transform-function\/translateY\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">Wed\u0142ug MDN<\/a><\/strong> :<\/p>\n<blockquote>\n<p>Funkcja CSS translateY() zmienia po\u0142o\u017cenie elementu w pionie na p\u0142aszczy\u017anie 2D. Jego wynikiem jest typ danych.<\/p>\n<\/blockquote>\n<p>Ma sens?<\/p>\n<p>Pomy\u015bl o tym w ten spos\u00f3b: funkcja <strong>translateY<\/strong> pobierze dany element (zidentyfikowany przez jego selektor) i ustawi go przy u\u017cyciu okre\u015blonej warto\u015bci.<\/p>\n<h2>Chodzi o transformacje<\/h2>\n<p>Mo\u017cesz u\u017cy\u0107 pikseli, warto\u015bci procentowych lub czegokolwiek, czego potrzebujesz, aby to si\u0119 sta\u0142o. W tym przypadku s\u0105 to warto\u015bci procentowe (i s\u0105 ujemne). Chocia\u017c u\u017cywam przyk\u0142adu mojej implementacji, ma on r\u00f3wnie\u017c stanowi\u0107 wskaz\u00f3wk\u0119, jak u\u017cywa\u0107 funkcji <strong>transformY<\/strong> w odniesieniu do przekszta\u0142ce\u0144.<\/p>\n<p>Je\u015bli kompatybilno\u015b\u0107 przegl\u0105darki ma znaczenie \u2013 co w niekt\u00f3rych przypadkach powinna \u2013 sprawd\u017a <strong><a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/transform-function#Browser_compatibility\" target=\"_blank\" rel=\"noopener nofollow\" class=\"external external_icon\">ten wykres<\/a><\/strong>. Jeste\u015b ca\u0142kiem dobrze zabezpieczony.<\/p>\n<p><div id=\"PostUnique_PostSource\" style=\"padding-top: 50px\">\u0179r\u00f3d\u0142o nagrywania:  <a target=\"_blank\" rel=\"noopener nofollow\" href=\"\/\/tommcfarlin.com\" class=\"external external_icon\">tommcfarlin.com<\/a><\/div><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pomys\u0142 dynamicznego centrowania elementu jest silnie zwi\u0105zany z prac\u0105, kt\u00f3r\u0105 wykonujesz, ale by\u0107 mo\u017ce pomocne b\u0119dzie u\u017cycie przekszta\u0142ce\u0144.<\/p>\n","protected":false},"author":1,"featured_media":220880,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":"","_wp_rev_ctl_limit":""},"categories":[908,836,845],"tags":[1169],"class_list":["post-229577","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-css-7","category-przewodnik-dla-poczatkujacych","category-samouczki","tag-affiai-pl"],"_links":{"self":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229577","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/comments?post=229577"}],"version-history":[{"count":0,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/posts\/229577\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media\/220880"}],"wp:attachment":[{"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/media?parent=229577"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/categories?post=229577"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wordpress.mediadoma.com\/pl\/wp-json\/wp\/v2\/tags?post=229577"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}