hexo-theme-stellar 1.22.1 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/_config.yml +21 -9
  2. package/_data/widgets.yml +3 -0
  3. package/languages/en.yml +1 -0
  4. package/languages/zh-CN.yml +1 -0
  5. package/languages/zh-TW.yml +1 -0
  6. package/layout/_partial/head.ejs +29 -19
  7. package/layout/_partial/main/article/article_footer.ejs +16 -5
  8. package/layout/_partial/main/footer.ejs +18 -24
  9. package/layout/_partial/main/navbar/author_banner.ejs +31 -0
  10. package/layout/_partial/main/navbar/breadcrumb.ejs +20 -4
  11. package/layout/_partial/main/post_list/post_card.ejs +13 -1
  12. package/layout/_partial/plugins/comments/giscus/script.ejs +0 -1
  13. package/layout/_partial/plugins/parser/head.ejs +3 -0
  14. package/layout/_partial/plugins/parser/katex/head.ejs +3 -0
  15. package/layout/_partial/plugins/parser/katex/script.ejs +4 -0
  16. package/layout/_partial/plugins/parser/mathjax/script.ejs +20 -0
  17. package/layout/_partial/plugins/parser/mermaid/script.ejs +29 -0
  18. package/layout/_partial/plugins/parser/script.ejs +9 -0
  19. package/layout/_partial/scripts/index.ejs +19 -5
  20. package/layout/_partial/sidebar/index.ejs +1 -1
  21. package/layout/_partial/widgets/markdown.ejs +7 -2
  22. package/layout/_partial/widgets/toc.ejs +1 -1
  23. package/layout/archive.ejs +54 -37
  24. package/layout/page.ejs +1 -4
  25. package/layout/post.ejs +1 -7
  26. package/layout/wiki.ejs +1 -4
  27. package/package.json +1 -1
  28. package/scripts/events/index.js +2 -0
  29. package/scripts/events/lib/authors.js +21 -0
  30. package/scripts/events/lib/doc_tree.js +1 -2
  31. package/scripts/events/lib/links.js +17 -0
  32. package/scripts/generators/author.js +22 -0
  33. package/scripts/tags/index.js +5 -0
  34. package/scripts/tags/lib/albums.js +47 -0
  35. package/scripts/tags/lib/audio.js +23 -0
  36. package/scripts/tags/lib/copy.js +11 -13
  37. package/scripts/tags/lib/friends.js +13 -24
  38. package/scripts/tags/lib/gallery.js +6 -5
  39. package/scripts/tags/lib/grid.js +30 -30
  40. package/scripts/tags/lib/md.js +20 -0
  41. package/scripts/tags/lib/posters.js +47 -0
  42. package/scripts/tags/lib/sites.js +15 -24
  43. package/scripts/tags/lib/swiper.js +1 -1
  44. package/scripts/tags/lib/video.js +23 -0
  45. package/source/css/_common/media.styl +9 -0
  46. package/source/css/_common/toast.styl +25 -5
  47. package/source/css/_custom.styl +2 -1
  48. package/source/css/_defines/func.styl +11 -0
  49. package/source/css/_defines/theme.styl +2 -2
  50. package/source/css/_layout/list.styl +10 -12
  51. package/source/css/_layout/main.styl +4 -0
  52. package/source/css/_layout/md.styl +3 -0
  53. package/source/css/_layout/pages/archives.styl +10 -10
  54. package/source/css/_layout/partial/bread-nav.styl +3 -5
  55. package/source/css/_layout/partial/cover.styl +1 -0
  56. package/source/css/_layout/partial/navbar.styl +5 -5
  57. package/source/css/_layout/tag-plugins/banner.styl +24 -10
  58. package/source/css/_layout/tag-plugins/copy.styl +16 -13
  59. package/source/css/_layout/tag-plugins/folding.styl +6 -0
  60. package/source/css/_layout/tag-plugins/friends.styl +10 -37
  61. package/source/css/_layout/tag-plugins/gallery.styl +32 -15
  62. package/source/css/_layout/tag-plugins/grid.styl +3 -10
  63. package/source/css/_layout/tag-plugins/link.styl +2 -5
  64. package/source/css/_layout/tag-plugins/note.styl +7 -0
  65. package/source/css/_layout/tag-plugins/sites.styl +11 -39
  66. package/source/css/_layout/tag-plugins/tabs.styl +2 -0
  67. package/source/css/_layout/widgets/ghrepo.styl +1 -4
  68. package/source/css/_layout/widgets/toc_common.styl +22 -8
  69. package/source/css/_plugins/copycode.styl +18 -16
  70. package/source/css/_plugins/fancybox.styl +1 -4
  71. package/source/css/_plugins/index.styl +1 -1
  72. package/source/css/_plugins/lazyload.styl +4 -4
  73. package/source/js/main.js +7 -9
  74. package/source/js/plugins/copycode.js +1 -1
  75. package/source/js/plugins/friends.js +11 -11
  76. package/source/js/plugins/marked.js +50 -0
  77. package/source/js/plugins/sites.js +13 -14
  78. package/_data/links.yml +0 -7
  79. package/layout/mathjax.ejs +0 -29
  80. package/layout/mermaid.ejs +0 -32
