я нашел решение задачи, применив подсказки
qqFE и
pupenne
Только адаптировал всё под Vue js:
Видео
html:
<div class="question-card" ref="card">
<p
class="question-text"
ref="cardText"
:style="{ fontSize: fontSize + 'rem' }"
>
{{ text }}
</p>
</div>
в разделе script:
<script>
export default {
beforeCreate() {
this.calculateFontSize();
},
mounted() {
this.calculateFontSize();
},
data: () => ({
textWidth: 0,
cardWidth: 0,
cardHeight: 0,
textHeight: 0,
fontSize: 6,
text:
"there is an ejecting or lifting force, acting on a body immersed in a liquid or gas, which is equal to the weight of the volume of the liquid or gas displaced by the part of the body immersed in the liquid or gas –Law of Archimedes\n",
options: {
minSize: 11,
maxSize: 120
}
}),
created() {
window.addEventListener("resize", this.calculateFontSize);
},
destroyed() {
window.removeEventListener("resize", this.calculateFontSize);
},
methods: {
calculateFontSize() {
//get font size of text and card height
let fontSize = this.fontSize;
let textHeight = this.$refs.cardText.clientHeight;
let cardHeight = this.$refs.card.clientHeight - 50;
//compare card height and text height
if (textHeight >= cardHeight) {
this.fontSize = fontSize - 0.1;
} else if (textHeight < cardHeight) {
this.fontSize = fontSize + 0.1;
}
//apply card width and height to category text when resizing window
this.cardWidth = this.$refs.card.clientWidth;
this.cardHeight = this.$refs.card.clientHeight;
this.textWidth = this.$refs.cardText.clientWidth;
this.textHeight = this.$refs.cardText.clientHeight;
}
}
};
</script>
Получаю текущий размер шрифта текста, высоту текста и высоту карточки:
let fontSize = this.fontSize;
let textHeight = this.$refs.cardText.clientHeight;
let cardHeight = this.$refs.card.clientHeight - 50;
при каждом резайзе окна браузера вызывается метод, который сравнивает, является ли высота текста больше, высоты карточки:
if (textHeight >= cardHeight) {
this.fontSize = fontSize - 0.1;
} else if (textHeight < cardHeight) {
this.fontSize = fontSize + 0.1;
}
Для временной отладки,чтобы посмотреть все размеры:
this.cardWidth = this.$refs.card.clientWidth;
this.cardHeight = this.$refs.card.clientHeight;
this.textWidth = this.$refs.cardText.clientWidth;
this.textHeight = this.$refs.cardText.clientHeight;