Skip to content

Commit 88741d4

Browse files
committed
Add --padding-left etc variables
1 parent 22b88ea commit 88741d4

File tree

3 files changed

+28
-18
lines changed

3 files changed

+28
-18
lines changed

code-input.css

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ code-input {
2626
/* Normal inline styles */
2727
margin: 8px;
2828
--padding: 16px;
29+
--padding-left: var(--padding, 16px);
30+
--padding-right: var(--padding, 16px);
31+
--padding-top: var(--padding, 16px);
32+
--padding-bottom: var(--padding, 16px);
2933
height: 250px;
3034
font-size: inherit;
3135
font-family: monospace;
@@ -47,10 +51,13 @@ code-input * {
4751
code-input textarea, code-input:not(.code-input_pre-element-styled) pre code, code-input.code-input_pre-element-styled pre {
4852
/* Both elements need the same text and space styling so they are directly on top of each other */
4953
margin: 0px!important;
50-
padding: var(--padding, 16px)!important;
54+
padding-left: var(--padding-left, 16px)!important;
55+
padding-right: var(--padding-right, 16px)!important;
56+
padding-top: var(--padding-top, 16px)!important;
57+
padding-bottom: var(--padding-bottom, 16px)!important;
5158
border: 0;
52-
min-width: calc(100% - var(--padding, 16px) * 2);
53-
min-height: calc(100% - var(--padding, 16px) * 2);
59+
min-width: calc(100% - var(--padding-left, 16px) - var(--padding-right, 16px));
60+
min-height: calc(100% - var(--padding-top, 16px) - var(--padding-bottom, 16px));
5461
overflow: hidden;
5562
resize: none;
5663
grid-row: 1;
@@ -176,8 +183,8 @@ code-input .code-input_dialog-container .code-input_keyboard-navigation-instruct
176183
background-color: black;
177184
color: white;
178185
padding: 2px;
179-
padding-left: var(--padding, 16px);
180-
padding-right: var(--padding, 16px);
186+
padding-left: var(--padding-left, 16px);
187+
padding-right: var(--padding-right, 16px);
181188
margin: 0;
182189
text-wrap: balance;
183190
overflow-x: hidden;
@@ -199,14 +206,17 @@ code-input .code-input_dialog-container .code-input_keyboard-navigation-instruct
199206
code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:not([data-code-input-fallback]):focus):not(.code-input_mouse-focused) textarea,
200207
code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:not([data-code-input-fallback]):focus):not(.code-input_mouse-focused):not(.code-input_pre-element-styled) pre code,
201208
code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:not([data-code-input-fallback]):focus):not(.code-input_mouse-focused).code-input_pre-element-styled pre {
202-
padding-top: calc(var(--padding, 16px) + 3em)!important;
203-
min-height: calc(100% - var(--padding, 16px) * 2 - 3em);
209+
padding-top: calc(var(--padding-top, 16px) + 3em)!important;
210+
min-height: calc(100% - var(--padding-top, 16px) - 3em - var(--padding-bottom, 16px));
204211
}
205212

206213
/* Pre-loaded appearance */
207214

