MatrixCard.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. <template>
  2. <section class="matrix-card">
  3. <div class="card-wrapper" v-for="item in cards" :key="item.icon">
  4. <img class="item-icon" :src="item.icon" alt="icon">
  5. <div class="card-bg"></div>
  6. <div class="card-content">
  7. <h3>{{ item.title }}</h3>
  8. <p>{{ item.text }}</p>
  9. <span :style="{ color: item.color }">{{ item.desc }}</span>
  10. </div>
  11. </div>
  12. </section>
  13. </template>
  14. <script setup>
  15. import cardIcon1 from '@/assets/svg/about/card-icon1.svg'
  16. import cardIcon2 from '@/assets/svg/about/card-icon2.svg'
  17. import cardIcon3 from '@/assets/svg/about/card-icon3.svg'
  18. import cardIcon4 from '@/assets/svg/about/card-icon4.svg'
  19. import cardIcon5 from '@/assets/svg/about/card-icon5.svg'
  20. const cards = [
  21. {
  22. title: 'CDN加速',
  23. icon: cardIcon1,
  24. text: '球加速节点分发,降低延迟提升用户访问体验。',
  25. desc: '全球200+节点',
  26. color: '#A39DFF'
  27. },
  28. {
  29. title: '游戏盾',
  30. icon: cardIcon2,
  31. text: '专为游戏业务定制,智能调度抗DDoS,隐藏源站。',
  32. desc: 'T级防御能力',
  33. color: '#4696FF'
  34. },
  35. {
  36. title: '高防服务器',
  37. icon: cardIcon3,
  38. text: '物理级高防机房,大带宽大防御,稳定业务运行。',
  39. desc: '单节点500G+',
  40. color: '#B546FF'
  41. },
  42. {
  43. title: '高防IP',
  44. icon: cardIcon4,
  45. text: '弹性IP防护,精准流量清洗,零影响转发正常业务。',
  46. desc: '弹性扩展1T+',
  47. color: '#616EFF'
  48. },
  49. {
  50. title: 'SDK防护',
  51. icon: cardIcon5,
  52. text: '端侧安全加固,链路加密通信,防篡改防抓包。',
  53. desc: '端到端加密',
  54. color: '#46ECFF'
  55. }
  56. ]
  57. </script>
  58. <style lang="scss" scoped>
  59. .matrix-card {
  60. position: relative;
  61. margin: 100px auto 0;
  62. max-width: 1200px;
  63. box-sizing: border-box;
  64. display: flex;
  65. gap: 25px;
  66. &::before {
  67. content: "";
  68. position: absolute;
  69. left: 50%;
  70. transform: translateX(-50%);
  71. top: 0;
  72. width: 657px;
  73. height: 297px;
  74. border-radius: 657px;
  75. background: rgba(125, 70, 255, 0.50);
  76. filter: blur(250px);
  77. }
  78. .card-wrapper {
  79. position: relative;
  80. width: 220px;
  81. height: 180px;
  82. padding-top: 32px;
  83. .item-icon {
  84. position: absolute;
  85. left: 0;
  86. top: 0;
  87. z-index: 10;
  88. }
  89. .card-bg {
  90. position: absolute;
  91. left: 0;
  92. top: 24px;
  93. width: 220px;
  94. height: 180px;
  95. border-radius: 20px;
  96. border: 1px solid rgba(64, 64, 64, 0.50);
  97. background: rgba(255, 255, 255, 0.10);
  98. box-shadow: -20px 68px 20px 0 rgba(0, 0, 0, 0.00), -13px 43px 18px 0 rgba(0, 0, 0, 0.01), -7px 24px 15px 0 rgba(0, 0, 0, 0.04), -3px 11px 11px 0 rgba(0, 0, 0, 0.07), -1px 3px 6px 0 rgba(0, 0, 0, 0.08);
  99. backdrop-filter: blur(12.5px);
  100. transition: all 0.3s ease;
  101. z-index: 1;
  102. }
  103. &:hover .card-bg {
  104. top: 0;
  105. height: 228px;
  106. transform: translateY(-24px);
  107. }
  108. .card-content {
  109. position: relative;
  110. z-index: 2;
  111. padding: 30px 14px 0;
  112. font-weight: 400;
  113. h3 {
  114. margin: 0 0 12px 0;
  115. font-size: 18px;
  116. font-weight: 500;
  117. color: #fff;
  118. }
  119. p {
  120. margin: 0 0 10px 0;
  121. font-size: 16px;
  122. color: rgba(255, 255, 255, 0.5);
  123. }
  124. span {
  125. font-size: 14px;
  126. }
  127. }
  128. }
  129. }
  130. </style>