Reputation: 168
my issue is that i want exact width (dynamicly) of my slide-group element. i try many way but each time i got 0px.
const slideGroupWidth = document.querySelector('.slide-group');
console.log(getComputedStyle(slideGroupWidth).width);
body {
display: flex;
align-items: center;
justify-content: start;
height: 100vh;
}
.slider {
display: flex;
position: relative;
width: 1100px;
margin-inline: auto;
overflow: hidden;
border: 1px solid red;
}
.btn {
background-color: #dcdcdc;
border-radius: 50%;
border: none;
align-self: start;
padding: .3rem;
font-size: 1rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
}
.left-btn {
top: 50%;
left: 1%;
transform: translate(30%, -50%);
}
.right-btn {
top: 50%;
right: 1%;
transform: translate(-30%, -50%);
}
.slide {
transition: all .5s ease;
}
.slide-group {
display: flex;
transition: all .5s ease;
}
.slide-img {
display: block;
}
<div class="slider">
<div class="slide-group">
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1084" alt="image" />
</div>
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1004" alt="image" />
</div>
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1044" alt="image" />
</div>
</div>
<div class="slide-group">
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1084" alt="image" />
</div>
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1004" alt="image" />
</div>
</div>
<button class="btn right-btn">➡</button>
<button class="btn left-btn">⬅</button>
</div>
another way that i got 0px:
let box = document.querySelector('.slide-group');
let width = box.offsetWidth;
console.log(width);
Why i want width? i want set width of .slide element dynamicly from
.slide-group container
.
note: inspect of this element give me 1050px width in chrome.
Upvotes: 0
Views: 126
Reputation: 36426
The problem is that you aren't waiting for an image to be loaded before you are asking the system what its width is.
This snippet puts in a rather basic onload function to demonstrate.
function allloaded() {
const slideGroupWidth = document.querySelector('.slide-group');
console.log(getComputedStyle(slideGroupWidth).width);
}
window.onload = allloaded;
body {
display: flex;
align-items: center;
justify-content: start;
height: 100vh;
}
.slider {
display: flex;
position: relative;
width: 1100px;
margin-inline: auto;
overflow: hidden;
border: 1px solid red;
}
.btn {
background-color: #dcdcdc;
border-radius: 50%;
border: none;
align-self: start;
padding: .3rem;
font-size: 1rem;
cursor: pointer;
display: flex;
align-items: center;
justify-content: center;
position: absolute;
}
.left-btn {
top: 50%;
left: 1%;
transform: translate(30%, -50%);
}
.right-btn {
top: 50%;
right: 1%;
transform: translate(-30%, -50%);
}
.slide {
transition: all .5s ease;
}
.slide-group {
display: flex;
transition: all .5s ease;
}
.slide-img {
display: block;
}
<div class="slider">
<div class="slide-group">
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1084" alt="image" />
</div>
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1004" alt="image" />
</div>
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1044" alt="image" />
</div>
</div>
<div class="slide-group">
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1084" alt="image" />
</div>
<div class="slide">
<img class="slide-img" src="https://picsum.photos/350/200?image=1004" alt="image" />
</div>
</div>
<button class="btn right-btn">➡</button>
<button class="btn left-btn">⬅</button>
</div>
Upvotes: 1
Reputation: 96
Try:
Keeping an id for slidegroup
like:
<div class="slide-group" id="slide-group">
js code:
console.log(document.getElementById("slide-group").offsetWidth)
This will print the exact width of div
Upvotes: 0