Используйте Flexbox для создания строк или столбцов элементов. Установите display: flex
на элементе #content
, чтобы сделать его flex-container . Все дочерние элементы в контейнере будут считаться flex-children .
CSS Tricks имеет отличное руководство по Flexbox . Обязательно посмотрите.
Вот объяснение почему display: inline-block
создает пробелы, которые у вас есть в данный момент.
Вам нужно добавить несколько CSS правил, чтобы изменить размер элемента #slider
. Прежде всего убедитесь, что родительский элемент или контейнер слайдера имеет position: relative
. Это позиционирует каждый absolute
позиционированный элемент относительно родительского элемента relative
.
Теперь width: 20%
на ползунке будет такой же ширины на элементе .step
и заставляет ползунок изменять размер без с использованием JavaScript. Если это проблема стиля, возможно, ее можно (и нужно) исправить с помощью CSS, запомните это.
Также используйте модель border-box
для комбинирования отступа и ширины элемента. По умолчанию все элементы имеют box-sizing: content-box
, что добавит отступы к ширине. Например: width: 100px
и padding: 0 10px 0 10px
сделают ширину элемента 120px
.
Использование box-sizing: border-box
не добавит отступы к ширине (или высоте), а только добавит отступы внутрь элемент. У MDN есть несколько замечательных примеров , чтобы показать, как это работает.
Проверьте обновленный пример и дайте мне знать, если он работает.
$(document).ready(function() {
//console.log($("#content").children().first());
$("#content").append('<div id="slider"></div>');
var delay = 150,
setTimeoutConst;
$('.steps').hover(function() {
var that = this;
setTimeoutConst = setTimeout(function() {
var left = $(that).position().left;
$('#slider').stop().animate({
'left': left,
}, 300);
}, delay);
}, function() {
clearTimeout(setTimeoutConst);
});
})
*, *::before, *::after {
box-sizing: inherit;
margin: 0;
padding: 0;
}
html {
box-sizing: border-box;
}
#content-wrap {
width: 100%;
padding: 15px 2.5% 0px 2.5%;
}
#content {
position: relative;
display: flex;
flex-wrap: wrap;
width: 100%;
}
.steps {
width: 20%;
height: 150px;
background-color: white;
}
#slider {
position: absolute;
left: 0;
height: 150px;
width: 20%;
background-color: rgb(240, 240, 240);
display: inline-block;
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="script.js"></script>
<title>Document</title>
</head>
<body>
<div id="content-wrap">
<div id="content">
<div class="steps" style="background-color: aqua;"></div>
<div class="steps" style="background-color:black"></div>
<div class="steps" style="background-color: aqua;"></div>
<div class="steps" style="background-color: black;"></div>
<div class="steps" style="background-color: aqua;"></div>
</div>
</div>
</body>
</html>