<main>
<fieldset class="radio-controls">
<legend>position-area:</legend>
<h3>Default value</h3>
<label><input type="radio" name="position-area" value="none"> none</label>
<h3>Two keywords defining a single specific tile</h3>
<label><input type="radio" name="position-area" value="top left" checked> top left</label>
<label><input type="radio" name="position-area" value="start end"> start end</label>
<label><input type="radio" name="position-area" value="block-start center"> block-start center</label>
<label><input type="radio" name="position-area" value="inline-start block-end"> inline-start block-end</label>
<label><input type="radio" name="position-area" value="x-start y-end"> x-start y-end</label>
<label><input type="radio" name="position-area" value="center y-self-end"> center y-self-end</label>
<h3>Two keywords spanning two tiles</h3>
<label><input type="radio" name="position-area" value="top span-left"> top span-left</label>
<label><input type="radio" name="position-area" value="center span-start"> center span-start</label>
<label><input type="radio" name="position-area" value="inline-start span-block-end"> inline-start span-block-end</label>
<label><input type="radio" name="position-area" value="y-start span-x-end"> y-start span-x-end</label>
<h3>Two keywords spanning three tiles</h3>
<label><input type="radio" name="position-area" value="top span-all"> top span-all</label>
<label><input type="radio" name="position-area" value="block-end span-all"> block-end span-all</label>
<label><input type="radio" name="position-area" value="x-self-start span-all"> x-self-start span-all</label>
<h3>One keyword with implicit second keyword</h3>
<label><input type="radio" name="position-area" value="top"> top</label>
<label><input type="radio" name="position-area" value="inline-start"> inline-start</label>
<label><input type="radio" name="position-area" value="center"> center</label>
<label><input type="radio" name="position-area" value="span-all"> span-all</label>
<label><input type="radio" name="position-area" value="end"> end</label>
<h3>Global values</h3>
<label><input type="radio" name="position-area" value="inherit"> inherit</label>
<label><input type="radio" name="position-area" value="initial"> initial</label>
<label><input type="radio" name="position-area" value="revert"> revert</label>
<label><input type="radio" name="position-area" value="revert-layer"> revert-layer</label>
<label><input type="radio" name="position-area" value="unset"> unset</label>
</fieldset>
<div class="select-controls">
<label for="position-area-select">position-area:</label>
<select name="position-area" id="position-area-select">
<optgroup label="Default value">
<option value="none">none</option>
</optgroup>
<optgroup label="Two keywords defining a single specific tile">
<option value="top left" selected>top left</option>
<option value="start end">start end</option>
<option value="block-start center">block-start center</option>
<option value="inline-start block-end">inline-start block-end</option>
<option value="x-start y-end">x-start y-end</option>
<option value="center y-self-end">center y-self-end</option>
</optgroup>
<optgroup label="Two keywords spanning two tiles">
<option value="top span-left">top span-left</option>
<option value="center span-start">center span-start</option>
<option value="inline-start span-block-end">inline-start span-block-end</option>
<option value="y-start span-x-end">y-start span-x-end</option>
</optgroup>
<optgroup label="Two keywords spanning three tiles">
<option value="top span-all">top span-all</option>
<option value="block-end span-all">block-end span-all</option>
<option value="x-self-start span-all">x-self-start span-all</option>
</optgroup>
<optgroup label="One keyword with implicit second keyword">
<option value="top">top</option>
<option value="inline-start">inline-start</option>
<option value="center">center</option>
<option value="span-all">span-all</option>
<option value="end">end</option>
</optgroup>
<optgroup label="Global values">
<option value="inherit">inherit</option>
<option value="initial">initial</option>
<option value="revert">revert</option>
<option value="revert-layer">revert-layer</option>
<option value="unset">unset</option>
</optgroup>
</select>
</div>
<div class="grid">
<div class="anchor">
<svg viewBox="0 0 256 256"><rect width="256" height="256" fill="none"/><line x1="128" y1="232" x2="128" y2="80" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><circle cx="128" cy="56" r="24" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><line x1="88" y1="120" x2="168" y2="120" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/><path d="M216,144c0,64-88,24-88,88,0-64-88-24-88-88" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="16"/></svg>
</div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
<div class="tooltip">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</div>
</main>
<style>
main {
padding: 2rem;
display: grid;
grid-template-columns: 300px 1fr;
gap: 2rem;
align-items: center;
}
.radio-controls {
margin-bottom: 1rem;
border: 1px solid lightgray;
padding: 1rem;
}
.radio-controls h3 {
margin: 1rem 0 0.5rem 0;
font-size: 0.9rem;
color: #666;
}
.radio-controls h3:first-of-type {
margin-top: 0;
}
.radio-controls label {
display: block;
margin: 0.25rem 0;
cursor: pointer;
}
.select-controls {
margin-bottom: 1rem;
display: none;
}
.select-controls label {
display: block;
margin-bottom: 0.5rem;
font-weight: bold;
}
.select-controls select {
font-size: 1rem;
padding: 0.5rem;
width: 100%;
}
@media (max-width: 800px) {
main {
grid-template-columns: 1fr;
grid-template-rows: auto auto;
}
.radio-controls {
display: none;
}
.select-controls {
display: block;
}
}
.grid {
display: grid;
grid-template-columns: 1fr 50px 1fr;
grid-template-rows: 1fr 50px 1fr;
grid-template-areas:
"top-left top-center top-right"
"center-left center center-right"
"bottom-left bottom-center bottom-right";
aspect-ratio: 1 / 1;
border: 1px solid lightgray;
}
.grid > div {
border: 1px solid lightgray;
}
.anchor {
grid-area: center;
display: grid;
place-items: center;
anchor-name: --anchor;
}
.anchor svg {
width: 50px;
height: 50px;
color: darkgray;
}
.tooltip {
position: fixed;
position-anchor: --anchor;
position-area: top left;
padding: 1rem;
border: 1px solid lightgray;
border-radius: 0.5rem;
background-color: black;
color: white;
}
</style>
<script>
const radios = document.querySelectorAll('input[name="position-area"]');
const tooltip = document.querySelector('.tooltip');
radios.forEach(radio => {
radio.addEventListener('change', (e) => {
tooltip.style.positionArea = e.target.value;
});
});
const select = document.getElementById('position-area-select');
select.addEventListener('change', (e) => {
tooltip.style.positionArea = e.target.value;
});
</script>