@@ -9,10 +9,6 @@
9
9
 
10
10
  module.exports = ctx => function(args) {
11
11
  args = ctx.args.map(args, ['repo', 'api'], ['group'])
12
- var links = ctx.locals.get('data').links
13
- if (links == undefined) {
14
- links = {}
15
- }
16
12
  var api
17
13
  if (args.api) {
18
14
  api = args.api
@@ -25,30 +21,25 @@ module.exports = ctx => function(args) {
25
21
  el += '<div class="stellar-sites-api"'
26
22
  el += ' api="' + api + '"'
27
23
  el += '>'
28
- el += '<div class="group-body"></div>'
24
+ el += '<div class="grid-box"></div>'
29
25
  el += '</div>'
30
26
  } else if (args.group) {
31
- function cell(item) {
32
- if (item.url && item.title) {
33
- var cell = '<div class="site-card">'
34
- cell += '<a class="card-link" target="_blank" rel="external nofollow noopener noreferrer" href="' + item.url + '">'
35
- cell += '<img src="' + (item.screenshot || ('https://api.vlts.cc/screenshot?url=' + item.url + '&width=1280&height=720')) + '" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;' + ctx.theme.config.default.cover + '&quot;;"/>'
36
- cell += '<div class="info">'
37
- cell += '<img src="' + (item.avatar || ctx.theme.config.default.link) + '" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;' + ctx.theme.config.default.link + '&quot;;"/>'
38
- cell += '<span class="title">' + item.title + '</span>'
39
- cell += '<span class="desc">' + (item.description || item.url) + '</span>'
40
- cell += '</div>'
41
- cell += '</a></div>'
42
- return cell
43
- } else {
44
- return ''
27
+ const links = ctx.theme.config.links || {}
28
+ el += '<div class="grid-box">'
29
+ for (let item of (links[args.group] || [])) {
30
+ if (item?.url && item?.title) {
31
+ el += `<div class="grid-cell site-card">`
32
+ el += `<a class="card-link" target="_blank" rel="external nofollow noopener noreferrer" href="${item.url}">`
33
+ el += `<img src="${item.cover || item.screenshot || ('https://api.vlts.cc/screenshot?url=' + item.url + '&width=1280&height=720')}" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;${ctx.theme.config.default.cover}&quot;;"/>`
34
+ el += `<div class="info">`
35
+ el += `<img src="${item.icon || item.avatar || ctx.theme.config.default.link}" onerror="javascript:this.removeAttribute(&quot;data-src&quot;);this.src=&quot;${item.icon || item.avatar || ctx.theme.config.default.link}&quot;;"/>`
36
+ el += `<span class="title">${item.title}</span>`
37
+ el += `<span class="desc">${item.description || item.url}</span>`
38
+ el += `</div>`
39
+ el += `</a>`
40
+ el += `</div>`
45
41
  }
46
42
  }
47
- el += '<div class="group-body">'
48
- const items = links[args.group] || []
49
- items.forEach((item, i) => {
50
- el += cell(item)
51
- })
52
43
  el += '</div>'
53
44
  }
54
45
 
@@ -22,7 +22,7 @@ module.exports = ctx => function(args, content) {
22
22
  })
23
23
  }
24
24
  }
25
- el += '<div class="tag-plugin swiper" id="swiper-api"'
25
+ el += '<div class="tag-plugin swiper fancybox" id="swiper-api"'
26
26
  el += ' ' + ctx.args.joinTags(args, ['width', 'effect']).join(' ')
27
27
  el += '>'
28
28
  el += '<div class="swiper-wrapper">'
@@ -0,0 +1,23 @@
1
+ /**
2
+ * video.js v1.0 | https://github.com/xaoxuu/hexo-theme-stellar/
3
+ * 格式与官方标签插件一致使用空格分隔,中括号内的是可选参数(中括号不需要写出来)
4
+ *
5
+ * {% video src %}
6
+ *
7
+ */
8
+
9
+ 'use strict';
10
+
11
+ module.exports = ctx => function(args) {
12
+ args = ctx.args.map(args, ['type'], ['src'])
13
+ if (args.type == null) {
14
+ args.type = 'video/mp4'
15
+ }
16
+ return `
17
+ <div class="tag-plugin video">
18
+ <video controls preload>
19
+ <source src="${args.src}" type="${args.type}">Your browser does not support the video tag.
20
+ </video>
21
+ </div>
22
+ `
23
+ }
@@ -0,0 +1,9 @@
1
+ audio,video
2
+ border-radius: $border-block
3
+ max-width: 100%
4
+ video
5
+ z-index: 1
6
+ box-shadow: $boxshadow-card-float
7
+ .video
8
+ line-height: 0
9
+ text-align: center
@@ -1,16 +1,36 @@
1
1
  div.toast
2
2
  max-width: 60%
3
- padding: 1rem 3rem
3
+ padding: 1rem 2rem
4
4
  line-height: 1.5
5
5
  color: var(--text-p1)
6
6
  font-weight: 500
7
7
  text-align: center
8
- border-radius: $border-card
8
+ border-radius: 8px
9
9
  background: var(--card)
10
10
  position: fixed
11
- top: 50%
12
11
  left: 50%
13
- transform: translate(-50%, -50%)
12
+ top: 32px
13
+ transform: translateX(-50%)
14
14
  z-index: 9
15
15
  disable-select()
16
- box-shadow: $boxshadow-float
16
+ box-shadow: $boxshadow-toast
17
+ visibility: hidden
18
+
19
+ &.show
20
+ visibility: visible
21
+ -webkit-animation: fadein 0.5s, fadeout 0.5s 2s
22
+ animation: fadein 0.5s, fadeout 0.5s 2s
23
+
24
+ @-webkit-keyframes fadein
25
+ from {top: -64px; opacity: 0;}
26
+ to {top: 32px; opacity: 1;}
27
+ @keyframes fadein
28
+ from {top: -64px; opacity: 0;}
29
+ to {top: 32px; opacity: 1;}
30
+
31
+ @-webkit-keyframes fadeout
32
+ from {top: 32px; opacity: 1;}
33
+ to {top: -64px; opacity: 0;}
34
+ @keyframes fadeout
35
+ from {top: 32px; opacity: 1;}
36
+ to {top: -64px; opacity: 0;}
@@ -89,6 +89,7 @@ $border-button = 4px
89
89
  // shadow
90
90
  $boxshadow-card = 0 1px 2px 0px rgba(0, 0, 0, 0.1)
91
91
  $boxshadow-float = 0 4px 8px 0px rgba(0, 0, 0, 0.1)
92
- $boxshadow-card-float = 0 2px 4px 0px rgba(0, 0, 0, 0.1), 0 4px 8px 0px rgba(0, 0, 0, 0.1), 0 8px 16px 0px rgba(0, 0, 0, 0.1)
92
+ $boxshadow-card-float = 0 12px 16px -4px rgba(0, 0, 0, 0.2)
93
93
  $boxshadow-button = 0 0 2px 0px rgba(0, 0, 0, 0.04), 0 0 8px 0px rgba(0, 0, 0, 0.04)
94
94
  $boxshadow-block = 0 1px 4px 0px rgba(0, 0, 0, 0.02), 0 2px 8px 0px rgba(0, 0, 0, 0.02)
95
+ $boxshadow-toast = 0 4px 8px 0px rgba(0, 0, 0, 0.1), 0 12px 16px -4px rgba(0, 0, 0, 0.2)
@@ -97,3 +97,14 @@ hover-block($v, $h, $br = 4px)
97
97
  trans2 color background
98
98
  &:hover
99
99
  background: var(--block-hover)
100
+
101
+ floatable-trans()
102
+ trans2 transform box-shadow
103
+ floatable-float()
104
+ box-shadow: 0 12px 20px -4px rgba(0, 0, 0, 0.15)
105
+ transform: translate3d(0, -2px, 0)
106
+
107
+ hover-float()
108
+ floatable-trans()
109
+ &:hover
110
+ floatable-float()
@@ -21,7 +21,7 @@ set_text_dark()
21
21
  --text-p3: hsl($color-text-h, $color-text-s, $color-text-l / 0.5 * 1.25)
22
22
  --text-p4: hsl($color-text-h, $color-text-s, $color-text-l / 0.5 * 1.5)
23
23
  --text-meta: hsl($color-text-h, $color-text-s, $color-text-l / 0.5 * 2)
24
- --text-code: hsl($color-code-h, $color-code-s, $color-code-l * 1)
24
+ --text-code: hsl($color-code-h, $color-code-s, $color-code-l)
25
25
 
26
26
  set_text_light()
27
27
  --text-p0: hsl($color-text-h, $color-text-s, 100)
@@ -30,7 +30,7 @@ set_text_light()
30
30
  --text-p3: hsl($color-text-h, $color-text-s, 100 - $color-text-l / 0.5 * 1.2)
31
31
  --text-p4: hsl($color-text-h, $color-text-s, 100 - $color-text-l / 0.5 * 1.4)
32
32
  --text-meta: hsl($color-text-h, $color-text-s, 100 - $color-text-l / 0.5 * 1.75)
33
- --text-code: hsl($color-code-h, $color-code-s, $color-code-l * 1.25)
33
+ --text-code: hsl($color-code-h, $color-code-s, (100 - $color-code-l) * 1.2)
34
34
 
35
35
  :root
36
36
  --site-bg: hsl($color-background-h, $color-background-s, $color-background-l)
@@ -54,7 +54,6 @@
54
54
  height: 1.5em
55
55
 
56
56
  .post-list .post-card:hover
57
- box-shadow: 0 1px 4px 0px rgba(0, 0, 0, 0.1), 0 4px 16px 0px rgba(0, 0, 0, 0.1)
58
57
  img
59
58
  transform: scale(1.02)
60
59
  filter: brightness(80%)
@@ -85,22 +84,16 @@
85
84
  object-fit: cover
86
85
  width: 100%
87
86
  border-radius: 0
88
- height: 280px
89
- @media screen and (max-width: 900px)
90
- height: 240px
91
- @media screen and (max-width: $device-tablet)
92
- height: 220px
93
- @media screen and (max-width: $device-mobile-425)
94
- height: 200px
95
- @media screen and (max-width: $device-mobile-375)
96
- height: 180px
97
-
87
+ aspect-ratio: hexo-config('article.cover_ratio')
88
+
98
89
  .post-list .post-card.post.photo
99
90
  .cover
100
91
  position: relative
101
92
  line-height: 0
102
93
  img
103
94
  width: 100%
95
+ object-fit: cover
96
+ aspect-ratio: hexo-config('article.cover_ratio')
104
97
  .cover-info
105
98
  padding: 1.5rem 1rem
106
99
  position: absolute
@@ -165,10 +158,15 @@
165
158
  line-height: 1
166
159
  margin-bottom: 0.75rem
167
160
  .cap
161
+ --theme-block: var(--block)
168
162
  background: var(--theme-block)
169
163
  padding: 2px 4px
170
164
  border-radius: 2px
171
165
  p:last-child
172
166
  margin-bottom: 0
173
167
  .cap+.cap
174
- margin-left: 4px
168
+ margin-left: 4px
169
+
170
+ .post-list.archives
171
+ @media screen and (max-width: $device-mobile)
172
+ margin: 1rem 0
@@ -12,3 +12,7 @@
12
12
  margin: 2rem 1rem 1rem
13
13
  .logo-wrap
14
14
  margin: 0
15
+
16
+ .l_main.list
17
+ @media screen and (max-width: $device-mobile-max)
18
+ padding-top: 0
@@ -161,3 +161,6 @@ h1.article-title
161
161
  bottom: 0
162
162
  left: -2px
163
163
  right: -2px
164
+ &:has(img)
165
+ &:before
166
+ content: none
@@ -8,7 +8,7 @@
8
8
  margin-bottom: .5em
9
9
  position: relative
10
10
  padding: 4px 0
11
- color: var(--text-p3)
11
+ color: var(--text-p1)
12
12
  &:after
13
13
  content: ""
14
14
  position: absolute
@@ -18,25 +18,25 @@
18
18
  right: 0
19
19
  z-index: -1
20
20
  border-radius: 4px
21
- background: var(--block-border)
21
+ background: $color-theme
22
22
  a.post
23
23
  display: inline-flex
24
24
  align-items: baseline
25
25
  margin: 0.25rem 0
26
26
  color: var(--text-p1)
27
- &:hover
28
- color: $color-hover
27
+ trans2 color border
28
+ border-bottom: 1px dashed var(--text-meta)
29
29
  time
30
30
  font-family: $ff-code
31
31
  margin-right: 1em
32
32
  font-weight: 700
33
33
  flex-shrink: 0
34
- opacity .5
35
- &:hover
36
- .archive-header
37
- color: var(--text-p1)
38
- &:after
39
- background: $color-theme
34
+ color: var(--text-p4)
35
+ &:hover
36
+ border-bottom: 1px solid $color-theme
37
+ color: var(--text-p0)
38
+ time
39
+ color: $color-theme
40
40
 
41
41
 
42
42
 
@@ -19,13 +19,11 @@
19
19
  color: $color-hover
20
20
  div#post-meta
21
21
  margin-top: 2px
22
- span+span
23
- margin-left: 8px
22
+ span.updated
24
23
  visibility: hidden
25
24
  &:hover
26
- div#post-meta
27
- span+span
28
- visibility: visible
25
+ div#post-meta span.updated
26
+ visibility: visible
29
27
 
30
28
  .bread-nav .ghrepo
31
29
  font-size: $fs-13
@@ -21,6 +21,7 @@
21
21
  font-size: 1.5rem
22
22
  margin: 1rem 0
23
23
  line-height: 1.2
24
+ color: var(--text-p0)
24
25
  .description
25
26
  margin: 1rem 0
26
27
  .start-wrap
@@ -24,11 +24,11 @@ nav.cap
24
24
  >p
25
25
  margin: 0
26
26
  a
27
- padding: .25rem 1rem
28
- margin: 10px 0 8px 0
27
+ padding: .25rem 0.75rem
28
+ margin: 10px 0.25rem 8px 0.25rem
29
29
  line-height: 2
30
30
  color: var(--text-p3)
31
- border-radius: 4px
31
+ border-radius: $border-button
32
32
  font-weight: 500
33
33
  white-space: nowrap
34
34
  position: relative
@@ -37,8 +37,8 @@ nav.cap
37
37
  height: 2px
38
38
  position: absolute
39
39
  bottom: -8px
40
- left: 1rem
41
- right: 1rem
40
+ left: 0.75rem
41
+ right: 0.75rem
42
42
  background: $color-theme
43
43
  border-radius: 2px
44
44
  pointer-events: none
@@ -6,10 +6,9 @@
6
6
  flex-direction: column
7
7
  justify-content: flex-end
8
8
  align-items: flex-start
9
- color: white
10
- height: 240px
9
+ height: 220px
11
10
  @media screen and (max-width: $device-mobile-max)
12
- height: 200px
11
+ height: 180px
13
12
  .bg
14
13
  z-index: 0
15
14
  .content
@@ -37,12 +36,12 @@
37
36
  background: none
38
37
  line-height: 1.5
39
38
  font-size: $fs-15
40
- &:hover
41
- color: white
42
- background: rgba(black, 0.5)
43
39
  &.active
44
40
  color: white
45
41
  background: rgba(white, 0.25)
42
+ &:hover
43
+ color: white
44
+ background: rgba(black, 0.5) !important
46
45
  .back
47
46
  background: none
48
47
  padding: 0
@@ -78,14 +77,11 @@
78
77
  border-radius: 50%
79
78
  width: 48px
80
79
  height: 48px
81
- border: 2px solid white
82
80
  .bottom
83
81
  display: flex
84
82
  padding: 1rem
85
83
  width: 100%
86
84
  box-sizing: border-box
87
- background-image: linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2))
88
- text-shadow: 0 0 1px rgba(0,0,0,0.12)
89
85
  .title
