fix(recipes): make recipe modal viewport-safe (#891)

This commit is contained in:
Will Miao
2026-04-09 19:14:12 +08:00
parent db4726a961
commit 51fe7aa07e
2 changed files with 70 additions and 6 deletions

View File

@@ -5,7 +5,8 @@
top: var(--header-height, 48px); /* Start below the header */ top: var(--header-height, 48px); /* Start below the header */
left: 0; left: 0;
width: 100%; width: 100%;
height: calc(100% - var(--header-height, 48px)); /* Adjust height to exclude header */ height: calc(100vh - var(--header-height, 48px)); /* Fallback for browsers without dvh */
height: calc(100dvh - var(--header-height, 48px)); /* Adjust height to exclude header */
background: rgba(0, 0, 0, 0.2); /* 调整为更淡的半透明黑色 */ background: rgba(0, 0, 0, 0.2); /* 调整为更淡的半透明黑色 */
z-index: var(--z-modal); z-index: var(--z-modal);
overflow: auto; /* Change from hidden to auto to allow scrolling */ overflow: auto; /* Change from hidden to auto to allow scrolling */
@@ -23,7 +24,8 @@ body.modal-open {
position: relative; position: relative;
max-width: 800px; max-width: 800px;
height: auto; height: auto;
max-height: calc(100vh - var(--header-height, 48px) - 5.5rem); /* Subtract header height and modal margins */ max-height: calc(100vh - var(--header-height, 48px) - 5.5rem); /* Fallback for browsers without dvh */
max-height: calc(100dvh - var(--header-height, 48px) - 5.5rem); /* Subtract header height and modal margins */
margin: 1rem auto; /* Keep reduced top margin */ margin: 1rem auto; /* Keep reduced top margin */
background: var(--lora-surface); background: var(--lora-surface);
border-radius: var(--border-radius-base); border-radius: var(--border-radius-base);

View File

@@ -214,11 +214,15 @@
#recipeModal .modal-content { #recipeModal .modal-content {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
max-width: 960px;
width: min(960px, calc(100vw - 2rem));
max-height: calc(100vh - var(--header-height, 48px) - 2rem);
max-height: calc(100dvh - var(--header-height, 48px) - 2rem);
} }
#recipeModal .modal-body { #recipeModal .modal-body {
display: flex; display: grid;
flex-direction: column; grid-template-rows: auto minmax(0, 1fr);
gap: var(--space-2); gap: var(--space-2);
flex: 1 1 auto; flex: 1 1 auto;
min-height: 0; min-height: 0;
@@ -232,12 +236,14 @@
gap: var(--space-2); gap: var(--space-2);
flex-shrink: 0; flex-shrink: 0;
margin-bottom: var(--space-2); margin-bottom: var(--space-2);
align-items: start;
} }
/* Recipe Preview */ /* Recipe Preview */
.recipe-preview-container { .recipe-preview-container {
width: 100%; width: 100%;
height: 360px; height: clamp(220px, 32vh, 360px);
height: clamp(220px, 32dvh, 360px);
border-radius: var(--border-radius-sm); border-radius: var(--border-radius-sm);
overflow: hidden; overflow: hidden;
background: var(--lora-surface); background: var(--lora-surface);
@@ -391,7 +397,8 @@
/* Generation Parameters */ /* Generation Parameters */
.recipe-gen-params { .recipe-gen-params {
height: 360px; height: clamp(220px, 32vh, 360px);
height: clamp(220px, 32dvh, 360px);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
} }
@@ -665,6 +672,7 @@
gap: 10px; gap: 10px;
flex: 1; flex: 1;
min-height: 0; min-height: 0;
overflow: hidden;
} }
.recipe-checkpoint-container { .recipe-checkpoint-container {
@@ -1036,6 +1044,60 @@
} }
} }
@media (max-height: 960px) {
#recipeModal .modal-content {
max-height: calc(100vh - var(--header-height, 48px) - 1rem);
max-height: calc(100dvh - var(--header-height, 48px) - 1rem);
padding: var(--space-2);
}
.recipe-modal-header {
padding-bottom: 8px;
margin-bottom: 8px;
}
.recipe-modal-header h2 {
max-height: 1.3em;
-webkit-line-clamp: 1;
}
.recipe-top-section {
grid-template-columns: 1fr;
gap: var(--space-1);
}
.recipe-preview-container,
.recipe-gen-params {
height: clamp(180px, 28vh, 300px);
height: clamp(180px, 28dvh, 300px);
}
.recipe-gen-params h3 {
margin-bottom: var(--space-1);
}
.recipe-bottom-section {
padding-top: var(--space-1);
}
.recipe-section-header {
margin-bottom: var(--space-1);
}
}
@media (max-height: 780px) {
.recipe-preview-container,
.recipe-gen-params {
height: clamp(160px, 24vh, 260px);
height: clamp(160px, 24dvh, 260px);
}
.recipe-modal-header {
margin-bottom: 6px;
padding-bottom: 6px;
}
}
.badge-container { .badge-container {
position: relative; position: relative;
display: flex; display: flex;