Можно ли выровнять вертикальную линию индикатора выполнения в соответствии с разрешением?

Моя цель — идеально выровнять вертикальную линию посередине, даже если мы сжимаем страницу. Можно ли сделать расклад эффективным?

Я пробовал таким образом

 <Card>
    <CardContent>
        <progress max = {1000} value = {500} />
        <p className = "vertical_line"></p>
    </CardContent>
</Card>

CSS:

.vertical_line {
  border-left: 1px solid black;
  height: 20px;
  position: absolute;
  top: 8px;
  left: 17.5%;
}

Вот пример (https://codesandbox.io/s/restless-cache-uj2z0)

Но не мог точно получить, может ли кто-нибудь помочь мне в этом запросе?

Да, не используйте относительную меру, такую ​​как процент.

Dennis Vash 21.12.2020 11:41

@DennisVash - Не могли бы вы помочь мне с этим вопросом?

Arunya 21.12.2020 11:43
left: 104px или рассчитать его динамически, есть много похожих вопросов, которые вы можете найти
Dennis Vash 21.12.2020 11:46

@DennisVash - Но когда я разворачиваю или сворачиваю страницу... вертикальная линия не выравнивается должным образом

Arunya 21.12.2020 11:47

Почему ты не использовал svg?

b3hr4d 21.12.2020 11:50

@ b3hr4d - для прогресса или вертикальной линии?

Arunya 21.12.2020 11:51

Для обоих, плохо сделать у вас пример!

b3hr4d 21.12.2020 11:53

@ b3hr4d - Примечание. Значение индикатора выполнения будет динамически меняться.

Arunya 21.12.2020 11:55

Это очень удобно и просто, также вы можете использовать анимацию.

b3hr4d 21.12.2020 11:58
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Разница между тегами Br и Wbr в HTML 5
Разница между тегами Br и Wbr в HTML 5
В целом, оба тега <br> и <wbr> имеют свои уникальные цели и функциональные возможности, и их использование зависит от конкретных требований к дизайну...
HTML И VS CODE Для Веб-разработки
HTML И VS CODE Для Веб-разработки
Прежде чем начать кодировать html в "VS CODE", мы должны сначала создать папку и назвать ее x.html, здесь я принимаю x как имя файла, который мы...
Как использовать WAI-ARIA
Как использовать WAI-ARIA
В моем текущем новом проекте почти все компоненты не учитывают веб-доступность. Моя нынешняя компания - это стартап, поэтому они не заботились о...
Статическая веб-страница, созданная с помощью CSS и HTML - до и не до.
Статическая веб-страница, созданная с помощью CSS и HTML - до и не до.
Я потратил некоторое время на создание своего сайта-портфолио. Затем, гордясь собой, я разместил свой код на серверах amazon. Мне потребовалось время,...
3
9
593
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я назначил относительное позиционирование родительскому контейнеру прогресса, чтобы выровнять строку с абсолютным позиционированием.

Примечание: я начал правило left: 49.5%. Поскольку ширина линии равна 1px. Это означает, что линия идеально отцентрована.

Попробуйте этот код:

Стиль.css

.vertical_line {
  border-left: 1px solid black;
  height: 20px;
  position: absolute;
  top: 0;
  left: 49.5%;
}

.progress_container {
  position: relative;
  display: inline-block;
}

App.js

export default function App() {
  return (
    <div>
      <Card>
        <CardContent
        className = {'progress_container'}
        >
          <progress max = {1000} value = {500} />
          <p className = "vertical_line"></p>
        </CardContent>
      </Card>
    </div>
  );
}

@Арунья, рад помочь

s.kuznetsov 21.12.2020 12:08

Используя SVG, вы можете создать свой собственный настраиваемый компонент индикатора выполнения, а также использовать для него кадр анимации.

const Progress = ({max,value})=> { 
  const width = max + 5;
  return (
  <svg width = {width} height = "20">
  <line
    x1 = {5}
    y1 = {10}
    x2 = {max}
    y2 = {10}
    strokeWidth = {5}
    strokeLinecap = "round"
    stroke = "grey"
  />
  <style>{"@keyframes draw{to{stroke-dashoffset:0}}"}</style>
  <line
    style = {{
      strokeDasharray: width,
      strokeDashoffset: width,
      animation: "draw 1s linear forwards",
    }}
    x1 = {5}
    y1 = {10}
    x2 = {value}
    y2 = {10}
    strokeWidth = {5}
    strokeLinecap = "round"
    stroke = {"red"}
  />
  <line x1 = {width/2} y1 = {0} x2 = {width/2} y2 = {20} strokeWidth = {2} stroke = "black" />
</svg>
  )
}
const App = ()=> <Progress max = {200} value = {100} />

ReactDOM.render(
  <App/>,
  document.getElementById("react")
);
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id = "react"></div>

Другие вопросы по теме