Add Custom Icon in Ionic 2

后端 未结 10 1974
既然无缘
既然无缘 2020-12-02 06:35

I am using Ionic 2 for developing my App. I want to use my custom icons in my app like we use ionic 2 icons using tag. Eg:



        
相关标签:
10条回答
  • 2020-12-02 07:00

    According to ionic team:

    Hey there! Right now it's limited to using ionicons, since underneath it's rendering an ion-icon, and thats handling the platform differences. You could open an issue and we could discuss adding this feature there

    You can see all answers in here:

    https://forum.ionicframework.com/t/anyway-to-custom-the-tabbars-icon-with-my-own-svg-file/46131/16

    I also find this:

    https://www.npmjs.com/package/ionic2-custom-icons ,

    but do not seems a clever solution (I prefer to wait for a solution of Ionic team).

    The best scenario for this is use old way, by creating a class on a scss file.

    0 讨论(0)
  • 2020-12-02 07:01

    This is the easiest way I've found, from the forums at https://forum.ionicframework.com/t/anyway-to-custom-the-tabbars-icon-with-my-own-svg-file/46131/36.

    In your app.scss file, add the following code:

    ion-icon {
        &[class*="appname-"] {
            // Instead of using the font-based icons
            // We're applying SVG masks
            mask-size: contain;
            mask-position: 50% 50%;
            mask-repeat: no-repeat;
            background: currentColor;
            width: 1em;
            height: 1em;
        }
        // custom icons
        &[class*="appname-customicon1"] {
            mask-image: url(../assets/img/customicon1.svg);
        }
        &[class*="appname-customicon2"] {
            mask-image: url(../assets/img/customicon2.svg);
        }
        &[class*="appname-customicon3"] {
            mask-image: url(../assets/img/customicon3.svg);
        }
    }
    

    Then in your templates, you can use the following HTML to create the icon:

    <ion-icon name="appname-customicon"></ion-icon>
    

    This is far less complicated than using the font-based methods. As long as you're not adding hundreds of icons you should be okay with this method. However each image is sent as a separate request, where as with the font methods all the images are contained in one file, so it would be a little more efficient.

    0 讨论(0)
  • 2020-12-02 07:03

    If you want to use custom fonts in ionic 2+ you can do it with following.

    Step 01:

    • Have/create custom font SVG files using tools such as XD.
    • Go to awesome online tool https://icomoon.io to generate font icons out of your SVG files. It's free tool and very good, I am using it for a while.
    • Download your custom font file.
    • Your file will look like something below.
    [class^="icon-"], [class*=" icon-"] {
      font-family: 'icomoon' !important;
      speak: none;
      font-style: normal;
      font-weight: normal;
      font-variant: normal;
      text-transform: none;
      line-height: 1;
    }
    

    replace above code with :

    [class^="icon-"],
    [class*=" icon-"],
    [class^="ion-ios-icon"],
    [class*="ion-ios-icon"],
    [class^="ion-md-icon"],
    [class*="ion-md-icon"]{
      @extend .ion;
      font-family: 'icomoon' !important;
      speak: none;
      font-style: normal;
      font-weight: normal;
      font-variant: normal;
      text-transform: none;
      line-height: 1;
    }
    

    Step 02:

    • We can use SASS @mixing for repetitive work
      @mixin makeIcon($arg, $val) {
      .ion-ios-#{$arg}:before ,
      .ion-ios-#{$arg}-circle:before ,
      .ion-ios-#{$arg}-circle-outline:before ,
      .ion-ios-#{$arg}-outline:before ,
      .ion-md-#{$arg}:before ,
      .ion-md-#{$arg}-circle:before ,
      .ion-md-#{$arg}-circle-outline:before ,
      .ion-md-#{$arg}-outline:before  {
        content: $val;
        font-size: 26px;
      }
    }
    

    we can use our sass mixing in our sass file like :

    @include makeIcon(icon-new-home, '\e911')
    

    Step 03

    Use it like

    <ion-tabs class="footer-tabs" [selectedIndex]="mySelectedIndex">
        <ion-tab [root]="tab1Root" tabIcon="home"></ion-tab>
        <ion-tab [root]="tab2Root" tabIcon="icon-new-home"></ion-tab>
     </ion-tabs>
    

    and its even support android ripple effect, which kinda looks cool

    [Updated] 30 Nov 2017

    @ionic/app-scripts : 3.1.2
    Ionic Framework    : ionic-angular 3.9.2
    

    For Ionic 3.1.2

    You need to add @import "ionicons"; inside your /src/theme/variables.scss file which will fix below error

    "[class^="icon-"]" failed to @extend ".ion". The selector ".ion" was not found. Use "@extend .ion !optional" 
            if the extend should be able to fail. 
    
    0 讨论(0)
  • 2020-12-02 07:04
    Create Icon
    ion-icon {
            &[class*="custom-"] {
              mask-size: contain;
              mask-position: 50% 50%;
              mask-repeat: no-repeat;
              background: currentColor;
              width: 0.8em;
              height: 0.8em;
            }
    
            &[class*="custom-rupee"] {
              color: yellow;
              mask-image: url(../../assets/Images/rupee.svg);
            }
            &[class*="custom-ballon"] {
              mask-image: url(../../assets/ballon.svg);
            }
            &[class*="custom-mouse"] {
              mask-image: url(../../assets/mouse.svg);
            }
    
          }
     And to use them
    &lt;ion-icon name="custom-rupee"></ion-icon>
    &lt;ion-icon name="custom-mouse"></ion-icon>
    &lt;ion-icon name="custom-ballon"></ion-icon>
    
    0 讨论(0)
  • 2020-12-02 07:06

    Been trying to implement Anjum Nawab shaikh answer on top with the icons sass sheet from icomoon.

    I have been able to get it working with version 2.2.2.

    In the www/fonts of the project I had added the icomoon files:

    icomoon.svg
    icomoon.ttf
    icomoon.woff
    icomoon.eot
    icomoon.scss
    

    In icomoon.scss I added the following scss:

    @font-face {
      font-family: 'icomoon';
      src:  url('../fonts/icomoon.eot?tclihz');
      src:  url('../fonts/icomoon.eot?tclihz#iefix') format('embedded-opentype'),
        url('../fonts/icomoon.ttf?tclihz') format('truetype'),
        url('../fonts/icomoon.woff?tclihz') format('woff'),
        url('../fonts/icomoon.svg?tclihz#icomoon') format('svg');
      font-weight: normal;
      font-style: normal;
    }
    
    [class^="icon-"],
    [class*=" icon-"],
    [class^="ion-ios-icon"],
    [class*="ion-ios-icon"],
    [class^="ion-md-icon"],
    [class*="ion-md-icon"]{
    
    /* Didn't feel the need to @extend since this just adds to already existing .ion
    code which I believe is replaced to just ion-icon tag selector in 
    www/assets/fonts/ionicons.scss */
    
      font-family: "Ionicons", "icomoon" !important; //So just add this
    }
    
    //Mixin
    @mixin makeIcon($arg, $val) {
      .ion-ios-#{$arg}:before ,
      .ion-ios-#{$arg}-circle:before ,
      .ion-ios-#{$arg}-circle-outline:before ,
      .ion-ios-#{$arg}-outline:before ,
      .ion-md-#{$arg}:before ,
      .ion-md-#{$arg}-circle:before ,
      .ion-md-#{$arg}-circle-outline:before ,
      .ion-md-#{$arg}-outline:before  {
        //important to overwrite ionic icons with your own icons
        content: $val !important; 
        font-size: 26px;
      }
    }
    
    
    //Adding Icons
    @include makeIcon(email, '\e900');
    ...
    

    Then I did an import to the variables.scss

    @import "../www/fonts/icomoon";
    

    Now we can add this to the html template:

    <ion-icon name="email"></ion-icon>
    
    0 讨论(0)
  • 2020-12-02 07:08

    I think this step-by-step by GerritErpenstein is very intuitive, it works pretty good for me. My Ionic version is 2.2.2. Literally, you use a sentence like this and it's done:

    <custom-icon set="star" name="iconostar"></custom-icon>

    https://github.com/GerritErpenstein/ionic2-custom-icons

    0 讨论(0)
提交回复
热议问题