208215
code-input:not(.code-input_loaded) {
209-
padding: var(--padding, 16px)!important;
216+
padding-left: var(--padding-left, 16px)!important;
217+
padding-right: var(--padding-right, 16px)!important;
218+
padding: var(--padding-top, 16px)!important;
219+
padding: var(--padding-bottom, 16px)!important;
210220
overflow: hidden;
211221
display: block;
212222
box-sizing: border-box; /* Include padding in width/height */
@@ -218,8 +228,8 @@ code-input:not(.code-input_loaded)::after {
218228
display: block;
219229
position: absolute;
220230
bottom: 0;
221-
left: var(--padding, 16px);
222-
width: calc(100% - 2 * var(--padding, 1.6px));
231+
left: var(--padding-left, 16px);
232+
width: calc(100% - var(--padding-left, 1.6px) - var(--padding-right, 1.6px));
223233
overflow-x: auto;
224234

225235
border-top: 1px solid currentColor;
@@ -249,5 +259,5 @@ code-input textarea[data-code-input-fallback] {
249259
color: inherit;
250260

251261
/* Don't overlap with message */
252-
min-height: calc(100% - var(--padding, 16px) * 2 - 2em);
262+
min-height: calc(100% - var(--padding-top, 16px) - 2em - var(--padding-bottom, 16px));
253263
}

docs/interface/css/_index.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ title = 'Styling `code-input` elements with CSS'
77
> Contributors: 2025 Oliver Geer
88
99
`code-input` elements can be styled like `textarea` elements in most cases; however, there are some exceptions:
10-
* The CSS variable `--padding` should be used rather than the property `padding` (e.g. `<code-input style="--padding: 10px;">...`)
10+
* The CSS variable `--padding` should be used rather than the property `padding` (e.g. `<code-input style="--padding: 10px;">...`), or `--padding-left`, `--padding-right`, `--padding-top` and `--padding-bottom` instead of the CSS properties of the same names. For technical reasons, the value must have a unit (i.e. `0px`, not `0`).
1111
* Background colours set on `code-input` elements will not work with highlighters that set background colours themselves - use `(code-input's selector) pre[class*="language-"]` for Prism.js or `.hljs` for highlight.js to target the highlighted element with higher specificity than the highlighter's theme. You may also set the `background-color` of the code-input element for its appearance when its template is unregistered / there is no JavaScript.
1212
* For now, elements on top of `code-input` elements should have a CSS `z-index` at least 3 greater than the `code-input` element.

plugins/prism-line-numbers.css

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,16 @@
77
/* Update padding to match line-numbers plugin */
88
code-input.line-numbers textarea, code-input.line-numbers.code-input_pre-element-styled pre, code-input.line-numbers:not(.code-input_pre-element-styled) pre code,
99
.line-numbers code-input textarea, .line-numbers code-input.code-input_pre-element-styled pre, .line-numbers code-input:not(.code-input_pre-element-styled) pre code {
10-
padding-left: max(3.8em, var(--padding, 16px))!important;
10+
padding-left: max(3.8em, var(--padding-left, 16px))!important;
1111
}
1212

1313
/* Ensure pre code/textarea just wide enough to give 100% width with line numbers */
1414
code-input.line-numbers, .line-numbers code-input {
15-
grid-template-columns: calc(100% - max(0em, calc(3.8em - var(--padding, 16px))));
15+
grid-template-columns: calc(100% - max(0em, calc(3.8em - var(--padding-left, 16px))));
1616
}
1717
/* Despite the above, keep dialog container full width */
1818
code-input.line-numbers .code-input_dialog-container, .line-numbers code-input .code-input_dialog-container {
19-
width: calc(100% + max(0em, calc(3.8em - var(--padding, 16px))));
19+
width: calc(100% + max(0em, calc(3.8em - var(--padding-left, 16px))));
2020
}
2121

2222

@@ -26,10 +26,10 @@ code-input pre[class*=language-].line-numbers>code {
2626
}
2727
/* Line numbers now positioned relative to the pre element not the code element. */
2828
code-input .line-numbers .line-numbers-rows {
29-
left: 0;
30-
top: var(--padding);
29+
left: max(0em, calc(var(--padding-left, 16px) - 3.8em));
30+
top: var(--padding-top);
3131
}
3232
/* Things with padding when instructions are present */
3333
code-input:not(:has(.code-input_keyboard-navigation-instructions:empty)):has(textarea:not([data-code-input-fallback]):focus):not(.code-input_mouse-focused) .line-numbers .line-numbers-rows {
34-
top: calc(var(--padding) + 3em);
34+
top: calc(var(--padding-top) + 3em);
3535
}

0 commit comments

Comments
 (0)