app-css-icon.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. <template>
  2. <view class="app-css-icon"
  3. :class="[icon,round?'round':'',padding?'padding':'']"
  4. :style="{
  5. borderColor: color,
  6. fontSize: iSize,
  7. transform: transform,
  8. backgroundColor: background,
  9. }"></view>
  10. </template>
  11. <script>
  12. export default {
  13. name: "app-css-icon",
  14. props: {
  15. icon: {
  16. default: 'point',
  17. type: String,
  18. },
  19. size: {
  20. default: 50,
  21. },
  22. color: {
  23. default: '#333',
  24. type: String,
  25. },
  26. transform: {
  27. default: '',
  28. },
  29. background: {
  30. default: 'transparent',
  31. type: String,
  32. },
  33. round: {
  34. default: false,
  35. type: Boolean,
  36. },
  37. padding: {
  38. default: false,
  39. type: Boolean,
  40. },
  41. },
  42. computed: {
  43. iSize() {
  44. if (isNaN(this.size)) {
  45. return `${this.size}`;
  46. } else {
  47. return `${this.size}rpx`;
  48. }
  49. },
  50. },
  51. }
  52. </script>
  53. <style scoped lang="scss">
  54. .app-css-icon {
  55. display: inline-block;
  56. height: 1em;
  57. width: 1em;
  58. box-sizing: border-box;
  59. text-indent: -#{100em};
  60. vertical-align: middle;
  61. position: relative;
  62. overflow: hidden;
  63. transform: translate(0, -10%);
  64. }
  65. .app-css-icon.round {
  66. border-radius: 10em;
  67. }
  68. .app-css-icon::before,
  69. .app-css-icon::after {
  70. content: '';
  71. box-sizing: inherit;
  72. position: absolute;
  73. left: 50%;
  74. top: 50%;
  75. -ms-transform: translate(-50%, -50%);
  76. transform: translate(-50%, -50%);
  77. border-color: inherit;
  78. }
  79. .check::before {
  80. border-style: solid;
  81. border-width: 0 0 .15em .15em;
  82. height: .5em;
  83. width: .9em;
  84. transform: translate(-50%, -.375em) rotate(-45deg);
  85. }
  86. .padding.check::before {
  87. border-width: 0 0 .1em .1em;
  88. height: .333em;
  89. width: .6em;
  90. transform: translate(-50%, -.25em) rotate(-45deg);
  91. }
  92. .arrow-right::before {
  93. height: .65em;
  94. width: .65em;
  95. border-style: solid;
  96. border-width: .15em 0 0 .15em;
  97. transform: translate(-75%, -50%) rotate(135deg);
  98. }
  99. .padding.arrow-right::before {
  100. height: .4333em;
  101. width: .4333em;
  102. border-style: solid;
  103. border-width: .1em 0 0 .1em;
  104. transform: translate(-75%, -50%) rotate(135deg);
  105. }
  106. </style>