Quantcast
Channel: Active questions tagged flexbox - Stack Overflow
Viewing all articles
Browse latest Browse all 1675

How to make one element shrink while two other elements stay the same

$
0
0

async function main() {    const numStudents = Number(await new Modal('a\n\na\n\na\n\na\n\na\n\na', 'info', 'How many students do you have?', 'Cancel', 'Submit').response());    const numGrades = Number(await new Modal('', 'info', 'How many grades does each student have?', 'Cancel', 'Submit').response());}class Modal {    constructor(bodyText, type = 'info', headerText = null, footerText = 'Close', prompt = null, closeable = true) {        this.type = type;        if (headerText === null) {            switch (this.type) {                case 'success':                    this.headerText = 'Success!';                    break;                case 'info':                    this.headerText = 'Information';                    break;                case 'warning':                    this.headerText = 'Warning!'                    break;                case 'error':                    this.headerText = 'An error has occurred';                    break;                default:                    this.headerText = 'Notification';            }        } else {            this.headerText = headerText;        }        this.bodyText = bodyText;        this.footerText = footerText;        this.closeable = closeable;        this.prompt = prompt;        this.create();        this.open();    }    create() {        this.dialog = document.createElement('dialog');        const header = document.createElement('header');        header.classList.add(this.type, 'background');        if (this.closeable) {            const closeButton = document.createElement('button');            closeButton.classList.add('close');            closeButton.innerText = '×';            header.appendChild(closeButton);        }        const headerText = document.createElement('h3');        headerText.innerText = this.headerText;        header.appendChild(headerText);        this.dialog.appendChild(header);        const form = document.createElement('form');        form.method = 'dialog';        const body = document.createElement('main');        this.bodyText.split('\n\n').forEach((paragraph) => {            const p = document.createElement('p');            p.innerText = paragraph;            body.appendChild(p);        });        if (this.prompt !== null) {            this.input = document.createElement('input');            this.input.placeholder = '';            this.input.autofocus = true;            const p = document.createElement('p');            p.appendChild(this.input);            body.appendChild(p);        }        form.appendChild(body);        const footer = document.createElement('footer');        footer.classList.add(this.type, 'text');        const hiddenSubmitButton = document.createElement('button');        hiddenSubmitButton.value = 'submit';        hiddenSubmitButton.hidden = true;        footer.appendChild(hiddenSubmitButton);        const closeButton = document.createElement('button');        closeButton.classList.add(this.type, 'text', 'animated');        closeButton.innerText = this.footerText;        footer.appendChild(closeButton);        if (this.prompt === null) {            closeButton.autofocus = true;        } else {            const submitButton = document.createElement('button');            submitButton.classList.add(this.type, 'background', 'animated');            submitButton.innerText = this.prompt;            submitButton.value = 'submit';            footer.appendChild(submitButton);        }        form.appendChild(footer);        this.dialog.addEventListener('close', (event) => {            this.close(event.target.returnValue);        });        this.dialog.appendChild(form);        document.body.appendChild(this.dialog);    }    open() {        this.dialog.showModal();    }    close(returnValue) {        if (this.prompt !== null) {            if (returnValue === '') {                this.responseValue = null;                if (this.rejectPromise !== undefined) {                    this.rejectPromise('User canceled prompt');                }            } else {                this.responseValue = this.input.value;                if (this.rejectPromise !== undefined) {                    this.resolvePromise(this.responseValue);                }            }        }    }    response() {        this.promise = new Promise((resolve, reject) => {            if (this.responseValue !== undefined) {                if (this.responseValue === null) {                    reject('User canceled prompt')                } else {                    resolve(this.responseValue);                }            } else {                this.resolvePromise = resolve;                this.rejectPromise = reject;            }        });        return this.promise;    }}main();
:root {    --error: #c00;    --error-dark: #900;    --error-light: #f00;    --info: #36c;    --info-dark: #039;    --info-light: #69f;    --muted: #ddd;    --muted-dark: #888;    --muted-light: #eee;    --success: #0c0;    --success-dark: #090;    --success-light: #0f0;    --warning: #cc0;    --warning-dark: #990;    --warning-light: #ff0;}body {    font-family: Arial, Helvetica, sans-serif;}button {    border: 2px solid;    border-radius: 10px;    cursor: pointer;    margin: 1em 0.5em;    padding: 10px 15px;    transition: transform 1s;}button:active {    transform: scale(90%);}button.animated {    background-color: transparent;    overflow: hidden;    position: relative;    transition: color 0.3s, border-color 0.3s, transform 0.2s;    z-index: 1;}button.animated:hover {    border-color: transparent;}button.animated::after {    border: 0;    border-radius: 50%;    content: "";    height: 200%;    left: -50%;    opacity: 0;    position: absolute;    transform: scale(0.1);    transform-origin: center;    transition: opacity 0.3s, transform 0.3s;    top: -50%;    width: 200%;    z-index: -1;}button.animated:hover::after {    opacity: 1;    transform: scale(1);}input {    border: 0;    font: inherit;    letter-spacing: normal;    margin: 0;    padding: 0;}input:focus, input:placeholder-shown {    box-shadow: 0 2px 0 var(--muted);    outline: none;}dialog {    background-color: white;    border: 0;    border-radius: 10px;    box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);    opacity: 0;    outline: none;    padding: 0;    transform: scale(0);    transition: all 0.4s allow-discrete;    width: 50%;}dialog:open {    opacity: 1;    transform: scale(1);}@starting-style {    dialog:open {        opacity: 0;        transform: scale(0);    }}dialog::backdrop {    background-color: rgba(0, 0, 0, 0);    transition: all 0.4s allow-discrete;}dialog:open::backdrop {    background-color: rgba(0, 0, 0, 0.4);}@starting-style {    dialog:open::backdrop {        background-color: rgba(0, 0, 0, 0);    }}dialog header, dialog main, dialog footer {    display: flow-root;    padding: 0 1em;    text-align: center;}dialog header {    background-color: black;    color: white;}dialog main, dialog footer {    background-color: white;    color: black;}dialog form {    display: flex;    flex-direction: column;}dialog header, dialog footer {    flex: initial;}dialog main {    flex: 1 1 auto;    overflow-y: auto;}.close {    aspect-ratio: 1 / 1;    background-color: rgba(0, 0, 0, 0);    border: 0;    border-radius: 50%;    box-sizing: border-box;    color: var(--muted);    font-size: 1.2em;    font-weight: bold;    height: 1.2em;    margin: 0;    padding: 0;    position: absolute;    right: 0.5rem;    top: 0.5rem;    user-select: none;}.close:hover,.close:focus {    background-color: rgba(255, 255, 255, 0.2);    color: white;}.success.text, .info.text, .warning.text, .error.text, button.animated.success.background::after, button.animated.info.background::after, button.animated.warning.background::after, button.animated.error.background::after {    background-color: white;}.success.background, .info.background, warning.background, error.background, button.animated.success.text:hover, button.animated.info.text:hover, button.animated.warning.text:hover, button.animated.error.text:hover {    color: white;}button.animated.success.text, button.animated.info.text, button.animated.warning.text, button.animated.error.text {    border-color: var(--muted);}.success.text, button.animated.success.background:hover {    color: var(--success);}.success.background, button.animated.success.text::after {    background-color: var(--success);}button.animated.success.text:hover, button.animated.success.background {    border-color: var(--success);} .info.text, button.animated.info.background:hover {    color: var(--info);}.info.background, button.animated.info.text::after {    background-color: var(--info);}button.animated.info.text:hover, button.animated.info.background {    border-color: var(--info);}.warning.text, button.animated.warning.background:hover {    color: var(--warning);}.warning.background, button.animated.warning.text::after {    background-color: var(--warning);}button.animated.warning.text:hover, button.animated.warning.background {    border-color: var(--warning);}.error.text, button.animated.error.background:hover {    color: var(--error);}.error.background, button.animated.error.text::after {    background-color: var(--error);}button.animated.error.text:hover, button.animated.error.background {    border-color: var(--error);}

I have a modal, as you can easily see in the link. When you resize the window until a scroll bar appears, you will see that the scroll bar appears for the entire modal. If you look closely, you can observe that the modal consists of a header (obviously), a main (the body text), and a footer (the button(s) at the bottom). I want the header and footer to act like a header and footer by only having the main portion have a scroll bar. How do I do this?


Viewing all articles
Browse latest Browse all 1675

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>