90
86
  font-size: 1.5rem
91
87
  font-weight: 600
@@ -99,9 +95,27 @@
99
95
  font-size: 1.2rem
100
96
  .subtitle
101
97
  font-size: $fs-14
98
+ .content:only-child
99
+ color: var(--text-p1)
100
+ .bg+.content
101
+ color: white
102
+ .avatar
103
+ border: 2px solid white
104
+ .bottom
105
+ background-image: linear-gradient(rgba(0,0,0,0),rgba(0,0,0,0.2))
106
+ text-shadow: 0 0 1px rgba(0,0,0,0.12)
102
107
 
103
108
  .tag-plugin.banner
104
109
  trans1(transform, 2s)
105
110
  &:hover
106
111
  img.bg
107
- transform: scale(1.01)
112
+ transform: scale(1.01)
113
+
114
+ .l_main.list .tag-plugin.banner
115
+ background: var(--block-hover)
116
+ .content .top
117
+ margin-top: 1.5rem
118
+ margin: 0 1rem
119
+ @media screen and (max-width: $device-mobile)
120
+ margin: 0
121
+ border-radius: 0
@@ -2,17 +2,21 @@
2
2
  display: flex
3
3
  justify-content: space-between
4
4
  box-sizing: border-box
5
- background: var(--block)
5
+ background: var(--card)
6
6
  border-radius: $border-bar
