Добавить пользовательский значок в Ionic 2
Я использую Ionic 2 для разработки моего приложения. Я хочу использовать свои пользовательские значки в своем приложении, как мы используем значки ionic 2 с помощью - тег. Например:
<ion-icon name="my-custom-icon"></ion-icon>
Как я могу добиться этого? Есть ли рекомендуемый способ сделать это?
9 ответов:
если вы хотите использовать пользовательские шрифты в ionic 2, Вы можете сделать это со следующим.
шаг 01:
- иметь / создавать пользовательские файлы SVG шрифтов с помощью таких инструментов, как XD.
- перейти к удивительному онлайн-инструмент https://icomoon.io для создания значков шрифтов из ваших файлов SVG. Это бесплатный инструмент, и очень хорошо, я использую его на некоторое время.
- загрузите свой собственный файл шрифта.
- файл будет выглядеть как-то ниже.
[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; }
заменить приведенный выше код на:
[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; }
шаг 02:
- мы можем использовать Sass @mixing для повторяющейся работы
@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; } }
мы можем использовать наш Sass смешивания в нашем файле sass, как:
@include makeIcon(icon-new-home, '\e911')
шаг 03
использовать его как
<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>
и его даже поддержка android ripple effect, который выглядит круто
[Обновлено] 30 Ноября 2017
@ionic/app-scripts : 3.1.2 Ionic Framework : ionic-angular 3.9.2
Для Ионного 3.1.2
вам нужно добавить
@import "ionicons";
внутри/src/theme/variables.scss
файл, который будет исправить ошибку ниже"[class^="icon-"]" failed to @extend ".ion". The selector ".ion" was not found. Use "@extend .ion !optional" if the extend should be able to fail.
Это самый простой способ, который я нашел, с форумов по адресу https://forum.ionicframework.com/t/anyway-to-custom-the-tabbars-icon-with-my-own-svg-file/46131/36.
в своем приложение.СКС файл, добавьте следующий код:
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); } }
затем в шаблонах вы можете использовать следующий HTML для создания значка:
<ion-icon name="appname-customicon"></ion-icon>
это гораздо менее сложно, чем использование методов на основе шрифтов. Пока вы не добавляете сотни значки вы должны быть в порядке с этим методом. Однако каждое изображение отправляется как отдельный запрос, где, как и в методах шрифта, все изображения содержатся в одном файле, поэтому это было бы немного более эффективно.
с текущим ионным 3.3.0 вы можете использовать решение от Anjum, но вы должны изменить
@import "ionic.ionicons";
до
@import "ionicons";
в src / theme / variables.SCSS файл.
нашел это решение на:
https://github.com/yannbf/ionicCustomIconsSample/blob/master/src/theme/variables.scss
пытался реализовать Anjum Nawab shaikh ответ сверху с пиктограммами Sass sheet от icomoon.
я смог заставить его работать с версией 2.2.2.
на www / fonts из проекта я добавил файлы icomoon:
icomoon.svg icomoon.ttf icomoon.woff icomoon.eot icomoon.scss
в icomoon.scss я добавил следующее 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'); ...
затем я сделал импорт в переменные.СКС
@import "../www/fonts/icomoon";
теперь мы можем добавить это в HTML шаблон:
<ion-icon name="email"></ion-icon>
перед началом: убедитесь, что у вас есть все необходимые файлы svg.
теперь просто идите сюда:http://fontello.com/
этот инструмент будет генерировать ваш значок шрифта и CSS, необходимые С. Это довольно интуитивно, просто использовать его, скачать, и скопировать шрифт в папку www, но сохранить ту же структуру файла. Чтобы закончить, просто интегрируйте свой CSS-файл в свой
index.html
файл и все готово!I надеюсь, что это решит вашу проблему! ; -)
согласно ионной команде:
Привет! Прямо сейчас он ограничен использованием иониконов, так как под ним отображается значок Иона, и это обрабатывает различия в платформе. Вы можете открыть проблему, и мы могли бы обсудить добавление этой функции там
вы можете увидеть все ответы здесь:
https://forum.ionicframework.com/t/anyway-to-custom-the-tabbars-icon-with-my-own-svg-file/46131/16
Я также найти это:
https://www.npmjs.com/package/ionic2-custom-icons ,
но не кажется умным решением (я предпочитаю ждать решения ионной команды).
лучший сценарий для этого-использовать старый способ, создав класс в файле scss.
для добавления пользовательских значков, которые я использую в моем файле scss:
.ion-ios-MYICON:before, .ion-ios-MYICON-circle:before, .ion-ios-MYICON-circle-outline:before, .ion-ios-MYICON-outline:before, .ion-md-MYICON:before, .ion-md-MYICON-circle:before, .ion-md-MYICON-circle-outline:before, .ion-md-MYICON-outline:before { @extend .ion; } .ion-ios-MYICON:before, .ion-ios-MYICON-outline:before, .ion-md-MYICON:before, .ion-md-MYICON-outline:before { content: 'your-custom-image'; }
тогда в вашем HTML коде:
<ion-icon name="MYICON"></ion-icon>
Я думаю, что это шаг за шагом по GerritErpenstein очень интуитивно, это работает довольно хорошо для меня. Моя ионная версия 2.2.2. Буквально, вы используете такое предложение, и это делается:
<custom-icon set="star" name="iconostar"></custom-icon>
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 <ion-icon name="custom-rupee"></ion-icon> <ion-icon name="custom-mouse"></ion-icon> <ion-icon name="custom-ballon"></ion-icon>