{"id":29822,"date":"2024-01-10T13:37:23","date_gmt":"2024-01-10T12:37:23","guid":{"rendered":"https:\/\/nearshore-it.eu\/artykuly\/angular-material-design-wprowadzenie\/"},"modified":"2024-10-03T14:19:11","modified_gmt":"2024-10-03T12:19:11","slug":"angular-material-design-wprowadzenie","status":"publish","type":"post","link":"https:\/\/nearshore-it.eu\/pl\/artykuly\/angular-material-design-wprowadzenie\/","title":{"rendered":"Wprowadzenie do Angular Material design"},"content":{"rendered":"\n<div class=\"table-of-contents\">\n    <p class=\"title\">Przejd\u017a do:<\/p>\n    <ol>\n                    <li><a href=\"#Jak-tworzy\u0107-zachwycaj\u0105ce-i-funkcjonalne-interfejsy?\">1.  Jak tworzy\u0107 zachwycaj\u0105ce i funkcjonalne interfejsy?<\/a><\/li>\n                    <li><a href=\"#Biblioteka-czy-framework?-Czym-jest-Angular-Material?-\">2.  Biblioteka czy framework? Czym jest Angular Material?\u00a0<\/a><\/li>\n                    <li><a href=\"#Jak-zaimplementowa\u0107-Angular-Material-w-naszej-aplikacji?-\">3.  Jak zaimplementowa\u0107 Angular Material w naszej aplikacji?\u00a0<\/a><\/li>\n                    <li><a href=\"#Jak-korzysta\u0107-z-komponent\u00f3w-dost\u0119pnych-w-Angular-Material?-\">4.  Jak korzysta\u0107 z komponent\u00f3w dost\u0119pnych w Angular Material?\u00a0<\/a><\/li>\n                    <li><a href=\"#Korzystanie-z-komponent\u00f3w-w-szablonach-\">5.  Korzystanie z komponent\u00f3w w szablonach <\/a><\/li>\n                    <li><a href=\"#Dostosowanie-komponentu-do-potrzeb-aplikacji-\">6.  Dostosowanie komponentu do potrzeb aplikacji <\/a><\/li>\n                    <li><a href=\"#Jak-i-od-czego-zacz\u0105\u0107-nauk\u0119?-\">7.  Jak i od czego zacz\u0105\u0107 nauk\u0119? <\/a><\/li>\n                    <li><a href=\"#w\u0142asny-motyw-w-Angular-Material\">8.  Jak stworzy\u0107 w\u0142asny motyw w Angular Material? <\/a><\/li>\n                    <li><a href=\"#Konfiguracja-kolor\u00f3w-\">9.  Konfiguracja kolor\u00f3w <\/a><\/li>\n                    <li><a href=\"#Dlaczego-warto-tworzy\u0107-aplikacje-z-t\u0105-bibliotek\u0105-komponent\u00f3w?-\">10.     Dlaczego warto tworzy\u0107 aplikacje z t\u0105 bibliotek\u0105 komponent\u00f3w? <\/a><\/li>\n                    <li><a href=\"#Podsumowanieu002du002d\">11.  Podsumowanie  <\/a><\/li>\n            <\/ol>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-tworzy\u0107-zachwycaj\u0105ce-i-funkcjonalne-interfejsy?\">Jak tworzy\u0107 zachwycaj\u0105ce i funkcjonalne interfejsy?<\/h2>\n\n\n\n<p>Czy zastanawia\u0142o ci\u0119 kiedy\u015b, jak to jest, \u017ce wsp\u00f3\u0142czesne aplikacje internetowe zachwycaj\u0105 swoimi stylowymi, a jednocze\u015bnie funkcjonalnymi interfejsami u\u017cytkownika? C\u00f3\u017c, tajemnica cz\u0119sto tkwi w bibliotekach UI\/UX, a w \u015bwiecie Angulara kr\u00f3luje Angular Material. Jest to kompleksowy zestaw narz\u0119dzi do budowania interfejs\u00f3w, opracowany w duchu Material Design \u2013 zestawu dobrych praktyk projektowania opracowanego przez Google. Jego kluczowymi elementami s\u0105 czytelno\u015b\u0107, sp\u00f3jno\u015b\u0107 i reakcja na interakcj\u0119 u\u017cytkownika, co sprawia, \u017ce jest on przyjazny i \u0142atwy w obs\u0142udze. Zainteresowanych zach\u0119cam do zapoznania si\u0119 z materia\u0142ami i przyk\u0142adami implementacji na stronie <a href=\"https:\/\/material.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/material.io\/.<\/a><\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/icons_modified.gif\" alt=\" class=\" class=\"wp-image-13477\" style=\"width:762px;height:auto\" title=\"\"><figcaption class=\"wp-element-caption\">Ikony powinny by\u0107 proste i czytelne, bez zb\u0119dnych efekt\u00f3w 3d&nbsp; &nbsp;<br><em>\u017ar\u00f3d\u0142o: material.io<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/dynamic-color-animation-modified.gif\" alt=\" class=\" class=\"wp-image-13479\" title=\"\"><figcaption class=\"wp-element-caption\">Przyk\u0142ad zastosowania kolor\u00f3w dynamicznych w Material Design&nbsp;<br><em>\u017ar\u00f3d\u0142o: material.io<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Biblioteka-czy-framework?-Czym-jest-Angular-Material?-\">Biblioteka czy framework? Czym jest Angular Material?&nbsp;<\/h2>\n\n\n\n<p>Najpro\u015bciej ujmuj\u0105c, to biblioteka UI zawieraj\u0105ca zestaw gotowych do u\u017cycia, wysokiej jako\u015bci komponent\u00f3w dla Angulara. Dzi\u0119ki prostym i przetestowanym API oraz swojej wszechstronno\u015bci i mnogo\u015bci rozwi\u0105za\u0144, biblioteka pozwala na doskona\u0142\u0105 integracj\u0119 i tworzenie \u015bwietnych customowych rozwi\u0105za\u0144.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-zaimplementowa\u0107-Angular-Material-w-naszej-aplikacji?-\">Jak zaimplementowa\u0107 Angular Material w naszej aplikacji?&nbsp;<\/h2>\n\n\n\n<p>To proste! Wszystko dzieje si\u0119 automatycznie dzi\u0119ki wspania\u0142emu Angular CLI, dlatego od razu przejd\u017amy do szczeg\u00f3\u0142\u00f3w! Za\u0142\u00f3\u017cmy, \u017ce masz ju\u017c aplikacj\u0119 w Angularze i chcesz wzbogaci\u0107 j\u0105 o Angular Material. Wystarczy, \u017ce w terminalu, w lokalizacji projektu, wpiszesz:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ng add @angular\/material <\/pre>\n\n\n\n<p>Podczas instalacji mo\u017cesz wybra\u0107 motyw kolorystyczny, ustawi\u0107 globalne style dla typografii oraz zdecydowa\u0107 o w\u0142\u0105czeniu animacji. W nowej aplikacji polecam wybra\u0107 losowy motyw, ustawi\u0107 style dla typografii i w\u0142\u0105czy\u0107 animacje.&nbsp;<\/p>\n\n\n\n<p>Pami\u0119taj: W istniej\u0105cej ju\u017c aplikacji unikaj w\u0142\u0105czania styl\u00f3w typograficznych, je\u015bli chcesz zachowa\u0107 wcze\u015bniej przygotowane przez siebie style tekstowe.&nbsp;<\/p>\n\n\n\n<p>Po instalacji zauwa\u017cysz, \u017ce \u015bcie\u017cka do pliku CSS wybranego motywu zosta\u0142a dodana do globalnych styl\u00f3w aplikacji w pliku angular.json:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\"styles\": [ \n\n              \"@angular\/material\/prebuilt-themes\/indigo-pink.css\", \n\n              \"src\/styles.scss\" \n\n], <\/pre>\n\n\n\n<p>Dodatkowo paczka @angular\/material zosta\u0142a dodana do pliku package.json, ikony i fonty zosta\u0142y zaimportowane w pliku index.html, body otrzyma\u0142o klas\u0119 mat-typography i nowe globalne style pojawi\u0142y si\u0119 w pliku styles.css.&nbsp;<\/p>\n\n\n\n<p>I to wszystko! Teraz mo\u017cesz zacz\u0105\u0107 bawi\u0107 si\u0119 komponentami.&nbsp;<\/p>\n\n\n\n<p><strong>Przeczytaj tak\u017ce:<\/strong> <a href=\"https:\/\/nearshore-it.eu\/pl\/artykuly\/najlepsze-frameworki-frontendowe\/\">Kt\u00f3ry framework wybra\u0107? Pojedynek gigant\u00f3w: React vs Angular<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-korzysta\u0107-z-komponent\u00f3w-dost\u0119pnych-w-Angular-Material?-\">Jak korzysta\u0107 z komponent\u00f3w dost\u0119pnych w Angular Material?&nbsp;<\/h2>\n\n\n\n<p>Angular Material oferuje wachlarz komponent\u00f3w UI, kt\u00f3re s\u0105 elastyczne i \u0142atwe w u\u017cyciu, a przy tym zgodne z wytycznymi Material Design. We\u017amy na przyk\u0142ad prosty przycisk.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Importowanie modu\u0142u komponentu&nbsp;<\/h3>\n\n\n\n<p>Ka\u017cdy komponent z Angular Material ma sw\u00f3j dedykowany modu\u0142. Dla przycisk\u00f3w b\u0119dzie to MatButtonModule z przestrzeni @angular\/material\/button.&nbsp;<\/p>\n\n\n\n<p>Je\u015bli twoja aplikacja jest podzielona na wewn\u0119trzne modu\u0142y, zaimportuj potrzebny modu\u0142 do modu\u0142u, w kt\u00f3rym zamierzasz u\u017cy\u0107 komponentu:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">mport { MatButtonModule } from '@angular\/material\/button'; \n\n... \n\n@NgModule({ \n\n  declarations: [...], \n\n  imports: [MatButtonModule, ...], \n\n}) \n\nexport class AppModule { } <\/pre>\n\n\n\n<p>Je\u015bli korzystasz ze standalone component, wystarczy import bezpo\u015brednio w komponencie:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">import { MatButtonModule } from '@angular\/material\/button'; \n\n... \n\n@Component({ \n\n  selector: 'app-root', \n\n  standalone: true, \n\n  imports: [MatButtonModule, ...], \n\n  templateUrl: '.\/app.component.html', \n\n  styleUrl: '.\/app.component.scss' \n\n}) \n\nexport class AppComponent { }<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Korzystanie-z-komponent\u00f3w-w-szablonach-\">Korzystanie z komponent\u00f3w w szablonach&nbsp;<\/h2>\n\n\n\n<p>Teraz mo\u017cesz zacz\u0105\u0107 u\u017cywa\u0107 komponent\u00f3w w szablonach HTML. Aby umie\u015bci\u0107 przycisk, wystarczy doda\u0107 odpowiedni tag w pliku HTML.&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;button mat-button>Kliknij mnie&lt;\/button> <\/pre>\n\n\n\n<p>Dzi\u0119ki temu, \u017ce operujesz tutaj na natywnym obiekcie button, mo\u017cesz obs\u0142ugiwa\u0107 wszystkie jego zdarzenia i korzysta\u0107 z niego dok\u0142adnie w taki sam spos\u00f3b, jak bez Angular Material.&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">&lt;button mat-button (click)=\"onClick()\" (focus)=\"onFocus()\" [disabled]=\"isDisabled\">Kliknij mnie&lt;\/button> <\/pre>\n\n\n\n<p>Teraz pi\u0119knie ostylowany przycisk znajduje si\u0119 w twojej aplikacji, a ty intuicyjnie wiesz ju\u017c, jak z niego korzysta\u0107.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Dostosowanie-komponentu-do-potrzeb-aplikacji-\">Dostosowanie komponentu do potrzeb aplikacji&nbsp;<\/h2>\n\n\n\n<p>Wszystkie komponenty mo\u017cesz ostylowywa\u0107 i konfigurowa\u0107 tak, aby pasowa\u0142y do potrzeb twojej aplikacji. Na przyk\u0142ad przyciski oferuj\u0105 r\u00f3\u017cne style <em>out of the box<\/em>, takie jak basic, raised, stroked, flat, icon, fab czy mini fab. Ka\u017cdemu stylowi dodatkowo mo\u017cesz nada\u0107 kolor: primary, accent, warn \u2013 kt\u00f3re skonfigurowane s\u0105 w wybranym przez ciebie motywie (o czym w dalszej cz\u0119\u015bci artyku\u0142u).&nbsp;<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image size-full\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/ButtonTypes.png\" alt=\" class=\" class=\"wp-image-13481\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby dowiedzie\u0107 si\u0119, jaki modu\u0142 zaimportowa\u0107 oraz w jaki spos\u00f3b konfigurowa\u0107 dany komponent, najlepiej jest zajrze\u0107 do dokumentacji dost\u0119pnej w Internecie. Mo\u017cesz tam pozna\u0107 parametry do konfiguracji komponentu oraz przyk\u0142ady u\u017cycia (wraz z kodem), na kt\u00f3re warto spojrze\u0107 w poszukiwaniu sposobu u\u017cycia lub inspiracji. Dla przycisku b\u0119dzie to strona: <a href=\"https:\/\/material.angular.io\/components\/button\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Button | Angular Material.<\/a>&nbsp;<\/p>\n\n\n\n<p>Natomiast ca\u0142\u0105 list\u0119 dost\u0119pnych komponent\u00f3w podzielonych na kategorie znajdziesz tutaj: <a href=\"https:\/\/material.angular.io\/components\/categories\" target=\"_blank\" rel=\"noreferrer noopener\">Components | Angular Material<\/a>. Zach\u0119cam do przejrzenia listy i pobawienia si\u0119 ka\u017cdym komponentem.&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Jak-i-od-czego-zacz\u0105\u0107-nauk\u0119?-\">Jak i od czego zacz\u0105\u0107 nauk\u0119?&nbsp;<\/h2>\n\n\n\n<p>Moim punktem startowym w nauce by\u0142oby skupienie si\u0119 na tych komponentach, kt\u00f3re znajduj\u0105 najcz\u0119stsze zastosowanie w aplikacjach. Chodzi mi tu przede wszystkim o komponenty s\u0142u\u017c\u0105ce do interakcji z u\u017cytkownikiem \u2013 takie jak przyciski, pola wyboru (checkboxy, selecty, radio buttony), pola tekstowe formularzy \u2013 oraz o te, kt\u00f3re pe\u0142ni\u0105 funkcj\u0119 prezentacji danych, na przyk\u0142ad paski post\u0119pu (progress bary\/spinnery), snackbary czy tabele.&nbsp;<\/p>\n\n\n\n<p>Zach\u0119cam do utworzenia w\u0142asnego <strong><em>playgroundu <\/em><\/strong>w Angularze, gdzie krok po kroku mo\u017cesz eksperymentowa\u0107 z ka\u017cdym z wymienionych komponent\u00f3w w praktyce. Angular Material zapewnia dost\u0119p do r\u00f3\u017cnorodnych schemat\u00f3w, kt\u00f3re mo\u017cna wykorzysta\u0107 do generowania kodu. Aby w \u0142atwy spos\u00f3b doda\u0107 proste menu nawigacyjne do aplikacji, skorzystaj z navigation schematic:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ng generate @angular\/material:navigation navigation <\/pre>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image size-full\">\n<figure class=\"aligncenter\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/AngularMaterialPlayground-1.png\" alt=\" class=\" class=\"wp-image-13499\" title=\"\"><\/figure>\n<\/div>\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Z aplikacj\u0105 przygotowan\u0105 w ten spos\u00f3b i z otwart\u0105 dokumentacj\u0105 Angular Material, przejd\u017a przez wszystkie komponenty, zg\u0142\u0119biaj\u0105c ich funkcje i sposoby wykorzystania.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"w\u0142asny-motyw-w-Angular-Material\">Jak stworzy\u0107 w\u0142asny motyw w Angular Material?&nbsp;<\/h2>\n\n\n\n<p>Tworzenie w\u0142asnego motywu w Angular Material to temat, kt\u00f3ry zas\u0142uguje na osobny artyku\u0142. Niemniej, warto wiedzie\u0107, \u017ce Angular Material umo\u017cliwia dostosowanie wygl\u0105du komponent\u00f3w do indywidualnych potrzeb.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Przygotowanie motywu dla siebie&nbsp;<\/h3>\n\n\n\n<p>Przed przyst\u0105pieniem do tworzenia w\u0142asnego motywu upewnij si\u0119, \u017ce twoje style s\u0105 zapisane w formacie SCSS, a tak\u017ce usu\u0144 z angular.json odniesienie do pliku CSS wybranego wcze\u015bniej motywu.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Wprowadzenie i u\u017cycie customowego motywu&nbsp;<\/h3>\n\n\n\n<p>Mo\u017cesz to zrobi\u0107, ponownie wywo\u0142uj\u0105c komend\u0119:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">ng add @angular\/material <\/pre>\n\n\n\n<p>Jednak tym razem, przy wyborze motywu, wska\u017c custom.&nbsp;<\/p>\n\n\n\n<p>Zaobserwujesz, \u017ce tw\u00f3j plik styles.scss zosta\u0142 wzbogacony o nowe linijki kodu, kt\u00f3re:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Importuj\u0105 wymagane style i funkcje&nbsp;<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">- @use '@angular\/material' as mat; \n- @include mat.core(); <\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Definiuj\u0105 zestaw kolor\u00f3w dla komponent\u00f3w przy u\u017cyciu istniej\u0105cych palet&nbsp;<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$angular-material-primary: mat.define-palette(mat.$indigo-palette); \n\n$angular-material-accent: mat.define-palette(mat.$pink-palette, A200, A100, A400); \n\n$angular-material-warn: mat.define-palette(mat.$red-palette); <\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Definiuj\u0105 obiekt przechowuj\u0105cy wszystkie w\u0142a\u015bciwo\u015bci motywu&nbsp;<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$angular-material-theme: mat.define-light-theme(( \n\n  color: ( \n\n    primary: $angular-material-primary, \n\n    accent: $angular-material-accent, \n\n    warn: $angular-material-warn, \n\n  ) \n\n)); <\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Do\u0142\u0105czaj\u0105 motyw do wszystkich komponent\u00f3w wykorzystywanych w aplikacji&nbsp;<\/li>\n<\/ul>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">@include mat.all-component-themes($angular-material-theme); <\/pre>\n\n\n\n<p>W tym momencie jedyna r\u00f3\u017cnica mi\u0119dzy wybranym wcze\u015bniej motywem a utworzonym nowym, customowym, opiera si\u0119 na podstawowym zestawie kolor\u00f3w.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Konfiguracja-kolor\u00f3w-\">Konfiguracja kolor\u00f3w&nbsp;<\/h2>\n\n\n\n<p>W customowym motywie mo\u017cesz zdefiniowa\u0107 trzy g\u0142\u00f3wne kolory:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>primary \u2013 jest to kolor, kt\u00f3ry pojawia si\u0119 najcz\u0119\u015bciej w aplikacji&nbsp;<\/li>\n\n\n\n<li>accent \u2013 kolor, kt\u00f3rym b\u0119dziesz akcentowa\u0107 wyr\u00f3\u017cniaj\u0105ce si\u0119 komponenty&nbsp;<\/li>\n\n\n\n<li>Warn \u2013 kolor, kt\u00f3ry b\u0119dzie zwraca\u0142 uwag\u0119, np. na b\u0142\u0119dy&nbsp;<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<p>W tym celu mo\u017cesz wykorzysta\u0107 istniej\u0105ce palety kolor\u00f3w lub utworzy\u0107 w\u0142asne. Ja skupi\u0119 si\u0119 na istniej\u0105cych paletach, kt\u00f3re mo\u017cesz znale\u017a\u0107 tutaj: <a href=\"https:\/\/m1.material.io\/style\/color.html#color-color-palette\" target=\"_blank\" rel=\"noreferrer noopener\">Color &#8211; Style &#8211; Material Design<\/a>&nbsp;<\/p>\n\n\n\n<p>Aby u\u017cy\u0107 wybranej palety, wystarczy, \u017ce przy definicji koloru wprowadzisz jej nazw\u0119 w metodzie define-palette. Metoda ta pozwala na jeszcze dok\u0142adniejsz\u0105 konfiguracj\u0119 kolor\u00f3w, aby mo\u017cna by\u0142o uzyska\u0107 po\u017c\u0105dany efekt w aplikacji. Mo\u017cesz bowiem dobra\u0107 konkretne kolory z danej palety tak, aby komponenty by\u0142y pokolorowane w okre\u015blony spos\u00f3b:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">nenty by\u0142y pokolorowane w okre\u015blony spos\u00f3b: \n\n@function define-palette($base-palette, $default: 500, $lighter: 100, $darker: 700, $text: $default) <\/pre>\n\n\n\n<p>Czyli na przyk\u0142ad, je\u015bli chcesz, aby tw\u00f3j kolor primary by\u0142 czerwony, ale jednocze\u015bnie preferujesz ja\u015bniejsze odcienie czerwieni, mo\u017cesz skonfigurowa\u0107 go w ten spos\u00f3b, wybieraj\u0105c ja\u015bniejsze odcienie czerwieni (200, 100, 300) dla wszystkich wariant\u00f3w:&nbsp;<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">$angular-material-primary: mat.define-palette(mat.$red-palette, 200, 100, 300); <\/pre>\n\n\n\n<p>Dzi\u0119ki temu tw\u00f3j mat-raised-button w wybranym kolorze primary b\u0119dzie wygl\u0105da\u0142 tak:&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/nearshore-it.eu\/wp-content\/uploads\/2024\/09\/Obraz1-1.png\" alt=\" class=\" class=\"wp-image-13502\" title=\"\"><\/figure>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Jak pisa\u0142em wcze\u015bniej, temat tworzenia w\u0142asnego motywu jest bardzo obszerny i zas\u0142uguje na osobny artyku\u0142, dlatego chcia\u0142bym poprzesta\u0107 na wprowadzeniu i zach\u0119cie do wypr\u00f3bowania mo\u017cliwo\u015bci. Natomiast je\u015bli uda\u0142o mi si\u0119 zainteresowa\u0107 ci\u0119 tym tematem i chcesz zg\u0142\u0119bi\u0107 go bardziej, polecam ten przewodnik:&nbsp; <a href=\"https:\/\/material.angular.io\/guide\/theming\" target=\"_blank\" rel=\"noreferrer noopener\">Theming Angular Material | Angular Material<\/a>&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Dlaczego-warto-tworzy\u0107-aplikacje-z-t\u0105-bibliotek\u0105-komponent\u00f3w?-\">Dlaczego warto tworzy\u0107 aplikacje z t\u0105 bibliotek\u0105 komponent\u00f3w?&nbsp;<\/h2>\n\n\n\n<p>Zdecydowanie zach\u0119cam do samodzielnego eksplorowania Angular Material.&nbsp;<\/p>\n\n\n\n<p>Odkrywanie mo\u017cliwo\u015bci tej biblioteki na w\u0142asn\u0105 r\u0119k\u0119 mo\u017ce by\u0107 nie tylko niezwykle rozwijaj\u0105ce, ale r\u00f3wnie\u017c inspiruj\u0105ce. Praktyczne eksperymentowanie z r\u00f3\u017cnymi komponentami, stylami i funkcjami pozwoli ci lepiej zrozumie\u0107, jak mo\u017cna efektywnie wykorzysta\u0107 Angular Material w projektach. Dodatkowo, samodzielne rozwi\u0105zywanie problem\u00f3w i adaptacja komponent\u00f3w do w\u0142asnych potrzeb pomo\u017ce ci rozwin\u0105\u0107 umiej\u0119tno\u015bci i zwi\u0119kszy\u0107 twoj\u0105 pewno\u015b\u0107 siebie w developmencie. Znajomo\u015b\u0107 Angular Material otwiera drzwi do tworzenia bardziej zaawansowanych i estetycznie przyjemnych aplikacji webowych.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"Podsumowanie--\">Podsumowanie&nbsp;&nbsp;<\/h2>\n\n\n\n<p>Angular Material jest pot\u0119\u017cnym narz\u0119dziem, kt\u00f3re umo\u017cliwia tworzenie zaawansowanych, atrakcyjnych i funkcjonalnych interfejs\u00f3w u\u017cytkownika, jednocze\u015bnie upraszczaj\u0105c i przyspieszaj\u0105c proces tworzenia aplikacji webowych. Je\u015bli chcesz tworzy\u0107 funkcjonalne i estetyczne interfejsy u\u017cytkownika, wykorzystuj\u0105c w pe\u0142ni mo\u017cliwo\u015bci nowoczesnych bibliotek, nie wahaj si\u0119 wej\u015b\u0107 do fascynuj\u0105cego \u015bwiata Angular Material!&nbsp;<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Angular Material to cz\u0119sto wyb\u00f3r numer jeden dla deweloper\u00f3w, kt\u00f3rzy pragn\u0105 projektowa\u0107 i tworzy\u0107 przyci\u0105gaj\u0105ce wzrok, sp\u00f3jne i u\u017cyteczne aplikacje webowe, i to niezale\u017cnie od posiadanego do\u015bwiadczenia. Co warto wiedzie\u0107 na pocz\u0105tek? Przeczytaj ten wpis, aby dowiedzie\u0107 si\u0119, jak niewielkim nak\u0142adem pracy zyska\u0107 zupe\u0142nie now\u0105 warto\u015b\u0107 i jako\u015b\u0107 w tworzeniu interfejs\u00f3w aplikacji.<\/p>\n","protected":false},"author":171,"featured_media":29839,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"iawp_total_views":300,"footnotes":""},"categories":[1,582],"tags":[613],"offering":[522],"class_list":["post-29822","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-artykuly","category-technologie","tag-angular-2","offering-tech-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29822","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/users\/171"}],"replies":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/comments?post=29822"}],"version-history":[{"count":2,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29822\/revisions"}],"predecessor-version":[{"id":33181,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/posts\/29822\/revisions\/33181"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media\/29839"}],"wp:attachment":[{"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/media?parent=29822"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/categories?post=29822"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/tags?post=29822"},{"taxonomy":"offering","embeddable":true,"href":"https:\/\/nearshore-it.eu\/pl\/wp-json\/wp\/v2\/offering?post=29822"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}