#javascript #html #css
Вопрос:
Я хочу создать линию, похожую на ось Y, в HTML и CSS. Я хочу, чтобы эта линия выглядела только как ось Y.
Я попробовал следующий подход. Это работает в соответствии с моими ожиданиями, но выглядит не очень хорошо.
#mySpan{
writing-mode: vertical-lr;
transform: rotate(180deg);
}
<table >
<tr>
<td><span style="writing-mode: vertical-lr;
transform: rotate(180deg);"> <b>Secondary Axis</b></span></td>
<td>
<ul>
<br><br><br>
<li>3</li><br><br><br><br>
<li>2</li><br><br><br><br>
<li>1</li><br><br><br><br>
<li> 0</li><br><br><br><br>
</ul>
</td>
<td>
<div style="border-left: 1px solid black; height:250px;position:left;left: 50%;">
</div>
</td>
</tr>
</table>
Также он занимает место в верхней или нижней части. Может быть, это потому, что я использовал br
тег.
Кто-нибудь подсказывает, какие изменения/модификации мне нужно сделать, чтобы это выглядело как ось Y.
Спасибо
Ответ №1:
Вот способ, которым вы можете его создать, используйте display: flex;
на родителе, чтобы сделать ребенка гибким
flex-direction: column;
чтобы показать элементы в столбце, если вы этого не сделаете, элементы будут отображаться в одной строке, например X asix.
justify-content: space-between;
чтобы разделить равный промежуток между предметами
Примечание: Вы можете увеличивать и уменьшать числа в LI, они будут автоматически настраиваться.
.wrapper {display: flex;}
ul {list-style:none; height: 250px; display: flex; flex-direction: column; justify-content: space-between; border-right: 1px solid; }
li {
text-align:right;
position: relative;
padding-right: 5px;
}
li:after {
content: "-";
position: absolute;
top: 50%;
right: 0;
transform: translate(60%, -50%);
}
<div class="wrapper">
<ul>
<li>0.0005</li>
<li>13</li>
<li>12.44</li>
<li>1</li>
<li>.100</li>
</ul>
</div>
Комментарии:
1. Это прекрасно работает в соответствии с моими требованиями. У меня есть несколько глупых вопросов. 1. Для более чем 2 цифр он перекрывается с «-«. 2. Возможно ли динамически создавать «li» в соответствии с входными данными. Это может быть глупый вопрос, но я новичок в FE . Спасибо
2. Я не получил ваш 2-й пункт, можно ли динамически создавать «li» в соответствии с вводом
3. исправлено на 1-й пункт, если это вам поможет , не забудьте отметить это как правильный ответ
4. возможно ли , что если я передал 4 элемента, то он должен создать 4 тега <li>, если 3, то 3 тега <li><li>. Надеюсь, теперь мне все ясно.
5. Да, второй пункт работает. Не могли бы вы также проверить наличие 4-5 цифр. потому что некоторое время значения могут быть 0,0005 ,0,045 и т.д., Тогда они будут перекрываться.
Ответ №2:
Я думаю, что в вашем коде много ошибок.. Проблема с пространством заключается в том, что ваш
Вторая проблема заключается в том, что вы использовали вертикальную линию в качестве div со стилем высоты (вы можете увеличить размер на 250 пикселей (чтобы поймать
добавленное вами))
в строке кнопки, если вы планируете использовать это для добавления формулы или чего-то еще, это не будет работать для вас.
начните с html-холста или svg
Ответ №3:
ul {
list-style:none;
border-right: 1px solid;
width: 20px;
}
li {
margin-bottom: 125px
}
li:after {
content: "-";
padding-left: 9px;
}
<ul>
<li>3</li>
<li>2</li>
<li>1</li>
<li>0</li>
</ul>
Ответ №4:
Вы можете использовать псевдоэлементы и счетчики CSS
*{
box-sizing: border-box;
padding: 0;
margin:0;
}
body{padding: 6rem}
ul{
position: relative;
counter-reset: timeline-counter -1;
border-left: 1px solid black;
transform: scale(-1) rotateY(180deg);
}
ul li{
position: relative;
counter-increment: timeline-counter;
height: 32px;
color: white;
background-color: grey;
margin-bottom: 1rem;
list-style: none;
transform:rotateX(180deg);
line-height: 32px;
padding-left: 1rem
}
ul li:before {
content: "0" counter(timeline-counter);
position: absolute;
top: 8px;
left: -32px;
font-size: 1rem;
color: black;
line-height: 1;
}
ul li:after {
content: "";
--height-lenght: 1px;
position: absolute;
top: calc(50% - var(--height-lenght));
left: -6px;
width: 12px;
height: var(--height-lenght);
background-color: hsl(0deg 0% 0%);
}
<ul>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
<li>Line 4</li>
<li>Line 5</li>
<li>Line 6</li>
</ul>
Или с помощью гибкой коробки
*{
box-sizing: border-box;
padding: 0;
margin:0;
}
body{padding: 6rem}
ul{
position: relative;
counter-reset: timeline-counter -1;
border-left: 1px solid black;
flex-direction: column-reverse;
display: flex;
}
ul li{
position: relative;
counter-increment: timeline-counter;
height: 32px;
color: white;
background-color: grey;
margin-bottom: 1rem;
list-style: none;
padding-left: 1rem;
line-height: 32px;
}
ul li:before {
content: "0" counter(timeline-counter);
position: absolute;
top: 8px;
left: -32px;
font-size: 1rem;
color: black;
line-height: 1;
}
ul li:after {
content: "";
--height-lenght: 1px;
position: absolute;
top: calc(50% - var(--height-lenght));
left: -6px;
width: 12px;
height: var(--height-lenght);
background-color: hsl(0deg 0% 0%);
}
<ul>
<li>Line 1</li>
<li>Line 2</li>
<li>Line 3</li>
</ul>
Комментарии:
1. @Glidas. Тамбо, когда браузер увеличивает/уменьшает масштаб, вертикальная линия также уменьшается и увеличивается. Я хочу, чтобы высота линии была фиксированной. Какие изменения мне нужны в приведенном выше коде. Пожалуйста, предложите
2. @Kim странно, что я не произвожу такого же эффекта, как ты. не могли бы вы, пожалуйста, дать мне название вашего браузера и номер версии, если это возможно ? и, кстати, который из приведенного выше образца? или ты имеешь в виду их обоих
3. Я использую chrome версии 90.0.4430.93. и оба ведут себя одинаково. Я также попробовал firefox 88.0.1, но та же проблема
4. Очень странное у тебя
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0">
в голове? У меня та же версия, но у меня нет этой проблемы. Если возможно, поделитесь со мной своим экраном.5. Я понял. когда я увеличиваю/уменьшаю масштаб, моя таблица корректируется, и, соответственно, эта вертикальная линия также корректируется. Мне нужно посмотреть на эту корректировку таблицы. Можем ли мы четко указать высоту этой вертикальной линии ?