fix: 加载中图标修复
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -37,3 +37,4 @@ tests/fixtures/
|
||||
|
||||
# SpecStory explanation file
|
||||
.specstory/.what-is-this.md
|
||||
AGENTS.md
|
||||
|
||||
@@ -950,12 +950,71 @@ body .content.expanded {
|
||||
|
||||
.site-card .icon-placeholder,
|
||||
.site-card .icon-fallback {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
display: inline-block;
|
||||
width: 1.8rem;
|
||||
height: 1.8rem;
|
||||
margin-bottom: 1rem;
|
||||
border-radius: 4px;
|
||||
flex-shrink: 0;
|
||||
vertical-align: middle;
|
||||
text-align: center;
|
||||
line-height: 1.8rem;
|
||||
font-size: 1.8rem;
|
||||
transition: transform 0.3s ease, box-shadow 0.3s ease;
|
||||
}
|
||||
|
||||
/* 确保图标容器在加载过程中保持固定尺寸 */
|
||||
.site-card .icon-container {
|
||||
display: inline-block;
|
||||
width: 1.8rem;
|
||||
height: 1.8rem;
|
||||
margin-bottom: 1rem;
|
||||
position: relative;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.site-card .icon-container .favicon-icon,
|
||||
.site-card .icon-container .icon-placeholder,
|
||||
.site-card .icon-container .icon-fallback {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* 优化图标切换动画 */
|
||||
.site-card .icon-container .favicon-icon {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.site-card .icon-container .favicon-icon.loaded {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.site-card .icon-container .favicon-icon.error {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.site-card .icon-container .icon-placeholder {
|
||||
opacity: 1;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.site-card .icon-container .icon-placeholder.hidden {
|
||||
opacity: 0;
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.site-card .icon-container .icon-fallback {
|
||||
opacity: 0;
|
||||
transition: opacity 0.3s ease;
|
||||
}
|
||||
|
||||
.site-card .icon-container .icon-fallback.visible {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
.site-card:hover i {
|
||||
|
||||
@@ -8,17 +8,18 @@
|
||||
data-description="{{#if description}}{{description}}{{else}}{{url}}{{/if}}">
|
||||
{{#ifEquals @root.icons.mode "favicon"}}
|
||||
{{#ifHttpUrl url}}
|
||||
<div class="icon-container">
|
||||
<i class="fas fa-circle-notch fa-spin icon-placeholder" aria-hidden="true"></i>
|
||||
<img
|
||||
class="favicon-icon"
|
||||
src="https://t3.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url={{encodeURIComponent url}}&size=32"
|
||||
alt="{{name}} favicon"
|
||||
loading="lazy"
|
||||
style="opacity:0;"
|
||||
onload="this.style.opacity='1'; this.previousElementSibling.style.display='none';"
|
||||
onerror="this.style.display='none'; this.previousElementSibling.style.display='none'; this.nextElementSibling.style.display='inline-block';"
|
||||
onload="this.classList.add('loaded'); this.previousElementSibling.classList.add('hidden');"
|
||||
onerror="this.classList.add('error'); this.previousElementSibling.classList.add('hidden'); this.nextElementSibling.classList.add('visible');"
|
||||
/>
|
||||
<i class="fas fa-link icon-fallback" aria-hidden="true" style="display:none;"></i>
|
||||
<i class="fas fa-link icon-fallback" aria-hidden="true"></i>
|
||||
</div>
|
||||
{{else}}
|
||||
<i class="{{#if icon}}{{icon}}{{else}}fas fa-link{{/if}}"></i>
|
||||
{{/ifHttpUrl}}
|
||||
|
||||
Reference in New Issue
Block a user