7
7
  border: 1px solid var(--block-border)
8
8
  overflow: hidden
9
- width: 320px
10
- max-width: 100%
11
- &[width='max']
12
- width: 100%
13
- @media screen and (max-width: $device-mobile-425)
14
- min-width: 100%
15
-
9
+ width: 100%
10
+ span
11
+ line-height: 3
12
+ padding: 0 1rem
13
+ background: var(--block)
14
+ border-right: 1px solid var(--block-border)
15
+ color: var(--text-p3)
16
+ font-family: $ff-code
17
+ font-size: $fs-12
18
+ font-weight: 700
19
+ flex-shrink: 0
16
20
  input.copy-area
17
21
  display: inline-block
18
22
  padding: 0
@@ -21,14 +25,13 @@
21
25
  line-height: 3
22
26
  text-indent: 1rem
23
27
  button.copy-btn
24
- margin: 0
25
- line-height: 3
26
- border-left: 1px solid var(--block-border)
28
+ margin: 2px
29
+ border-radius: 'calc(%s - 2px)' % $border-bar
27
30
  display: inline-block
28
- background: var(--block-hover)
31
+ background: none
29
32
  line-height: 0
30
33
  font-size: 1rem
31
34
  padding: 0 .75rem
32
35
  color: var(--text-p2)
