Scale, увеличить либо уменьшить блок, привести ширину блока к 10%
Есть родительский блок и дочерний. Ширина родительского 653px. Ширина дочернего блока, может быть 5px, либо 300px. Рандомная...
Как будет выглядеть формула на javascript, которая отдаст значение для css свойства transform:scale(*)
, применив которую, ширина дочернего блока будет равна 10%
от ширины родителя.
Ответы (2 шт):
Автор решения: Евгений Ли
→ Ссылка
Не знаю как насчёт scale, просто указывая ширину хорошо получается, если конечно задача не стоит сделать чисто через scale.
let wrapper = document.querySelector('.wrapper');
let block = document.querySelector('.inner-block');
wrapper.addEventListener('click', function(){
block.classList.toggle("inner-10");
});
.wrapper {
background-color: green;
width: 300px;
height: 300px;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.inner-block {
background-color: red;
width: 100%;
height: 100%;
transition: 0.3s;
display: flex;
color: white;
justify-content: center;
align-items: center;
position: relative;
font-size: 16px;
}
.inner-block p {
font-size: 1rem;
}
.inner-block.inner-10 {
transform: scale(0.1);
}
<div class="wrapper">
<div class="inner-block">
<p>Нажми на меня</p>
</div>
</div>
Автор решения: UModeL
→ Ссылка
Формула простейшая:
653 / 10 = 65.3 (10% ширины родителя, также это целевой размер для потомков)
65.3 / 5 = ⎫
Q (коэффициент масштабирования)
65.3 / 300 = ⎬
⎭
let parent = document.querySelector('.parent-w653');
let small = document.querySelector('.child-w005');
let large = document.querySelector('.child-w300');
function fScaleX(p, c) {
const Q = p.clientWidth / 10 / c.clientWidth;
c.style.transform = `scaleX(${Q}`;
console.log(`Q scaleX для ширины ${c.clientWidth}px = ${Q}`)
}
fScaleX(parent, small);
fScaleX(parent, large);
.parent-w653 {
display: grid; place-items: center;
background-color: #fc08; height: 180px; width: 653px;
}
.child-w005 {
background-color: #0808; height: 40px; width: 5px;
}
.child-w300 {
background-color: #00d8; height: 40px; width: 300px;
}
<div class="parent-w653">
5px<div class="child-w005"></div>
300px<div class="child-w300"></div>
</div>