diff --git a/web/src/lib/components/asset-viewer/asset-viewer.svelte b/web/src/lib/components/asset-viewer/asset-viewer.svelte
index cf74b4a79..962269934 100644
--- a/web/src/lib/components/asset-viewer/asset-viewer.svelte
+++ b/web/src/lib/components/asset-viewer/asset-viewer.svelte
@@ -17,6 +17,7 @@
   import { assetStore } from '$lib/stores/assets.store';
   import { isShowDetail } from '$lib/stores/preferences.store';
   import { addAssetsToAlbum, downloadFile } from '$lib/utils/asset-utils';
+  import NavigationArea from './navigation-area.svelte';
   import { browser } from '$app/environment';
 
   export let asset: AssetResponseDto;
@@ -25,8 +26,6 @@
   export let sharedLink: SharedLinkResponseDto | undefined = undefined;
 
   const dispatch = createEventDispatcher();
-  let halfLeftHover = false;
-  let halfRightHover = false;
   let appearsInAlbums: AlbumResponseDto[] = [];
   let isShowAlbumPicker = false;
   let isShowDeleteConfirmation = false;
@@ -251,28 +250,8 @@
   </div>
 
   {#if showNavigation}
-    <!-- svelte-ignore a11y-no-static-element-interactions -->
-    <div
-      class={`row-start-2 row-span-end col-start-1 flex place-items-center hover:cursor-pointer w-1/4 mb-[60px] ${
-        asset.type === AssetTypeEnum.Video ? '' : 'z-[999]'
-      }`}
-      on:mouseenter={() => {
-        halfLeftHover = true;
-        halfRightHover = false;
-      }}
-      on:mouseleave={() => {
-        halfLeftHover = false;
-      }}
-      on:click={navigateAssetBackward}
-      on:keydown={navigateAssetBackward}
-    >
-      <button
-        class="rounded-full p-3 hover:bg-gray-500 hover:text-gray-700 z-[1000] text-gray-500 mx-4"
-        class:navigation-button-hover={halfLeftHover}
-        on:click={navigateAssetBackward}
-      >
-        <ChevronLeft size="36" />
-      </button>
+    <div class="row-start-2 row-span-1 col-start-1 column-span-1 justify-self-start mb-[60px] z-[999]">
+      <NavigationArea on:click={navigateAssetBackward}><ChevronLeft size="36" /></NavigationArea>
     </div>
   {/if}
 
@@ -304,28 +283,8 @@
   </div>
 
   {#if showNavigation}
-    <!-- svelte-ignore a11y-no-static-element-interactions -->
-    <div
-      class={`row-start-2 row-span-full col-start-4 flex justify-end place-items-center hover:cursor-pointer w-1/4 justify-self-end mb-[60px] ${
-        asset.type === AssetTypeEnum.Video ? '' : 'z-[500]'
-      }`}
-      on:click={navigateAssetForward}
-      on:keydown={navigateAssetForward}
-      on:mouseenter={() => {
-        halfLeftHover = false;
-        halfRightHover = true;
-      }}
-      on:mouseleave={() => {
-        halfRightHover = false;
-      }}
-    >
-      <button
-        class="rounded-full p-3 hover:bg-gray-500 hover:text-white text-gray-500 mx-4"
-        class:navigation-button-hover={halfRightHover}
-        on:click={navigateAssetForward}
-      >
-        <ChevronRight size="36" />
-      </button>
+    <div class="row-start-2 row-span-1 col-start-4 col-span-1 justify-self-end mb-[60px] z-[999]">
+      <NavigationArea on:click={navigateAssetForward}><ChevronRight size="36" /></NavigationArea>
     </div>
   {/if}
 
@@ -379,10 +338,4 @@
   #immich-asset-viewer {
     contain: layout;
   }
-
-  .navigation-button-hover {
-    background-color: rgb(107 114 128 / var(--tw-bg-opacity));
-    color: rgb(255 255 255 / var(--tw-text-opacity));
-    transition: all 150ms;
-  }
 </style>
diff --git a/web/src/lib/components/asset-viewer/navigation-area.svelte b/web/src/lib/components/asset-viewer/navigation-area.svelte
new file mode 100644
index 000000000..e0656992a
--- /dev/null
+++ b/web/src/lib/components/asset-viewer/navigation-area.svelte
@@ -0,0 +1,9 @@
+<script lang="ts">
+</script>
+
+<!-- svelte-ignore a11y-no-static-element-interactions -->
+<div class="group h-full flex place-items-center" on:click on:keydown>
+  <button class="rounded-full p-3 transition text-gray-500 mx-4 group-hover:text-white group-hover:bg-gray-500">
+    <slot />
+  </button>
+</div>