33
36
  &:hover
34
- background: var(--card)
37
+ background: var(--block-hover)
@@ -60,8 +60,14 @@ details.folding[child=codeblock]>div.body
60
60
  margin: 0
61
61
  figcaption
62
62
  display: none
63
+ span
64
+ background: var(--theme-block)
63
65
  .code:before
64
66
  content: none
67
+ .highlight+.highlight
68
+ border-top: 1px dashed var(--theme-border)
69
+ border-top-left-radius: 0
70
+ border-top-right-radius: 0
65
71
 
66
72
  details.folding[child=iframe]
67
73
  overflow: hidden
@@ -1,42 +1,9 @@
1
- .users-wrap
2
- overflow: hidden
3
- .group-header
4
- margin: 0 0 1rem
5
- p
6
- margin: 0
7
- font-size: $fs-14
8
- &:first-child
9
- font-size: 1.25rem
10
- font-weight: 500
11
- .group-body
12
- width: 100%
13
- display: flex
14
- flex-wrap: wrap
15
- align-items: stretch
16
- &+.group-header
17
- margin-top: 2rem
18
- .stellar-friends-api
19
- display: block
20
-
1
+ .users-wrap .grid-box
2
+ display: grid
3
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr))
21
4
 
22
5
  .users-wrap .user-card
