Skip to content

Instantly share code, notes, and snippets.

@brecert
Last active August 15, 2022 19:13
Show Gist options
  • Save brecert/6623f332cbb9cb733ec24e60b928036b to your computer and use it in GitHub Desktop.
Save brecert/6623f332cbb9cb733ec24e60b928036b to your computer and use it in GitHub Desktop.
context menu css
<menu class="ContextMenu">
<div class="section">
<li><button>Action 1</button></li>
<li><button>Action 2</button></li>
<li><button>Action 3</button></li>
</div>
<li><button>Action 4<div class="end">bree</div></button></li>
</menu>
:root {
--menu-primary-background: #419bf9;
--menu-primary-text: #fff;
--menu-text: #000;
--menu-canvas: rgba(246,246,246,0.6);
--menu-border: rgba(0,0,0,0.05);
--menu-padding: 6px;
--menu-rounded: 8px;
}
html {
background: #333;
}
* {
line-height: 1;
font-size: 1em;
}
.ContextMenu {
left: 50px;
top: 50px;
}
.ContextMenu {
/* define here because it's only used in fine more */
--menu-divider: #e8e8e8;
/* resets */
margin: 0;
padding: 0;
list-style: none;
contain: content;
/* positioning / sizing */
position: absolute;
width: 207px;
/* styles */
color: var(--menu-text);
background-color: var(--menu-canvas);
border-radius: var(--menu-rounded);
padding: var(--menu-padding);
border: 1px solid var(--menu-border);
}
.ContextMenu button {
appearance: none;
border: none;
color: inherit;
width: 100%;
height: 24px;
cursor: pointer;
border-radius: calc(var(--menu-rounded) / 2);
/* for now */
background-color: transparent;
}
.ContextMenu button:is(:hover,:active,:focus-visible) {
background: var(--menu-primary-background);
color: var(--menu-primary-text);
}
.ContextMenu button {
padding-inline: var(--menu-padding);
display: grid;
grid: 1fr / [left] 1fr [right] auto;
align-items: center;
text-align: start;
}
.ContextMenu .divider {
margin-block: 4px;
height: 1px;
background: var(--menu-divider);
}
/* automaticaly divide sections */
.ContextMenu .section {
border-bottom: 1px solid var(--menu-divider);
margin-bottom: 4px;
padding-bottom: 4px;
}
@media (pointer: coarse) {
:root {
--border-radius: 12px;
--menu-canvas: rgba(237, 237, 237, 0.8);
--menu-border: transparent;
--menu-padding: 16px;
--menu-rounded: 12px;
}
.ContextMenu {
--menu-small-divider: rgba(60, 60, 67, 0.12);
--menu-large-divider: rgba(118, 118, 128, 0.12);
padding: 0;
}
.ContextMenu button {
height: 46px;
padding-inline: var(--menu-padding);
border-radius: 0;
}
.ContextMenu li:not(:last-child) {
border-block-end: 1px solid var(--menu-small-divider);
}
.ContextMenu .divider {
height: 8px;
margin: 0;
background-color: var(--menu-large-divider);
}
.ContextMenu .section {
margin: 0;
padding: 0;
border-bottom: 8px solid var(--menu-large-divider);
}
}
@media (prefers-contrast: more) {
:root {
--menu-primary-background: #419bf9;
--menu-primary-text: #fff;
--menu-canvas: rgba(246,246,246,0.85);
--menu-border: rgba(33,33,33,0.65);
}
.ContextMenu {
/* temporary */
--menu-divider: var(--menu-border);
--menu-small-divider: rgba(60, 60, 67, 1);
--menu-large-divider: rgba(118, 118, 128, 1);
}
}
@media (prefers-color-scheme: dark) {
:root {
--menu-text: #fff;
--menu-canvas: rgba(0, 0, 0, 0.41);
--menu-border: rgba(84, 84, 88, 0.32);
}
.ContextMenu {
/* temporary */
--menu-divider: rgba(84, 84, 88, 0.32);
--menu-small-divider: rgba(84, 84, 88, 0.32);
--menu-large-divider: rgba(64, 64, 72, 0.24);
}
@media (prefers-contrast: more) {
:root {
--menu-canvas: rgba(0, 0, 0, 0.75);
--menu-border: rgba(255, 255, 255, 0.75);
}
.ContextMenu {
/* temporary */
--menu-divider: var(--menu-border);
--menu-small-divider: var(--menu-border);
--menu-large-divider: rgba(200, 200, 200, 0.75);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment