#javascript #html #css
#javascript #HTML #css
Вопрос:
Я пытаюсь соединить 2 точки линией через css. пробовал несколько раз, но не получилось.
https://codepen.io/diasraphael/pen/NWNYgdX
<div class="Rtable Rtable--4cols">
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>India</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>Japan</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>United states</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>Israel</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
</div>
пытаюсь достичь следующего
Ответ №1:
Если вам нужна непрерывная линия, вы можете использовать линейный градиент для создания линии в качестве фона на Rtable-cell
div.
div.Rtable-cell:nth-child(3n 1){
background: linear-gradient(to bottom, white 46%, red 46% 49%, white 49%);
/* or for a thicker line: */
background: linear-gradient(to bottom, white 40%, red 40% 50%, white 50%);
}
nth-child(3n 1)
будет выбран каждый 4-й дочерний элемент, начиная с первого, то есть все элементы порядка: 0.
ОБНОВЛЕНИЕ: Чтобы добавить пробел между точками и линией, вы можете добавить границу к точке:
.dot { border: 10px solid white; /* REST OF your CSS */ }
(К вашему сведению, ваш .dot
является встроенным блоком, поэтому под ним есть дополнительное пространство, поэтому он не идеально центрирован вертикально в Rtable-cell
. Я поместил линию немного выше центра, чтобы она казалась центрированной.)
Рабочий пример:
.Rtable {
display: flex;
flex-wrap: wrap;
padding: 0;
}
.Rtable-cell {
box-sizing: border-box;
flex-grow: 1;
width: 100%;
padding: 0.8em 0.2em;
overflow: hidden;
list-style: none;
background: fade(green,20%);
text-align: center;
}
.dot {
height: 25px;
width: 25px;
background-color: #bbb;
border-radius: 50%;
border: 10px solid white;
display: inline-block;
}
/* Table column sizing
================================== */
.Rtable--2cols > .Rtable-cell { width: 50%; }
.Rtable--3cols > .Rtable-cell { width: 33.33%; }
.Rtable--4cols > .Rtable-cell { width: 25%; }
.Rtable--5cols > .Rtable-cell { width: 20%; }
.Rtable--6cols > .Rtable-cell { width: 16.6%; }
.Rtable--7cols > .Rtable-cell { width: 14.2%; }
.Rtable--8cols > .Rtable-cell { width: 12.5%; }
.Rtable--9cols > .Rtable-cell { width: 11.1%; }
.Rtable {
position: relative; //top: $bw; left: $bw; //compensate for border offset
}
.Rtable-cell {
@include Rtable-cell--light;
}
div.Rtable-cell:nth-child(3n 1){
background: linear-gradient(to bottom, white 46%, red 46% 49%, white 49%);
}
<div class="Rtable Rtable--4cols">
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>India</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>Japan</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>United states</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>Israel</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
</div>
Комментарии:
1. Спасибо за ответ. Возможно ли удалить линию за пределами точек и некоторое пространство до их начала и окончания, как показано на рисунке выше.
2. @Raphael Вы можете добавить пробел между точкой и линией — я обновил свой ответ для этого. Поскольку он использует линейный градиент, я не могу придумать способ удалить строку с обоих концов без изменения HTML. Это вариант?
Ответ №2:
Я добавил пользовательский интервал с классом line
между ними. Расположите линию так, чтобы она проходила от правой части одной точки к левой части следующей. Я удалился overflow: hidden
из вашего Rtable-cell
класса, так как эта строка выходит за пределы этого div. Я добавил z-index: 2; position: relative;
для dot
класса, чтобы расположить line
за dot
.
Какое бы значение ширины линии вы ни указали, левое всегда должно составлять 50%, это точно выровняет линию по центру. Остальная ширина линии будет автоматически скорректирована по краю линии.
Надеюсь, это сработает для вас.
$bw: 3px;
@mixin Rtable-cell--light {
background-color: white;
border-color: mix(white,red,80%);
}
.Rtable {
display: flex;
flex-wrap: wrap;
padding: 0;
}
.Rtable-cell {
box-sizing: border-box;
flex-grow: 1;
width: 100%; // Default to full width
padding: 0.8em 0.2em;
// overflow: hidden; // Or flex might break
list-style: none;
background: fade(green,20%);
text-align: center;
}
.dot {
height: 25px;
width: 25px;
background-color: #bbb;
border-radius: 50%;
display: inline-block;
z-index: 2;
position: relative;
}
/* Table column sizing
================================== */
.Rtable--2cols > .Rtable-cell { width: 50%; }
.Rtable--3cols > .Rtable-cell { width: 33.33%; }
.Rtable--4cols > .Rtable-cell { width: 25%; }
.Rtable--5cols > .Rtable-cell { width: 20%; }
.Rtable--6cols > .Rtable-cell { width: 16.6%; }
.Rtable--7cols > .Rtable-cell { width: 14.2%; }
.Rtable--8cols > .Rtable-cell { width: 12.5%; }
.Rtable--9cols > .Rtable-cell { width: 11.1%; }
.Rtable {
position: relative; //top: $bw; left: $bw; //compensate for border offset
}
.Rtable-cell {
@include Rtable-cell--light;
}
.line {
width: 70%;
height: 2px;
display: block;
position: relative;
background: blue;
top: -16px;
left: 50%;
margin: 0 auto;
}
<div class="Rtable Rtable--4cols">
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
<span class="line"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>India</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
<span class="line"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>Japan</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
<span class="line"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>United states</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
<div style="order:0;" class="Rtable-cell">
<span class="dot"></span>
</div>
<div style="order:1;" class="Rtable-cell"><div>Israel</div></div>
<div style="order:2;" class="Rtable-cell">06.07.1988 - 05:15</div>
</div>
Комментарии:
1. спасибо за ответ. возможно ли выделить некоторое пространство между началом и концом строки, как показано на рисунке выше
2. @Raphael вы можете добавить пробел в betwwn до желаемого уровня, уменьшив ширину линии.
3. Спасибо, Нитиш, в моей настройке все работает отлично.
Ответ №3:
Что-то вроде этого?
*,
::after,
::before {
box-sizing: border-box;
}
.dot {
width: 40px;
height: 40px;
background-color: red;
border-radius: 100em;
box-shadow: 0 0 0 16px #fff;
}
.d {
display: flex;
justify-content: space-evenly;
margin-top: 80px;
border-top: 2px solid red;
}
.d .dot {
position: relative;
top: calc(((40px / 2) (2px / 2)) * -1);
}
<div class="d">
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
<div class="dot"></div>
</div>
Комментарии:
1. спасибо за ответ. можно ли удалить линии за пределами 3 точек?