23
- flex-shrink: 1
24
- display: flex
25
- align-items: stretch
26
- width: 12.5%
27
- @media screen and (max-width: 980px)
28
- width: 14.28%
29
- @media screen and (max-width: 900px)
30
- width: 16.66%
31
- @media screen and (max-width: 820px)
32
- width: 20%
33
- @media screen and (max-width: $device-mobile-max)
34
- width: 16.66%
35
- @media screen and (max-width: $device-mobile)
36
- width: 25%
37
6
  .card-link
38
- margin: 0
39
- width: 100%
40
7
  color: var(--text-p1)
41
8
  font-size: 10px
42
9
  font-weight: 500
@@ -50,6 +17,12 @@
50
17
  overflow: hidden
51
18
  position: relative
52
19
  padding: 1rem 0.5rem
20
+ .name
21
+ max-width: 100%
22
+ display: -webkit-box
23
+ -webkit-box-orient: vertical
24
+ overflow: hidden
25
+ -webkit-line-clamp: 2
53
26
  img
54
27
  object-fit: cover
55
28
  display: block
@@ -62,7 +35,7 @@
62
35
  // transform
63
36
  .users-wrap .user-card .card-link
64
37
  >img
65
- trans2 transform box-shadow
38
+ floatable-trans()
66
39
  &:hover
