Я создаю компонент в ReactJ, который отображает некоторый текст поверх изображения на странице. Этот текст настраивается в приложении диспетчера конфигурации, которое также создается с помощью ReactJ.
Я использую vw (ширина области просмотра) в качестве единиц, поскольку этот компонент должен быть отзывчивым. При использовании этих единиц размер текста всегда корректно подбирается правильно. И если я изменяю размер окон, то текст находится в том же месте.
Моя проблема в диспетчере конфигурации, где я настраиваю текст, который должен появиться, потому что я делаю предварительный просмотр этого компонента внутри модального окна,
Мне нужно правильно и точно определить, где будет выглядеть текст, как если бы это был оригинальный рендер. Это должно быть как миниатюра реального компонента. Я тоже использую VW, но он не работает. Он появляется на другом сайте контейнера, а также, когда я изменяю размер окна, текст тоже перемещается. Я пытался использовать модули vmin, но они тоже не работали.
Мне нужен контейнер, чтобы взять ссылку, как если бы это было окно браузера, чтобы единицы ширины области просмотра использовали те же измерения, что и предварительный просмотр.
Или, если у вас есть другая идея, сделать это.
Это сокращенная часть кода в ReactJS. Также государство заряжается тестовыми данными для понимания проблемы
import React, { Component } from 'react';
import '../styles/main.scss';
class PreviewEditor extends Component {
constructor(props) {
super(props);
this.state = {
text: {
text: '',
fontSize: 2,
position: {
vertical: {
key: 'top',
value: 20
},
horizontal: {
key: 'right',
value: 10
}
}
}
}
}
render() {
let object = this.props;
return (
<div>
<div className='container-body'>
<div>
<div className="container-preview">
<img src={object.url}></img>
<div className="conteiner-text" style={{
[this.state.text.position.vertical.key]: this.state.text.position.vertical.value + "vw",
[this.state.text.position.horizontal.key]: this.state.text.position.horizontal.value + "vw",
fontSize: this.state.text.fontSize + "vw",
}}>
<label>{this.state.text.text}</label>
</div>
</div>
</div>
<div className="row">
............ TODO
</div>
</div>
</div>
);
}
}
export default PreviewEditor
И эта часть CSS
.container-preview {
background-color: #2dc5c5;
width: 100%;
position: relative;
}
.container-preview > img{
max-width: 100%;
}
.conteiner-text{
display: inline-block;
position: absolute;
}