{"id":41505,"date":"2026-04-30T08:00:53","date_gmt":"2026-04-30T05:00:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=41505"},"modified":"2026-04-30T08:00:53","modified_gmt":"2026-04-30T05:00:53","slug":"angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/","title":{"rendered":"Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber"},"content":{"rendered":"<p><body><\/p>\n<h2>Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber<\/h2>\n<p>Modern web uygulamalar\u0131nda g\u00f6rsel tutarl\u0131l\u0131k ve kullan\u0131c\u0131 deneyimi, ba\u015far\u0131n\u0131n anahtarlar\u0131ndan biridir. Angular Material, Google&#8217;\u0131n Material Design prensiplerini Angular uygulamalar\u0131na ta\u015f\u0131yan g\u00fc\u00e7l\u00fc bir UI bile\u015fen k\u00fct\u00fcphanesidir. Bu k\u00fct\u00fcphane, haz\u0131r bile\u015fenlerin yan\u0131 s\u0131ra, ikon y\u00f6netimi i\u00e7in de esnek bir yap\u0131 sunar. Varsay\u0131lan olarak Material Design ikon setini (bir font ikonu seti) kullanmas\u0131na ra\u011fmen, \u00e7o\u011fu proje kendi markas\u0131na \u00f6zg\u00fc veya \u00f6zel tasarlanm\u0131\u015f ikonlara ihtiya\u00e7 duyar. \u0130\u015fte bu noktada \u00f6zel SVG (Scalable Vector Graphics) ikonlar\u0131 devreye girer.<\/p>\n<p>Bu makalede, Angular Material projelerinizde \u00f6zel SVG ikonlar\u0131n\u0131 nas\u0131l entegre edece\u011finizi, y\u00f6netece\u011finizi ve kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m, detayl\u0131 bir \u015fekilde inceleyece\u011fiz. G\u00fcvenlikten performansa, eri\u015filebilirlikten en iyi uygulamalara kadar t\u00fcm \u00f6nemli konulara de\u011finece\u011fiz.<\/p>\n<h2>Angular Material&#8217;\u0131n \u0130kon Sistemi ve SVG \u0130konlar\u0131n\u0131n \u00d6nemi<\/h2>\n<p>Angular Material, <code>MatIconModule<\/code> ve <code>MatIconRegistry<\/code> servisleri arac\u0131l\u0131\u011f\u0131yla g\u00fc\u00e7l\u00fc bir ikon y\u00f6netim sistemi sunar. Bu sistem, hem font tabanl\u0131 ikonlar\u0131 (\u00f6rne\u011fin, Material Design Icons, Font Awesome) hem de SVG tabanl\u0131 ikonlar\u0131 destekler.<\/p>\n<p>Varsay\u0131lan olarak, Angular Material&#8217;\u0131n <code><mat-icon><\/code> bile\u015feni, Material Design ikon setini kullan\u0131r. Bu ikonlar, bir font dosyas\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00fcklenir ve genellikle <code>font_icon_name<\/code> \u015feklinde bir string de\u011feriyle kullan\u0131l\u0131r. \u00d6rne\u011fin: <code><mat-icon>home<\/mat-icon><\/code>. Bu yakla\u015f\u0131m, bir\u00e7ok senaryo i\u00e7in yeterli ve pratiktir. Ancak, font tabanl\u0131 ikonlar\u0131n baz\u0131 k\u0131s\u0131tlamalar\u0131 vard\u0131r:<\/p>\n<p>*   <strong>S\u0131n\u0131rl\u0131 \u00d6zelle\u015ftirme:<\/strong> Font ikonlar\u0131 genellikle tek renkte veya s\u0131n\u0131rl\u0131 renk paletleriyle gelir. Birden fazla renk veya karma\u015f\u0131k grafikler i\u00e7eren ikonlar i\u00e7in uygun de\u011fildir.<br \/>\n*   <strong>Boyut ve \u00d6l\u00e7ekleme:<\/strong> Font ikonlar\u0131, metin gibi \u00f6l\u00e7eklenir. Piksel tabanl\u0131d\u0131rlar ve \u00e7ok b\u00fcy\u00fck boyutlarda pikselle\u015fme veya bulan\u0131kla\u015fma e\u011filimi g\u00f6sterebilirler.<br \/>\n*   <strong>Paket Boyutu:<\/strong> \u00c7ok say\u0131da ikon i\u00e7eren font dosyalar\u0131, uygulaman\u0131z\u0131n ba\u015flang\u0131\u00e7 paket boyutunu art\u0131rabilir.<\/p>\n<p>\u00d6zel SVG ikonlar\u0131 ise bu k\u0131s\u0131tlamalar\u0131n \u00e7o\u011funu ortadan kald\u0131r\u0131r ve bir\u00e7ok avantaj sunar:<\/p>\n<p>*   <strong>\u00c7\u00f6z\u00fcn\u00fcrl\u00fck Ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131:<\/strong> SVG&#8217;ler vekt\u00f6r tabanl\u0131d\u0131r, yani herhangi bir \u00e7\u00f6z\u00fcn\u00fcrl\u00fckte veya boyutta kalitelerini kaybetmeden \u00f6l\u00e7eklenebilirler. Pikselle\u015fme veya bulan\u0131kl\u0131k sorunu ya\u015fanmaz.<br \/>\n*   <strong>Tam \u00d6zelle\u015ftirme:<\/strong> SVG ikonlar\u0131, CSS ile kolayca renklendirilebilir, boyutland\u0131r\u0131labilir ve d\u00f6n\u00fc\u015ft\u00fcr\u00fclebilir. \u0130\u00e7erdikleri patikalar ve \u015fekiller sayesinde karma\u015f\u0131k, \u00e7ok renkli tasar\u0131mlar da desteklenir.<br \/>\n*   <strong>Daha K\u00fc\u00e7\u00fck Dosya Boyutlar\u0131:<\/strong> \u0130yi optimize edilmi\u015f SVG dosyalar\u0131, genellikle e\u015fde\u011fer bitmap (PNG, JPG) veya font ikonlar\u0131na g\u00f6re daha k\u00fc\u00e7\u00fck boyutludur.<br \/>\n*   <strong>Eri\u015filebilirlik:<\/strong> SVG&#8217;ler, anlamsal olarak daha zengin olabilir ve ekran okuyucular taraf\u0131ndan daha iyi yorumlanabilir.<br \/>\n*   <strong>Marka Tutarl\u0131l\u0131\u011f\u0131:<\/strong> \u015eirketinizin veya projenizin \u00f6zel ikon setini kullanarak marka kimli\u011finizi uygulaman\u0131za sorunsuz bir \u015fekilde entegre edebilirsiniz.<\/p>\n<p>Bu avantajlar g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, \u00f6zel SVG ikonlar\u0131n\u0131 Angular Material projelerinize dahil etmek, uygulaman\u0131z\u0131n g\u00f6rsel kalitesini ve esnekli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir.<\/p>\n<h2>\u00d6zel SVG \u0130konlar\u0131n\u0131 Entegre Etmeye Ba\u015flama<\/h2>\n<p>Angular Material&#8217;da \u00f6zel SVG ikonlar\u0131n\u0131 kullanmak i\u00e7in birka\u00e7 temel ad\u0131mdan ge\u00e7memiz gerekiyor. Bu ad\u0131mlar, ikonlar\u0131 uygulaman\u0131zda kaydedip ard\u0131ndan bile\u015fenlerinizde kullanmay\u0131 i\u00e7erir.<\/p>\n<h3>Gereksinimler<\/h3>\n<p>Ba\u015flamadan \u00f6nce, a\u015fa\u011f\u0131daki gereksinimlerin kar\u015f\u0131land\u0131\u011f\u0131ndan emin olun:<\/p>\n<p>*   <strong>Angular CLI Projesi:<\/strong> Angular CLI ile olu\u015fturulmu\u015f ve \u00e7al\u0131\u015fan bir Angular projesi.<br \/>\n*   <strong>Angular Material Kurulumu:<\/strong> Projenize Angular Material&#8217;\u0131n do\u011fru \u015fekilde kurulmu\u015f ve yap\u0131land\u0131r\u0131lm\u0131\u015f olmas\u0131. E\u011fer kurulu de\u011filse, <code>ng add @angular\/material<\/code> komutunu kullanarak ekleyebilirsiniz.<br \/>\n*   <strong>SVG \u0130kon Dosyalar\u0131:<\/strong> Kullanmak istedi\u011finiz \u00f6zel SVG ikon dosyalar\u0131 (<code>.svg<\/code> uzant\u0131l\u0131). Bu dosyalar\u0131n do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f olmas\u0131 \u00f6nemlidir. Basit bir SVG dosyas\u0131 genellikle \u015f\u00f6yle g\u00f6r\u00fcn\u00fcr:<\/p>\n<pre><code class=\"language-xml\"><!-- my-custom-icon.svg -->\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n      <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"\/>\n      <path d=\"M0 0h24v24H0z\" fill=\"none\"\/>\n    <\/svg><\/code><\/pre>\n<p>    <code>viewBox<\/code> \u00f6zniteli\u011fi, ikonun \u00f6l\u00e7eklenmesi i\u00e7in kritik \u00f6neme sahiptir. <code>fill=\"currentColor\"<\/code> ise ikonun renginin \u00fcst elementin metin rengini almas\u0131n\u0131 sa\u011flar, bu da CSS ile kolayca renk de\u011fi\u015ftirmemize olanak tan\u0131r.<\/p>\n<h3>Ad\u0131m 1: <code>MatIconModule<\/code> ve <code>MatIconRegistry<\/code>&#8216;yi \u0130mport Etme<\/h3>\n<p>\u00d6ncelikle, ikon sistemini kullanabilmek i\u00e7in <code>MatIconModule<\/code>&#8216;\u00fc projenize dahil etmeniz gerekir. Ayr\u0131ca, SVG ikonlar\u0131n\u0131 kaydetmek i\u00e7in <code>MatIconRegistry<\/code> servisine ve g\u00fcvenlik nedeniyle <code>DomSanitizer<\/code> servisine ihtiyac\u0131m\u0131z olacak.<\/p>\n<p>Genellikle, bu import&#8217;lar <code>app.module.ts<\/code> dosyas\u0131na veya uygulaman\u0131z\u0131n payla\u015f\u0131lan (shared) mod\u00fcl\u00fcne eklenir.<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.module.ts\nimport { NgModule } from '@angular\/core';\nimport { BrowserModule } from '@angular\/platform-browser';\nimport { BrowserAnimationsModule } from '@angular\/platform-browser\/animations';\nimport { MatIconModule, MatIconRegistry } from '@angular\/material\/icon'; \/\/ MatIconModule ve MatIconRegistry\nimport { HttpClientModule } from '@angular\/common\/http'; \/\/ SVG dosyalar\u0131n\u0131 HTTP ile \u00e7ekmek i\u00e7in\nimport { DomSanitizer } from '@angular\/platform-browser'; \/\/ G\u00fcvenlik i\u00e7in\n\nimport { AppComponent } from '.\/app.component';\n\n@NgModule({\n  declarations: [\n    AppComponent\n  ],\n  imports: [\n    BrowserModule,\n    BrowserAnimationsModule,\n    HttpClientModule, \/\/ Gerekli\n    MatIconModule     \/\/ Gerekli\n  ],\n  providers: [],\n  bootstrap: [AppComponent]\n})\nexport class AppModule {\n  constructor(\n    private matIconRegistry: MatIconRegistry,\n    private domSanitizer: DomSanitizer\n  ) {\n    \/\/ Burada ikonlar\u0131 kaydedece\u011fiz\n  }\n}<\/code><\/pre>\n<p><code>HttpClientModule<\/code>&#8216;\u00fcn import edilmesi, <code>MatIconRegistry<\/code>&#8216;nin SVG dosyalar\u0131n\u0131 HTTP \u00fczerinden \u00e7ekebilmesi i\u00e7in gereklidir.<\/p>\n<h3>Ad\u0131m 2: SVG \u0130konlar\u0131n\u0131 Kaydetme<\/h3>\n<p><code>MatIconRegistry<\/code> servisi, SVG ikonlar\u0131n\u0131 uygulaman\u0131z\u0131n global ikon setine kaydetmek i\u00e7in kullan\u0131l\u0131r. Bu servis, ikonlar\u0131 bir adla ili\u015fkilendirir, b\u00f6ylece <code><mat-icon><\/code> bile\u015feni arac\u0131l\u0131\u011f\u0131yla bu adla \u00e7a\u011fr\u0131labilirler.<\/p>\n<p>\u0130konlar\u0131 kaydetmek i\u00e7in <code>MatIconRegistry<\/code>&#8216;nin farkl\u0131 metodlar\u0131 bulunur:<\/p>\n<p>*   <code>addSvgIcon(iconName: string, url: SafeResourceUrl)<\/code>: Belirli bir URL&#8217;den tek bir SVG ikonunu kaydeder.<br \/>\n*   <code>addSvgIconSet(namespace: string, url: SafeResourceUrl)<\/code>: Belirli bir URL&#8217;den bir SVG ikon setini (birden fazla ikon i\u00e7eren bir SVG sprite dosyas\u0131) kaydeder.<br \/>\n*   <code>addSvgIconLiteral(iconName: string, literal: SafeHtml)<\/code>: Do\u011frudan SVG i\u00e7eri\u011fini (string olarak) kaydeder.<\/p>\n<p>En yayg\u0131n kullan\u0131m, harici SVG dosyalar\u0131n\u0131 <code>addSvgIcon<\/code> ile kaydetmektir. Bu metod, bir URL bekler, ancak Angular&#8217;\u0131n g\u00fcvenlik politikalar\u0131 nedeniyle do\u011frudan bir string URL veremeyiz. Bu noktada <code>DomSanitizer<\/code> devreye girer. <code>DomSanitizer.bypassSecurityTrustResourceUrl()<\/code> metodunu kullanarak, Angular&#8217;a bu URL&#8217;nin g\u00fcvenli oldu\u011funu ve i\u00e7eri\u011finin i\u015flenmesine izin verildi\u011fini belirtiriz.<\/p>\n<p>\u0130konlar\u0131n\u0131z\u0131 genellikle uygulaman\u0131n ba\u015flang\u0131c\u0131nda, <code>AppModule<\/code>&#8216;\u00fcn constructor&#8217;\u0131nda veya bir servis arac\u0131l\u0131\u011f\u0131yla kaydetmek iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<p>\u00d6rnek olarak, <code>src\/assets\/icons<\/code> klas\u00f6r\u00fcnde bulunan <code>home.svg<\/code> ve <code>settings.svg<\/code> ad\u0131nda iki \u00f6zel ikonumuz oldu\u011funu varsayal\u0131m.<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.module.ts\nimport { NgModule } from '@angular\/core';\n\/\/ ... di\u011fer import'lar ...\nimport { MatIconModule, MatIconRegistry } from '@angular\/material\/icon';\nimport { HttpClientModule } from '@angular\/common\/http';\nimport { DomSanitizer } from '@angular\/platform-browser';\n\n@NgModule({\n  \/\/ ...\n})\nexport class AppModule {\n  constructor(\n    private matIconRegistry: MatIconRegistry,\n    private domSanitizer: DomSanitizer\n  ) {\n    \/\/ Her bir SVG ikonunu ayr\u0131 ayr\u0131 kaydetme\n    this.matIconRegistry.addSvgIcon(\n      'custom_home', \/\/ Bu ikonun kullan\u0131laca\u011f\u0131 ad\n      this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/home.svg')\n    );\n\n    this.matIconRegistry.addSvgIcon(\n      'custom_settings', \/\/ Bu ikonun kullan\u0131laca\u011f\u0131 ad\n      this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/settings.svg')\n    );\n\n    \/\/ Bir ikon setini kaydetme \u00f6rne\u011fi (e\u011fer ikonlar\u0131n\u0131z bir sprite dosyas\u0131ndaysa)\n    \/\/ this.matIconRegistry.addSvgIconSet(\n    \/\/   'my_icons', \/\/ Setin ad\u0131\n    \/\/   this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/my-icon-set.svg')\n    \/\/ );\n  }\n}<\/code><\/pre>\n<p>Burada, &#8216;custom_home&#8217; ve &#8216;custom_settings&#8217; adlar\u0131n\u0131 kullanarak SVG ikonlar\u0131m\u0131z\u0131 kaydettik. Bu adlar, daha sonra HTML \u015fablonlar\u0131m\u0131zda ikonlar\u0131 \u00e7a\u011f\u0131rmak i\u00e7in kullan\u0131lacak.<\/p>\n<p><strong>G\u00fcvenlik Uyar\u0131s\u0131:<\/strong> <code>bypassSecurityTrustResourceUrl<\/code> metodunu kullan\u0131rken dikkatli olun. Yaln\u0131zca g\u00fcvendi\u011finiz kaynaklardan gelen URL&#8217;leri bu metodla i\u015faretlemelisiniz. K\u00f6t\u00fc niyetli bir URL&#8217;nin ge\u00e7irilmesi, uygulaman\u0131z\u0131 XSS (Cross-Site Scripting) sald\u0131r\u0131lar\u0131na kar\u015f\u0131 savunmas\u0131z hale getirebilir. Kendi sunucunuzdaki veya bilinen, g\u00fcvenli CDN&#8217;lerdeki SVG dosyalar\u0131 genellikle g\u00fcvenlidir.<\/p>\n<h3>Ad\u0131m 3: Kaydedilen \u0130konlar\u0131 Kullanma<\/h3>\n<p>\u0130konlar\u0131 <code>MatIconRegistry<\/code>&#8216;ye kaydettikten sonra, bunlar\u0131 uygulaman\u0131z\u0131n herhangi bir yerinde <code><mat-icon><\/code> bile\u015feni arac\u0131l\u0131\u011f\u0131yla kullanabilirsiniz. Tek yapman\u0131z gereken, <code>svgIcon<\/code> \u00f6zelli\u011fine kaydetti\u011finiz ikonun ad\u0131n\u0131 ge\u00e7irmektir.<\/p>\n<pre><code class=\"language-html\"><!-- app.component.html -->\n<div>\n  <h2>\u00d6zel SVG \u0130konlar\u0131<\/h2>\n  <p>Ana Sayfa: <mat-icon svgIcon=\"custom_home\"><\/mat-icon><\/p>\n  <p>Ayarlar: <mat-icon svgIcon=\"custom_settings\"><\/mat-icon><\/p>\n\n  <h3>\u0130konlar\u0131 Stilize Etme<\/h3>\n  <mat-icon svgIcon=\"custom_home\" class=\"large-icon red-icon\"><\/mat-icon>\n  <mat-icon svgIcon=\"custom_settings\" style=\"font-size: 48px; color: blue;\"><\/mat-icon>\n<\/div><\/code><\/pre>\n<p>SVG ikonlar\u0131n\u0131 stilize etmek, font ikonlar\u0131na g\u00f6re daha esnektir. <code><mat-icon><\/code> bile\u015feni, SVG i\u00e7eri\u011fini do\u011frudan DOM&#8217;a ekler ve bu SVG&#8217;nin <code>fill=\"currentColor\"<\/code> veya <code>stroke=\"currentColor\"<\/code> gibi \u00f6zellikler i\u00e7ermesi durumunda, ikonun rengi \u00fcst elementin metin rengini (CSS <code>color<\/code> \u00f6zelli\u011fi) al\u0131r. Boyutland\u0131rma i\u00e7in ise <code>font-size<\/code> \u00f6zelli\u011fi kullan\u0131l\u0131r.<\/p>\n<pre><code class=\"language-css\">\/<em> app.component.css <\/em>\/\n.large-icon {\n  font-size: 36px; \/<em> \u0130konun boyutunu ayarlar <\/em>\/\n  width: 36px;     \/<em> SVG'nin geni\u015fli\u011fini de ayarlar <\/em>\/\n  height: 36px;    \/<em> SVG'nin y\u00fcksekli\u011fini de ayarlar <\/em>\/\n}\n\n.red-icon {\n  color: red; \/<em> \u0130konun rengini ayarlar <\/em>\/\n}<\/code><\/pre>\n<p><code>font-size<\/code> sadece ikonun genel boyutunu etkilerken, <code>width<\/code> ve <code>height<\/code> \u00f6zelliklerini de ayarlamak, \u00f6zellikle baz\u0131 taray\u0131c\u0131larda veya karma\u015f\u0131k SVG&#8217;lerde daha tutarl\u0131 bir g\u00f6r\u00fcn\u00fcm sa\u011flayabilir.<\/p>\n<h2>En \u0130yi Uygulamalar ve Geli\u015fmi\u015f Kullan\u0131m<\/h2>\n<p>B\u00fcy\u00fck ve karma\u015f\u0131k uygulamalarda, ikonlar\u0131 y\u00f6netme yakla\u015f\u0131m\u0131m\u0131z\u0131 daha mod\u00fcler ve s\u00fcrd\u00fcr\u00fclebilir hale getirmemiz gerekir.<\/p>\n<h3>\u0130konlar\u0131 Bir Serviste Y\u00f6netme<\/h3>\n<p><code>AppModule<\/code>&#8216;\u00fcn constructor&#8217;\u0131nda t\u00fcm ikonlar\u0131 kaydetmek, k\u00fc\u00e7\u00fck uygulamalar i\u00e7in kabul edilebilir olsa da, ikon say\u0131s\u0131 artt\u0131k\u00e7a veya farkl\u0131 mod\u00fcllerin farkl\u0131 ikonlara ihtiyac\u0131 oldu\u011funda bu yakla\u015f\u0131m karma\u015f\u0131kla\u015fabilir. Daha iyi bir \u00e7\u00f6z\u00fcm, ikon kay\u0131t mant\u0131\u011f\u0131n\u0131 ayr\u0131 bir Angular servisine ta\u015f\u0131makt\u0131r.<\/p>\n<p>1.  <strong>\u0130kon Servisi Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">ng generate service core\/icon<\/code><\/pre>\n<p>    Bu, <code>src\/app\/core\/icon.service.ts<\/code> yolunda bir servis olu\u015fturacakt\u0131r (veya tercih etti\u011finiz herhangi bir yol).<\/p>\n<p>2.  <strong><code>IconService<\/code> \u0130\u00e7eri\u011fi:<\/strong><\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/core\/icon.service.ts\n    import { Injectable } from '@angular\/core';\n    import { MatIconRegistry } from '@angular\/material\/icon';\n    import { DomSanitizer } from '@angular\/platform-browser';\n\n    interface SvgIcon {\n      name: string;\n      path: string;\n    }\n\n    @Injectable({\n      providedIn: 'root'\n    })\n    export class IconService {\n\n      private readonly iconPaths: SvgIcon[] = [\n        { name: 'custom_home', path: '..\/assets\/icons\/home.svg' },\n        { name: 'custom_settings', path: '..\/assets\/icons\/settings.svg' },\n        { name: 'custom_profile', path: '..\/assets\/icons\/profile.svg' },\n        \/\/ ... di\u011fer ikonlar\n      ];\n\n      constructor(\n        private matIconRegistry: MatIconRegistry,\n        private domSanitizer: DomSanitizer\n      ) { }\n\n      public registerIcons(): void {\n        this.iconPaths.forEach(icon => {\n          this.matIconRegistry.addSvgIcon(\n            icon.name,\n            this.domSanitizer.bypassSecurityTrustResourceUrl(icon.path)\n          );\n        });\n\n        \/\/ \u0130sterseniz ikon setlerini de burada kaydedebilirsiniz\n        \/\/ this.matIconRegistry.addSvgIconSet(\n        \/\/   'my_icon_set',\n        \/\/   this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/my-icon-set.svg')\n        \/\/ );\n      }\n    }<\/code><\/pre>\n<p>3.  <strong><code>AppModule<\/code>&#8216;de Servisi \u00c7a\u011f\u0131rma:<\/strong><br \/>\n    Art\u0131k <code>AppModule<\/code>&#8216;\u00fcn constructor&#8217;\u0131nda sadece <code>IconService<\/code>&#8216;i enjekte edip <code>registerIcons()<\/code> metodunu \u00e7a\u011f\u0131rabiliriz.<\/p>\n<pre><code class=\"language-typescript\">\/\/ app.module.ts\n    import { NgModule } from '@angular\/core';\n    \/\/ ... di\u011fer import'lar ...\n    import { IconService } from '.\/core\/icon.service'; \/\/ Yeni servisimiz\n\n    @NgModule({\n      \/\/ ...\n    })\n    export class AppModule {\n      constructor(private iconService: IconService) {\n        this.iconService.registerIcons(); \/\/ \u0130konlar\u0131 uygulama ba\u015flang\u0131c\u0131nda kaydet\n      }\n    }<\/code><\/pre>\n<p>Bu yap\u0131land\u0131rma, ikon y\u00f6netimi logic&#8217;ini tek bir yerde toplar, kod tekrar\u0131n\u0131 azalt\u0131r ve gelecekte yeni ikon eklemeyi veya mevcut ikonlar\u0131 d\u00fczenlemeyi kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>\u0130kon Y\u00fckleme Stratejileri<\/h3>\n<p>T\u00fcm ikonlar\u0131 uygulama ba\u015flang\u0131c\u0131nda y\u00fcklemek (eager loading), \u00e7o\u011fu k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli uygulama i\u00e7in yeterlidir. Ancak \u00e7ok say\u0131da ikonunuz varsa veya baz\u0131 ikonlar yaln\u0131zca belirli, nadiren kullan\u0131lan mod\u00fcllerde gerekiyorsa, gecikmeli y\u00fckleme (lazy loading) stratejilerini d\u00fc\u015f\u00fcnebilirsiniz.<\/p>\n<p>*   <strong>Eager Loading (Mevcut Yakla\u015f\u0131m):<\/strong> T\u00fcm ikonlar\u0131 uygulama ba\u015flang\u0131c\u0131nda (genellikle <code>AppModule<\/code>&#8216;de veya ana bir serviste) kaydetmek. Basit ve kolay uygulanabilir.<br \/>\n*   <strong>Lazy Loading (Gecikmeli Y\u00fckleme):<\/strong> \u0130konlar\u0131 yaln\u0131zca ihtiya\u00e7 duyulan mod\u00fcl y\u00fcklendi\u011finde kaydetmek. \u00d6rne\u011fin, bir <code>AdminModule<\/code>&#8216;\u00fcn\u00fcz varsa ve bu mod\u00fcl\u00fcn kendine \u00f6zg\u00fc ikonlar\u0131 varsa, bu ikonlar\u0131 <code>AdminModule<\/code>&#8216;\u00fcn kendisinde veya ona \u00f6zel bir serviste kaydedebilirsiniz.<\/p>\n<pre><code class=\"language-typescript\">\/\/ src\/app\/admin\/admin.module.ts\n    import { NgModule } from '@angular\/core';\n    import { CommonModule } from '@angular\/common';\n    import { AdminRoutingModule } from '.\/admin-routing.module';\n    import { MatIconModule, MatIconRegistry } from '@angular\/material\/icon';\n    import { DomSanitizer } from '@angular\/platform-browser';\n\n    @NgModule({\n      declarations: [],\n      imports: [\n        CommonModule,\n        AdminRoutingModule,\n        MatIconModule \/\/ Sadece bu mod\u00fclde MatIconModule'e ihtiyac\u0131m\u0131z varsa\n      ]\n    })\n    export class AdminModule {\n      constructor(\n        private matIconRegistry: MatIconRegistry,\n        private domSanitizer: DomSanitizer\n      ) {\n        \/\/ Admin mod\u00fcl\u00fcne \u00f6zg\u00fc ikonlar\u0131 burada kaydet\n        this.matIconRegistry.addSvgIcon(\n          'admin_dashboard',\n          this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/admin-dashboard.svg')\n        );\n        \/\/ ...\n      }\n    }<\/code><\/pre>\n<p>Bu yakla\u015f\u0131m, ana uygulaman\u0131n ba\u015flang\u0131\u00e7 paket boyutunu k\u00fc\u00e7\u00fcltmeye yard\u0131mc\u0131 olabilir.<\/p>\n<h3>SVG Optimizasyonu<\/h3>\n<p>SVG dosyalar\u0131, tasar\u0131m yaz\u0131l\u0131mlar\u0131ndan d\u0131\u015fa aktar\u0131ld\u0131\u011f\u0131nda genellikle gereksiz meta veriler, yorumlar, bo\u015fluklar ve optimize edilmemi\u015f patikalar i\u00e7erir. Bu durum, dosya boyutunu gereksiz yere art\u0131r\u0131r. Daha k\u00fc\u00e7\u00fck SVG dosyalar\u0131, uygulaman\u0131z\u0131n daha h\u0131zl\u0131 y\u00fcklenmesine ve daha iyi performans g\u00f6stermesine yard\u0131mc\u0131 olur.<\/p>\n<p>*   <strong>SVGO (SVG Optimizer):<\/strong> SVG dosyalar\u0131n\u0131 optimize etmek i\u00e7in pop\u00fcler bir Node.js arac\u0131d\u0131r. Gereksiz elemanlar\u0131 kald\u0131r\u0131r, patikalar\u0131 basitle\u015ftirir ve dosya boyutunu \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<pre><code class=\"language-bash\">npm install -g svgo\n    svgo -f assets\/icons --pretty<\/code><\/pre>\n<p>    Bu komut, <code>assets\/icons<\/code> klas\u00f6r\u00fcndeki t\u00fcm SVG dosyalar\u0131n\u0131 optimize eder.<br \/>\n*   <strong>Tasar\u0131m Ara\u00e7lar\u0131:<\/strong> Tasar\u0131mc\u0131lar\u0131n\u0131zdan SVG&#8217;leri d\u0131\u015fa aktar\u0131rken &#8220;optimize edilmi\u015f&#8221; veya &#8220;web i\u00e7in&#8221; se\u00e7eneklerini kullanmalar\u0131n\u0131 isteyin.<br \/>\n*   <strong>Inline SVG:<\/strong> Baz\u0131 durumlarda, \u00e7ok k\u00fc\u00e7\u00fck ve kritik ikonlar i\u00e7in SVG i\u00e7eri\u011fini do\u011frudan HTML&#8217;e g\u00f6mmek (inline SVG) faydal\u0131 olabilir, ancak bu, <code>MatIconRegistry<\/code>&#8216;nin d\u0131\u015f\u0131na \u00e7\u0131kar.<\/p>\n<h3>Eri\u015filebilirlik (Accessibility)<\/h3>\n<p>\u0130konlar genellikle g\u00f6rsel ipu\u00e7lar\u0131 sa\u011flar, ancak ekran okuyucular veya g\u00f6rme engelli kullan\u0131c\u0131lar i\u00e7in bu ipu\u00e7lar\u0131 yetersiz kalabilir. \u0130konlar\u0131n eri\u015filebilirli\u011fini art\u0131rmak i\u00e7in <code>aria-label<\/code> veya <code>aria-labelledby<\/code> gibi ARIA \u00f6zelliklerini kullanmal\u0131y\u0131z.<\/p>\n<p>*   <strong><code>aria-label<\/code> Kullan\u0131m\u0131:<\/strong> \u0130konun amac\u0131n\u0131 a\u00e7\u0131klayan k\u0131sa bir metin sa\u011flay\u0131n.<\/p>\n<pre><code class=\"language-html\"><mat-icon svgIcon=\"custom_home\" aria-label=\"Ana Sayfa\"><\/mat-icon>\n    <button mat-icon-button aria-label=\"Ayarlar\">\n      <mat-icon svgIcon=\"custom_settings\"><\/mat-icon>\n    <\/button><\/code><\/pre>\n<p>*   <strong>G\u00f6rsel Olarak Gizlenmi\u015f Metin:<\/strong> Baz\u0131 durumlarda, ikonun yan\u0131nda g\u00f6rsel olarak gizlenmi\u015f ancak ekran okuyucular taraf\u0131ndan okunabilen metinler kullanmak isteyebilirsiniz.<\/p>\n<pre><code class=\"language-html\"><mat-icon svgIcon=\"custom_profile\" aria-hidden=\"true\"><\/mat-icon>\n    <span class=\"sr-only\">Kullan\u0131c\u0131 Profili<\/span><\/code><\/pre>\n<p>    Burada <code>aria-hidden=\"true\"<\/code> ikonu ekran okuyucudan gizler ve <code>sr-only<\/code> (screen reader only) s\u0131n\u0131f\u0131 g\u00f6rsel olarak gizlenmi\u015f metni sa\u011flar.<br \/>\n*   <strong>\u0130konun Anlams\u0131z Oldu\u011fu Durumlar:<\/strong> E\u011fer bir ikon sadece dekoratifse ve bir anlam ta\u015f\u0131m\u0131yorsa, <code>aria-hidden=\"true\"<\/code> \u00f6zelli\u011fini kullanarak ekran okuyucular\u0131n onu yok saymas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<pre><code class=\"language-html\"><mat-icon svgIcon=\"custom_decorative_star\" aria-hidden=\"true\"><\/mat-icon><\/code><\/pre>\n<p>Bu uygulamalar, uygulaman\u0131z\u0131n daha kapsay\u0131c\u0131 ve eri\u015filebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h2>\u00d6rnek Uygulama<\/h2>\n<p>\u015eimdiye kadar \u00f6\u011frendiklerimizi bir araya getiren basit bir Angular projesi olu\u015ftural\u0131m.<\/p>\n<p>1.  <strong>Yeni Angular Projesi Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">ng new angular-material-svg-icons --style=scss --routing=false\n    cd angular-material-svg-icons<\/code><\/pre>\n<p>2.  <strong>Angular Material Ekleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">ng add @angular\/material<\/code><\/pre>\n<p>    Temay\u0131 se\u00e7in (\u00f6rne\u011fin, <code>deeppurple-amber<\/code>), Typography&#8217;yi etkinle\u015ftirin ve Browser Animations&#8217;\u0131 ayarlay\u0131n.<\/p>\n<p>3.  <strong>SVG \u0130konlar\u0131 Olu\u015fturma:<\/strong><br \/>\n    <code>src\/assets\/icons<\/code> klas\u00f6r\u00fcn\u00fc olu\u015fturun. \u0130\u00e7ine <code>home.svg<\/code> ve <code>settings.svg<\/code> ad\u0131nda iki dosya ekleyin:<\/p>\n<p>    <code>src\/assets\/icons\/home.svg<\/code>:<\/p>\n<pre><code class=\"language-xml\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n      <path d=\"M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z\"\/>\n      <path d=\"M0 0h24v24H0z\" fill=\"none\"\/>\n    <\/svg><\/code><\/pre>\n<p>    <code>src\/assets\/icons\/settings.svg<\/code>:<\/p>\n<pre><code class=\"language-xml\"><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\" fill=\"currentColor\">\n      <path d=\"M19.43 12.98c.04-.32.07-.64.07-.98s-.03-.66-.07-.98l2.11-1.65c.19-.15.24-.42.12-.64l-2-3.46c-.12-.22-.39-.3-.61-.22l-2.49 1c-.52-.4-1.09-.76-1.71-1.06L14 2.01c-.08-.23-.3-.39-.55-.39h-4c-.25 0-.47.16-.55.39L7.52 4.08c-.62.3-1.19.66-1.71 1.06l-2.49-1c-.22-.08-.49 0-.61.22l-2 3.46c-.12.22-.07.49.12.64l2.11 1.65c-.04.32-.07.64-.07.98s.03.66.07.98l-2.11 1.65c-.19.15-.24.42-.12.64l2 3.46c.12.22.39.3.61.22l2.49-1c.52.4 1.09.76 1.71 1.06L9.99 21.99c.08.23.3.39.55.39h4c.25 0 .47-.16.55-.39l.48-2.07c.62-.3 1.19-.66 1.71-1.06l2.49 1c.22.08.49 0 .61-.22l2-3.46c.12-.22.07-.49-.12-.64l-2.11-1.65zM12 15.5c-1.93 0-3.5-1.57-3.5-3.5s1.57-3.5 3.5-3.5 3.5 1.57 3.5 3.5-1.57 3.5-3.5 3.5z\"\/>\n    <\/svg><\/code><\/pre>\n<p>4.  <strong><code>AppModule<\/code>&#8216;\u00fc G\u00fcncelleme:<\/strong><br \/>\n    <code>src\/app\/app.module.ts<\/code> dosyas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi d\u00fczenleyin:<\/p>\n<pre><code class=\"language-typescript\">import { NgModule } from '@angular\/core';\n    import { BrowserModule } from '@angular\/platform-browser';\n    import { BrowserAnimationsModule } from '@angular\/platform-browser\/animations';\n    import { HttpClientModule } from '@angular\/common\/http';\n    import { MatIconModule, MatIconRegistry } from '@angular\/material\/icon';\n    import { DomSanitizer } from '@angular\/platform-browser';\n\n    import { AppComponent } from '.\/app.component';\n\n    @NgModule({\n      declarations: [\n        AppComponent\n      ],\n      imports: [\n        BrowserModule,\n        BrowserAnimationsModule,\n        HttpClientModule,\n        MatIconModule\n      ],\n      providers: [],\n      bootstrap: [AppComponent]\n    })\n    export class AppModule {\n      constructor(\n        private matIconRegistry: MatIconRegistry,\n        private domSanitizer: DomSanitizer\n      ) {\n        this.matIconRegistry.addSvgIcon(\n          'my_home',\n          this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/home.svg')\n        );\n        this.matIconRegistry.addSvgIcon(\n          'my_settings',\n          this.domSanitizer.bypassSecurityTrustResourceUrl('..\/assets\/icons\/settings.svg')\n        );\n      }\n    }<\/code><\/pre>\n<p>5.  <strong><code>AppComponent<\/code> \u015eablonunu G\u00fcncelleme:<\/strong><br \/>\n    <code>src\/app\/app.component.html<\/code> dosyas\u0131n\u0131 a\u015fa\u011f\u0131daki gibi d\u00fczenleyin:<\/p>\n<pre><code class=\"language-html\"><div style=\"text-align:center; margin-top: 20px;\">\n      \n\n      <h2>Ana Sayfa \u0130konu<\/h2>\n      <mat-icon svgIcon=\"my_home\"><\/mat-icon>\n      <mat-icon svgIcon=\"my_home\" style=\"font-size: 32px; color: green;\"><\/mat-icon>\n      <mat-icon svgIcon=\"my_home\" class=\"large-red-icon\" aria-label=\"Ana Sayfa\"><\/mat-icon>\n\n      <h2>Ayarlar \u0130konu<\/h2>\n      <mat-icon svgIcon=\"my_settings\"><\/mat-icon>\n      <mat-icon svgIcon=\"my_settings\" style=\"font-size: 48px; color: purple;\"><\/mat-icon>\n      <mat-icon svgIcon=\"my_settings\" class=\"large-red-icon\" aria-label=\"Ayarlar\"><\/mat-icon>\n\n      <p>Material Design \u0130kon \u00d6rne\u011fi (kar\u015f\u0131la\u015ft\u0131rma i\u00e7in):<\/p>\n      <mat-icon>star<\/mat-icon>\n      <mat-icon>delete<\/mat-icon>\n    <\/div><\/code><\/pre>\n<p>6.  <strong><code>AppComponent<\/code> Stillerini G\u00fcncelleme:<\/strong><br \/>\n    <code>src\/app\/app.component.scss<\/code> dosyas\u0131na a\u015fa\u011f\u0131daki stilleri ekleyin:<\/p>\n<pre><code class=\"language-scss\">.large-red-icon {\n      font-size: 64px;\n      width: 64px;\n      height: 64px;\n      color: red;\n      margin: 0 10px;\n    }<\/code><\/pre>\n<p>7.  <strong>Uygulamay\u0131 \u00c7al\u0131\u015ft\u0131rma:<\/strong><\/p>\n<pre><code class=\"language-bash\">ng serve -o<\/code><\/pre>\n<p>    Taray\u0131c\u0131n\u0131zda \u00f6zel SVG ikonlar\u0131n\u0131z\u0131n Material Design ikonlar\u0131yla birlikte g\u00f6r\u00fcnt\u00fclendi\u011fini g\u00f6receksiniz.<\/p>\n<h2>S\u0131k\u00e7a Sorulan Sorular ve Sorun Giderme<\/h2>\n<p>*   <strong>\u0130konlar Neden G\u00f6r\u00fcnm\u00fcyor?<\/strong><br \/>\n    *   <strong>Yol Hatas\u0131:<\/strong> SVG dosyas\u0131n\u0131n yolunun (<code>..\/assets\/icons\/home.svg<\/code>) do\u011fru oldu\u011fundan emin olun. Taray\u0131c\u0131n\u0131n geli\u015ftirici ara\u00e7lar\u0131ndaki a\u011f (network) sekmesini kontrol ederek SVG dosyas\u0131n\u0131n ba\u015far\u0131l\u0131 bir \u015fekilde y\u00fcklenip y\u00fcklenmedi\u011fini g\u00f6rebilirsiniz. 404 hatas\u0131 al\u0131yorsan\u0131z yol yanl\u0131\u015ft\u0131r.<br \/>\n    *   <strong><code>MatIconModule<\/code> Import Edilmedi:<\/strong> <code>AppModule<\/code> veya ilgili mod\u00fclde <code>MatIconModule<\/code>&#8216;\u00fcn import edildi\u011finden emin olun.<br \/>\n    *   <strong><code>HttpClientModule<\/code> Eksik:<\/strong> SVG dosyalar\u0131 HTTP iste\u011fiyle \u00e7ekildi\u011fi i\u00e7in <code>HttpClientModule<\/code>&#8216;\u00fcn <code>AppModule<\/code>&#8216;e import edildi\u011finden emin olun.<br \/>\n    *   <strong>\u0130kon Ad\u0131 Yanl\u0131\u015f:<\/strong> <code>addSvgIcon()<\/code> ile kaydetti\u011finiz ad (<code>my_home<\/code>) ile <code><mat-icon svgIcon=\"my_home\"><\/code> i\u00e7inde kulland\u0131\u011f\u0131n\u0131z ad\u0131n tam olarak e\u015fle\u015fti\u011finden emin olun.<br \/>\n    *   <strong><code>DomSanitizer<\/code> Kullan\u0131lmad\u0131:<\/strong> URL&#8217;yi <code>domSanitizer.bypassSecurityTrustResourceUrl()<\/code> ile g\u00fcvenli olarak i\u015faretlemediyseniz, Angular g\u00fcvenlik hatas\u0131 verebilir ve ikonu y\u00fcklemeyebilir.<\/p>\n<p>*   <strong>G\u00fcvenlik Uyar\u0131s\u0131 (<code>bypassSecurityTrustResourceUrl<\/code>) Ne Anlama Geliyor?<\/strong><br \/>\n    Bu metod, Angular&#8217;a verdi\u011finiz URL&#8217;nin g\u00fcvenli oldu\u011funu ve i\u00e7eri\u011finin DOM&#8217;a enjekte edilebilece\u011fini bildirir. E\u011fer k\u00f6t\u00fc niyetli bir kaynaktan gelen bir URL&#8217;yi bu metodla i\u015faretlerseniz, uygulaman\u0131z XSS sald\u0131r\u0131lar\u0131na a\u00e7\u0131k hale gelebilir. Bu nedenle, yaln\u0131zca g\u00fcvendi\u011finiz kaynaklardan gelen SVG URL&#8217;lerini kullan\u0131n.<\/p>\n<p>*   <strong>\u0130konlar\u0131n Rengini veya Boyutunu Nas\u0131l De\u011fi\u015ftiririm?<\/strong><br \/>\n    Yukar\u0131da belirtildi\u011fi gibi, SVG dosyas\u0131n\u0131n i\u00e7inde <code>fill=\"currentColor\"<\/code> (veya <code>stroke=\"currentColor\"<\/code>) varsa, <code><mat-icon><\/code> elementine uygulanan <code>color<\/code> CSS \u00f6zelli\u011fi ikonun rengini de\u011fi\u015ftirecektir. Boyut i\u00e7in ise <code>font-size<\/code>, <code>width<\/code> ve <code>height<\/code> CSS \u00f6zelliklerini kullanabilirsiniz.<\/p>\n<p>*   <strong>Dinazmik \u0130kon Y\u00fckleme M\u00fcmk\u00fcn m\u00fc?<\/strong><br \/>\n    Evet, <code>MatIconRegistry<\/code>&#8216;ye istedi\u011finiz zaman yeni ikonlar kaydedebilirsiniz. \u00d6rne\u011fin, bir API&#8217;den dinamik olarak ikon URL&#8217;leri al\u0131p bunlar\u0131 <code>addSvgIcon<\/code> ile kaydedebilirsiniz. Bu, \u00f6zellikle CMS tabanl\u0131 veya kullan\u0131c\u0131 taraf\u0131ndan y\u00f6netilen ikon setleri i\u00e7in faydal\u0131d\u0131r.<\/p>\n<p>*   <strong>SVG Sprite Kullanmal\u0131 m\u0131y\u0131m?<\/strong><br \/>\n    E\u011fer \u00e7ok say\u0131da ikonunuz varsa, bunlar\u0131 tek bir SVG sprite dosyas\u0131na birle\u015ftirmek (SVG <code><symbol><\/code> elemanlar\u0131n\u0131 kullanarak) HTTP isteklerinin say\u0131s\u0131n\u0131 azaltarak performans\u0131 art\u0131rabilir. <code>MatIconRegistry<\/code>&#8216;nin <code>addSvgIconSet()<\/code> metodu bu senaryo i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Angular Material, g\u00fc\u00e7l\u00fc ve esnek bir ikon y\u00f6netim sistemi sunar. Font tabanl\u0131 Material Design ikonlar\u0131 \u00e7o\u011fu senaryo i\u00e7in uygun olsa da, \u00f6zel SVG ikonlar\u0131 kullanmak, uygulaman\u0131z\u0131n g\u00f6rsel kimli\u011fini g\u00fc\u00e7lendirmek, tam \u00f6zelle\u015ftirme sa\u011flamak ve \u00e7\u00f6z\u00fcn\u00fcrl\u00fck ba\u011f\u0131ms\u0131zl\u0131\u011f\u0131 gibi \u00f6nemli avantajlar elde etmek i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p>Bu makalede ele ald\u0131\u011f\u0131m\u0131z ad\u0131mlar\u0131 ve en iyi uygulamalar\u0131 takip ederek, \u00f6zel SVG ikonlar\u0131n\u0131z\u0131 Angular Material projelerinize sorunsuz bir \u015fekilde entegre edebilir, y\u00f6netebilir ve stilize edebilirsiniz. \u0130konlar\u0131 bir serviste y\u00f6netmek, optimize etmek ve eri\u015filebilirli\u011fi g\u00f6z \u00f6n\u00fcnde bulundurmak, daha s\u00fcrd\u00fcr\u00fclebilir ve kullan\u0131c\u0131 dostu uygulamalar geli\u015ftirmenize yard\u0131mc\u0131 olacakt\u0131r. Unutmay\u0131n, iyi y\u00f6netilmi\u015f ikonlar, kullan\u0131c\u0131 deneyimini zenginle\u015ftiren ve uygulaman\u0131z\u0131n profesyonel g\u00f6r\u00fcn\u00fcm\u00fcn\u00fc peki\u015ftiren k\u00fc\u00e7\u00fck ama etkili detaylard\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber Modern web uygulamalar\u0131nda g\u00f6rsel tutarl\u0131l\u0131k ve kullan\u0131c\u0131 deneyimi, ba\u015far\u0131n\u0131n anahtarlar\u0131ndan biridir.","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1488],"tags":[],"class_list":{"0":"post-41505","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-angular","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Angular Material&#039;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Angular Material&#039;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber\" \/>\n<meta property=\"og:description\" content=\"Angular Material&#039;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber Modern web uygulamalar\u0131nda g\u00f6rsel tutarl\u0131l\u0131k ve kullan\u0131c\u0131 deneyimi, ba\u015far\u0131n\u0131n anahtarlar\u0131ndan biridir.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-30T05:00:53+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber\",\"datePublished\":\"2026-04-30T05:00:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\"},\"wordCount\":2328,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Angular\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\",\"name\":\"Angular Material'da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-04-30T05:00:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Angular Material'da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/","og_locale":"tr_TR","og_type":"article","og_title":"Angular Material'da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber","og_description":"Angular Material'da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber Modern web uygulamalar\u0131nda g\u00f6rsel tutarl\u0131l\u0131k ve kullan\u0131c\u0131 deneyimi, ba\u015far\u0131n\u0131n anahtarlar\u0131ndan biridir.","og_url":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-04-30T05:00:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"15 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber","datePublished":"2026-04-30T05:00:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/"},"wordCount":2328,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Angular"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/","url":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/","name":"Angular Material'da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-04-30T05:00:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/angular-materialda-ozel-svg-ikonlari-kullanimi-kapsamli-bir-rehber\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Angular Material&#8217;da \u00d6zel SVG \u0130konlar\u0131 Kullan\u0131m\u0131: Kapsaml\u0131 Bir Rehber"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=41505"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41505\/revisions"}],"predecessor-version":[{"id":41506,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41505\/revisions\/41506"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}