67
40
  background: var(--block-hover)
68
41
  img
@@ -1,5 +1,5 @@
1
1
  .tag-plugin.gallery
2
- .cell
2
+ .grid-cell,.flow-cell
3
3
  display: block
4
4
  overflow hidden
5
5
  z-index 0
@@ -30,66 +30,83 @@
30
30
  display: block
31
31
  font-size: $fs-13
32
32
  color: transparent
33
+ pointer-events: none
33
34
  line-height: 1.2
34
35
  margin: 0.5rem
35
36
  trans1(color)
37
+ text-align: left
36
38
  &:empty
37
39
  display: none
38
40
 
39
- .tag-plugin.gallery[layout='grid'] .cell
40
- trans1(transform, 0.5s)
41
+ .tag-plugin.gallery .grid-cell
42
+ >img
43
+ trans1(transform, 0.5s)
41
44
  &:hover
42
- img
45
+ >img
43
46
  transform: scale(1.1)
44
47
 
45
48
 
46
49
  // 网格布局
47
- .tag-plugin.gallery[layout='grid']
50
+ .tag-plugin.gallery.grid-box
48
51
  display: grid
52
+ &[size='xs']
53
+ grid-template-columns: repeat(auto-fill, minmax(80px, 1fr))
54
+ grid-gap: 2px
55
+ .grid-cell,img
56
+ border-radius: 2px
57
+ .image-caption
58
+ font-size: $fs-12
49
59
  &[size='s']
50
60
  grid-template-columns: repeat(auto-fill, minmax(100px, 1fr))
51
61
  grid-gap: 2px
52
- .cell,img
62
+ .grid-cell,img
53
63
  border-radius: 2px
54
64
  &[size='m']
55
65
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr))
56
66
  grid-gap: 4px
57
- .cell,img
67
+ .grid-cell,img
58
68
  border-radius: 4px
59
69
  &[size='l']
60
70
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr))
61
71
  grid-gap: 8px
62
- .cell,img
72
+ .grid-cell,img
63
73
  border-radius: 8px
64
74
  &[size='xl'] // 2列
65
75
  grid-template-columns: repeat(2, 1fr)
66
76
  grid-gap: 16px
67
- .cell,img
77
+ .grid-cell,img
68
78
  border-radius: 16px
69
79
  &[size='mix'] // 1张大图+2张小图
70
80
  grid-template-columns: repeat(auto-fill, minmax(150px, 1fr))
71
81
  grid-gap: 4px
72
- .cell,img
82
+ .grid-cell,img
73
83
  border-radius: 4px
74
- .cell
84
+ .grid-cell
75
85
  &:nth-child(3n+1)
76
86
  grid-column: auto / span 2
77
87
  grid-row: auto / span 2
78
88
  &[ratio='square']
79
- .cell
89
+ .grid-cell
80
90
  aspect-ratio: 1
81
- .cell
91
+ &[ratio='portrait']
92
+ .grid-cell
93
+ aspect-ratio: 2 / 3
94
+ .grid-cell
82
95
  background: var(--block)
83
96
  img
84
97
  width: 100%
85
98
  height: 100%
99
+
86
100
  // 瀑布流布局
87
- .tag-plugin.gallery[layout='flow']
101
+ .tag-plugin.gallery.flow-box
88
102
  column-count: 3
89
103
  column-gap: 8px
90
- .cell
104
+ .flow-cell
91
105
  border-radius: 8px
92
106
  padding-bottom: 8px
107
+ img
108
+ width: 100%
109
+ height: 100%
93
110
  .image-meta
94
111
  border-radius: 8px
95
112
  margin-bottom: 8px