Я создал Modal и поместил в него текст, описывающий мое приложение и то, как его использовать, но текст выходит за пределы Modal, поэтому верх и низ текста не видны. Я хотел бы сделать компонент прокручиваемым, чтобы мой текст не выходил за края страницы.
// The styling for the modal
const styles = theme => ({
paper: {
position: 'absolute',
width: theme.spacing.unit * 130,
backgroundColor: theme.palette.background.paper,
boxShadow: theme.shadows[5],
padding: theme.spacing.unit * 4,
},
});
function getModalStyle() {
const top = 50
const left = 50
return {
top: `${top}%`,
left: `${left}%`,
transform: `translate(-${top}%, -${left}%)`,
overflow: "scroll"
};
}
// The actual modal
<Modal
aria-labelledby = "simple-modal-title"
aria-describedby = "simple-modal-description"
open = {this.state.modalOpen}
onClose = {this.handleModalClose}
>
<div style = {getModalStyle()} className = {classes.paper}>
<MyLongTextComponent/>
</div>
</Modal>
Я бы хотел, чтобы функция прокрутки не зависела от фактической страницы за ней. Я не нашел большой помощи в Интернете, поэтому любые указатели были бы очень полезны! Кроме того, если Modal не подходит для использования в этой ситуации, сообщите мне. Я в меру новичок в React и material-ui, поэтому, если есть способ получше, я бы хотел узнать, как это сделать.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам повезет больше, если вы воспользуетесь компонентом Dialog. Modal - это конструкция нижнего уровня, которую использует Dialog. Вы можете найти примеры диалогов в разделе демонстрации компонентов.
Спасибо! Я начал с Backdrop и очень старался заставить его работать. Не понимал, что Dialog - это то, что я искал.
Для модального стиля вам нужно использовать overflow = scroll.
Ниже приведен пример кода для получения модального интерфейса материала с прокруткой. withStyles используется для применения стиля к модальному в этом примере.
material-ui использование стилей
const styles = theme => ({
modalStyle1:{
position:'absolute',
top:'10%',
left:'10%',
overflow:'scroll',
height:'100%',
display:'block'
}
});
<Modal open = {this.state.open4} className = {this.props.classes.modalStyle1}>
<div>
<Button size = "small" color = "primary" variant = "contained" onClick = {this.closeOrder}>
Close
</Button>
{this.getPics()}
</div>
</Modal>
Большое спасибо! Это привело меня к правильному пути решения проблемы.
@JahzielVillasana Рад, что это привело вас к решению, но к вашему сведению, теперь я обновил документация для Modal, чтобы прояснить, что Диалог обычно является отправной точкой для модальных диалогов, а не модальных, чтобы вы не изобретали решения заново ( для таких вещей, как наличие прокручиваемого содержимого), которые уже решены заранее с помощью Dialog.
Я знаю, что на этот вопрос уже был дан ответ, но я нашел проверенный ответ неполным.
Для создания правильного модального окна вы, скорее всего, захотите, чтобы он имел максимальную высоту и был разделен на 3 основных раздела:
Если у вас длинный список элементов в содержимом (т.е. форма), установка overflow: 'scroll' на modal приведет к двум основным проблемам:
maxHeight будет применен только к контейнеру, в то время как остальная часть содержимого будет по-прежнему видна под ним.Пример, близкий к производственному, включающий только заголовок и контент, будет выглядеть следующим образом:
const styles = theme => ({
modal:{
position:'absolute',
top:'10%',
left:'10%',
overflow:'hidden',
height:'100%',
maxHeight: 500,
display:'block'
},
header: {
padding: '12px 0',
borderBottom: '1px solid darkgrey'
},
content: {
padding: 12,
overflow: 'scroll'
}
});
const { classes } = this.props
<Modal open = {this.state.open}>
<div className = {classes.modal}>
<div className = {classes.heading}>
<h4>Your Title here</h4>
</div>
<div className = {classes.content}>
<Button size = "small" color = "primary" variant = "contained" onClick = {this.closeOrder}>
Close
</Button>
{this.getPics()}
</div>
</div>
</Modal>
Помимо лучшего форматирования, это решение также имеет два основных отличия, которые решают реальные проблемы, описанные выше:
overflow: hidden, скрывающий все за пределами своей коробкиoverflow: scroll, который не увеличивает заголовок, и это то, что мы ищемНадеюсь это поможет!
Для тех, кто ищет быстрый ответ на этот вопрос, вот решение, которое я нашел:
<Modal
open = {open}
onClose = {handleClose}
aria-labelledby = "simple-modal-title"
aria-describedby = "simple-modal-description"
style = {{ overflow: 'scroll' }}
>
<div style = {
zIndex: 10,
position: absolute,}>
{/*your content here*/}
</div>
</Modal>
Итак, всего 2 простых шага ...
Сделать модальное переполнение прокручиваемым
<Modal
style = {{ overflow: 'scroll' }}
>
Обновите стили для каждого прямого потомка модального окна. Вам необходимо добавить как минимум эти 2 атрибута:
<div style = {
zIndex: 10,
position: absolute,}>
Затем вы можете использовать css для изменения положения содержимого со свойствами top или left или настроить контейнер по своему усмотрению. Для решения этой проблемы не нужно переключаться на компонент Dialog.
Будет лучше, если вы сможете создать демонстрацию stackblitz