A dialog
| 1 |
<dialog id="dialog" popover> |
| 2 |
<div box-="round" id="content"> |
| 3 |
<p>Are you sure you want to delete this?</p> |
| 4 |
<div id="buttons"> |
| 5 |
<button box-="round">Cancel</button> |
| 6 |
<button box-="round">Delete</button> |
| 7 |
</div> |
| 8 |
</div> |
| 9 |
</dialog> |
| 10 |
<button popovertarget="dialog">Open Dialog</button> |
| 1 |
dialog::backdrop { |
| 2 |
background-color: rgba(0, 0, 0, 0.5); |
| 3 |
} |
| 4 |
#content { |
| 5 |
display: flex; |
| 6 |
flex-direction: column; |
| 7 |
gap: 1lh; |
| 8 |
padding: 2lh 2ch 1lh 2ch; |
| 9 |
background-color: var(--background1); |
| 10 |
} |
| 11 |
#buttons { |
| 12 |
display: flex; |
| 13 |
gap: 1ch; |
| 14 |
justify-content: flex-end; |
| 15 |
} |
Import
@import "@webtui/css/components/dialog.css";
Usage
<dialog>
<div>Dialog content</div>
</dialog>
See the MDN Reference on how to show and hide <dialog> elements
Examples
Positioning
Use the position- property to control the position of the dialog
Pass two values into position- to set the horizontal and vertical position anchor
<dialog position-="<anchor>"></dialog>
<dialog position-="<x-anchor> <y-anchor>"></dialog>
<dialog position-="center"></dialog>
<dialog position-="start end"></dialog>
| 1 |
<div class="row"> |
| 2 |
<dialog id="start" position-="start" popover>start</dialog> |
| 3 |
<button popovertarget="start">start</button> |
| 4 |
|
| 5 |
<dialog id="center-start" position-="center start" popover>end start</dialog> |
| 6 |
<button popovertarget="center-start">center start</button> |
| 7 |
|
| 8 |
<dialog id="end-start" position-="end start" popover>end start</dialog> |
| 9 |
<button popovertarget="end-start">end start</button> |
| 10 |
</div> |
| 11 |
|
| 12 |
<div class="row"> |
| 13 |
<dialog id="start-center" position-="start center" popover>start center</dialog> |
| 14 |
<button popovertarget="start-center">start center</button> |
| 15 |
|
| 16 |
<dialog id="center" position-="center" popover>center</dialog> |
| 17 |
<button popovertarget="center">center</button> |
| 18 |
|
| 19 |
<dialog id="end-center" position-="end center" popover>end center</dialog> |
| 20 |
<button popovertarget="end-center">end center</button> |
| 21 |
</div> |
| 22 |
|
| 23 |
<div class="row"> |
| 24 |
<dialog id="start-end" position-="start end" popover>start end</dialog> |
| 25 |
<button popovertarget="start-end">start end</button> |
| 26 |
|
| 27 |
<dialog id="center-end" position-="center end" popover>center end</dialog> |
| 28 |
<button popovertarget="center-end">center end</button> |
| 29 |
|
| 30 |
<dialog id="end" position-="end" popover>end</dialog> |
| 31 |
<button popovertarget="end">end</button> |
| 32 |
</div> |
| 1 |
|
| 2 |
dialog::backdrop { |
| 3 |
background-color: rgba(0, 0, 0, 0.5); |
| 4 |
} |
| 5 |
dialog { |
| 6 |
padding: 1lh 2ch; |
| 7 |
background-color: var(--background1); |
| 8 |
} |
| 9 |
.row { |
| 10 |
display: flex; |
| 11 |
gap: 1ch; |
| 12 |
} |
| 13 |
|
Container
Use the container- property to control the container sizing behavior
| 1 |
<div class="row"> |
| 2 |
<dialog id="auto" container-="auto" popover>auto</dialog> |
| 3 |
<button popovertarget="auto">auto</button> |
| 4 |
|
| 5 |
<dialog id="fill" container-="fill" popover>fill</dialog> |
| 6 |
<button popovertarget="fill">fill</button> |
| 7 |
</div> |
| 1 |
|
| 2 |
dialog::backdrop { |
| 3 |
background-color: rgba(0, 0, 0, 0.5); |
| 4 |
} |
| 5 |
dialog { |
| 6 |
padding: 1lh 2ch; |
| 7 |
background-color: var(--background1); |
| 8 |
} |
| 9 |
|
Sizing
Use the size- property to control the max size of the dialog
| 1 |
<div class="row"> |
| 2 |
<dialog id="small" size-="small" container-="fill" popover>small</dialog> |
| 3 |
<button popovertarget="small">small</button> |
| 4 |
|
| 5 |
<dialog id="default" container-="fill" popover>default</dialog> |
| 6 |
<button popovertarget="default">default</button> |
| 7 |
|
| 8 |
<dialog id="full" size-="full" container-="fill" popover>full (esc to close)</dialog> |
| 9 |
<button popovertarget="full">full</button> |
| 10 |
</div> |
| 1 |
|
| 2 |
dialog::backdrop { |
| 3 |
background-color: rgba(0, 0, 0, 0.5); |
| 4 |
} |
| 5 |
dialog { |
| 6 |
padding: 1lh 2ch; |
| 7 |
background-color: var(--background1); |
| 8 |
} |
| 9 |
|
Offset
Use the --dialog-offset-x and --dialog-offset-y CSS properties to control the offset of the dialog
| 1 |
<div class="row"> |
| 2 |
<dialog id="full" size-="full" container-="fill" popover>no offsets (esc to close)</dialog> |
| 3 |
<button popovertarget="full">no offsets</button> |
| 4 |
|
| 5 |
<dialog id="offset" size-="full" container-="fill" popover>offsets (esc or click on backdrop to close)</dialog> |
| 6 |
<button popovertarget="offset">offsets</button> |
| 7 |
</div> |
| 1 |
|
| 2 |
dialog::backdrop { |
| 3 |
background-color: rgba(0, 0, 0, 0.5); |
| 4 |
} |
| 5 |
dialog { |
| 6 |
padding: 1lh 2ch; |
| 7 |
background-color: var(--background1); |
| 8 |
} |
| 9 |
#offset { |
| 10 |
--dialog-offset-x: 2ch; |
| 11 |
--dialog-offset-y: 2lh; |
| 12 |
} |
| 13 |
|
Reference
Properties
--dialog-offset-x: The horizontal offset of the dialog
--dialog-offset-y: The vertical offset of the dialog
--dialog-max-width: The maximum width of the dialog
--dialog-max-height: The maximum height of the dialog
#my-custom-dialog {
--dialog-offset-x: 1ch;
--dialog-offset-y: 1lh;
}
The --dialog-max-width and --dialog-max-height CSS properties are automatically controlled by the size- variant but can be overridden
Extending
To extend the Dialog stylesheet, define a CSS rule on the components layer
@layer components {
dialog {
&[size-="tiny"] {
/* ... */
}
/* ... */
}
}
Scope
dialog { /* ... */ }