From f79a5dc6a843f0828acd8e5255391ed1aaf306a7 Mon Sep 17 00:00:00 2001 From: ComfyUI Wiki Date: Tue, 26 Aug 2025 02:41:49 +0800 Subject: [PATCH] Fix HoverDissolveThumbnail layering issue preventing dissolve effect (#5191) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [fix] Resolve HoverDissolveThumbnail layering issue preventing dissolve effect - Fix layer stacking problem where LazyImage containers blocked overlay visibility - Restructure template with separate positioning containers for base and overlay images - Use z-index to ensure proper layering of overlay image above base image - Update CSS classes from absolute positioning on images to container-based positioning - Update test assertions to match new class structure - Ensure hover dissolve transition works correctly from opacity-0 to opacity-100 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude * Address code review feedback - Use size-full instead of w-full h-full for cleaner Tailwind classes - Update tests to use classList approach instead of string contains - Maintain same functionality while improving code quality 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --------- Co-authored-by: Claude Co-authored-by: bymyself --- .../thumbnails/HoverDissolveThumbnail.spec.ts | 18 +++++------ .../thumbnails/HoverDissolveThumbnail.vue | 31 ++++++++++++------- 2 files changed, 28 insertions(+), 21 deletions(-) diff --git a/src/components/templates/thumbnails/HoverDissolveThumbnail.spec.ts b/src/components/templates/thumbnails/HoverDissolveThumbnail.spec.ts index 4ca00c6688..168ccac3bd 100644 --- a/src/components/templates/thumbnails/HoverDissolveThumbnail.spec.ts +++ b/src/components/templates/thumbnails/HoverDissolveThumbnail.spec.ts @@ -94,18 +94,16 @@ describe('HoverDissolveThumbnail', () => { // Check base image const baseImageClass = lazyImages[0].props('imageClass') - const baseClassString = Array.isArray(baseImageClass) - ? baseImageClass.join(' ') - : baseImageClass - expect(baseClassString).toContain('absolute') - expect(baseClassString).toContain('inset-0') + const baseClassList = Array.isArray(baseImageClass) + ? baseImageClass + : baseImageClass.split(' ') + expect(baseClassList).toContain('size-full') // Check overlay image const overlayImageClass = lazyImages[1].props('imageClass') - const overlayClassString = Array.isArray(overlayImageClass) - ? overlayImageClass.join(' ') - : overlayImageClass - expect(overlayClassString).toContain('absolute') - expect(overlayClassString).toContain('inset-0') + const overlayClassList = Array.isArray(overlayImageClass) + ? overlayImageClass + : overlayImageClass.split(' ') + expect(overlayClassList).toContain('size-full') }) }) diff --git a/src/components/templates/thumbnails/HoverDissolveThumbnail.vue b/src/components/templates/thumbnails/HoverDissolveThumbnail.vue index 2e35d650c9..f02c939d3e 100644 --- a/src/components/templates/thumbnails/HoverDissolveThumbnail.vue +++ b/src/components/templates/thumbnails/HoverDissolveThumbnail.vue @@ -1,12 +1,20 @@ @@ -32,14 +40,15 @@ const isVideoType = false const baseImageClass = computed(() => { - return `absolute inset-0 ${isVideoType ? 'w-full h-full object-cover' : 'max-w-full max-h-64 object-contain'}` + const sizeClasses = isVideoType + ? 'size-full object-cover' + : 'size-full object-contain' + return sizeClasses }) const overlayImageClass = computed(() => { - const baseClasses = 'absolute inset-0 transition-opacity duration-300' - const sizeClasses = isVideoType - ? 'w-full h-full object-cover' - : 'max-w-full max-h-64 object-contain' + const baseClasses = 'size-full transition-opacity duration-300' + const sizeClasses = isVideoType ? 'object-cover' : 'object-contain' const opacityClasses = isHovered ? 'opacity-100' : 'opacity-0' return `${baseClasses} ${sizeClasses} ${opacityClasses}` })