Anonymous
Логика добавления вертикальных шаговых линий: ReactJS
Сообщение
Anonymous » 09 янв 2025, 22:13
Я создал фиктивное пошаговое приложение, с функциональностью оно работает нормально. Я пытаюсь добавить линию прогресса прямо под кругом и между всеми кругами. Кружочки, обозначающие шаги, имеют три состояния
< /p>
Зеленый, когда шаг завершен
Синий , на текущем шаге
Белый, когда он нетронут.
В похожих строках мне нужна зеленая линия когда текущий шаг завершен и линия, направленная к следующему шагу, должна быть синей, в противном случае она должна быть серого цвета. Может ли кто-нибудь помочь?
https://codesandbox.io/p/sandbox/stepper-ppnqgc
Код: Выделить всё
interface StepsProps {
currentStep: number;
isSubmitted: boolean;
stepsData: { title: string }[];
}
const Steps: React.FC = ({
currentStep,
isSubmitted,
stepsData,
}) => (
[list]
{stepsData.map((step, index) => (
[*] key={index}
className={`${
index < currentStep ||
(index === stepsData.length - 1 && isSubmitted)
? "complete"
: ""
} ${currentStep === index ? "active" : ""}`}
>
{step.title}
))}
[/list]
);
interface BodyProps {
currentStep: number;
isSubmitted: boolean;
stepsData: { title: string; content: string }[];
}
const Body: React.FC = ({ currentStep, isSubmitted, stepsData }) => (
);
const StepContent = () => { return null }
const root = ReactDOM.createRoot(document.getElementById('root'))
root.render(
)
Код: Выделить всё
body {
margin: 0;
font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif;
background-color: #f9f9f9;
color: #333;
}
h1,
h2,
h3,
p {
margin: 0;
}
.header {
text-align: center;
padding: 20px;
background-color: #007bff;
color: white;
}
.footer {
display: flex;
justify-content: center;
gap: 15px;
padding: 15px;
background-color: #007bff;
}
.footer-button {
padding: 10px 20px;
font-size: 16px;
color: white;
background-color: #0056b3;
border: none;
border-radius: 4px;
cursor: pointer;
transition: background-color 0.3s ease;
}
.footer-button:disabled {
background-color: #ccc;
cursor: not-allowed;
}
.footer-button:hover:not(:disabled) {
background-color: #004085;
}
.footer-button.submit {
background-color: #28a745;
}
.footer-button.submit:hover:not(:disabled) {
background-color: #218838;
}
.body {
display: flex;
flex-direction: row;
}
.left {
width: 30%;
padding: 20px;
background-color: #f4f4f4;
border-right: 1px solid #ddd;
}
.steps {
display: flex;
flex-direction: column;
align-items: flex-start;
position: relative;
}
.steps ul {
list-style: none;
padding: 0;
margin: 0;
}
.steps li {
display: flex;
align-items: center;
margin-bottom: 40px;
cursor: pointer;
}
.steps li .circle {
width: 24px;
height: 24px;
border-radius: 50%;
border: 2px solid #ccc;
background-color: #fff;
position: relative;
z-index: 1;
transition: background-color 0.3s, border-color 0.3s;
}
.steps li.complete .circle {
background-color: #28a745;
border-color: #28a745;
}
.steps li.active .circle {
background-color: #007bff;
border-color: #007bff;
}
.steps li .step-label {
margin-left: 15px;
font-size: 16px;
color: #333;
}
.right {
flex: 1;
padding: 20px;
}
.step-content {
padding: 10px;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
}
.step-content p {
font-size: 16px;
line-height: 1.6;
}
[1]:
Подробнее здесь:
https://stackoverflow.com/questions/793 ... es-reactjs
1736449984
Anonymous
Я создал фиктивное пошаговое приложение, с функциональностью оно работает нормально. Я пытаюсь добавить линию прогресса прямо под кругом и между всеми кругами. Кружочки, обозначающие шаги, имеют три состояния [img]https://i.sstatic.net/E9VCHvZP.png[/img] < /p> [list] [*]Зеленый, когда шаг завершен [*]Синий , на текущем шаге [*]Белый, когда он нетронут. [/list] В похожих строках мне нужна зеленая линия когда текущий шаг завершен и линия, направленная к следующему шагу, должна быть синей, в противном случае она должна быть серого цвета. Может ли кто-нибудь помочь? https://codesandbox.io/p/sandbox/stepper-ppnqgc [code]interface StepsProps { currentStep: number; isSubmitted: boolean; stepsData: { title: string }[]; } const Steps: React.FC = ({ currentStep, isSubmitted, stepsData, }) => ( [list] {stepsData.map((step, index) => ( [*] key={index} className={`${ index < currentStep || (index === stepsData.length - 1 && isSubmitted) ? "complete" : "" } ${currentStep === index ? "active" : ""}`} > {step.title} ))} [/list] ); interface BodyProps { currentStep: number; isSubmitted: boolean; stepsData: { title: string; content: string }[]; } const Body: React.FC = ({ currentStep, isSubmitted, stepsData }) => ( ); const StepContent = () => { return null } const root = ReactDOM.createRoot(document.getElementById('root')) root.render( )[/code] [code]body { margin: 0; font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; background-color: #f9f9f9; color: #333; } h1, h2, h3, p { margin: 0; } .header { text-align: center; padding: 20px; background-color: #007bff; color: white; } .footer { display: flex; justify-content: center; gap: 15px; padding: 15px; background-color: #007bff; } .footer-button { padding: 10px 20px; font-size: 16px; color: white; background-color: #0056b3; border: none; border-radius: 4px; cursor: pointer; transition: background-color 0.3s ease; } .footer-button:disabled { background-color: #ccc; cursor: not-allowed; } .footer-button:hover:not(:disabled) { background-color: #004085; } .footer-button.submit { background-color: #28a745; } .footer-button.submit:hover:not(:disabled) { background-color: #218838; } .body { display: flex; flex-direction: row; } .left { width: 30%; padding: 20px; background-color: #f4f4f4; border-right: 1px solid #ddd; } .steps { display: flex; flex-direction: column; align-items: flex-start; position: relative; } .steps ul { list-style: none; padding: 0; margin: 0; } .steps li { display: flex; align-items: center; margin-bottom: 40px; cursor: pointer; } .steps li .circle { width: 24px; height: 24px; border-radius: 50%; border: 2px solid #ccc; background-color: #fff; position: relative; z-index: 1; transition: background-color 0.3s, border-color 0.3s; } .steps li.complete .circle { background-color: #28a745; border-color: #28a745; } .steps li.active .circle { background-color: #007bff; border-color: #007bff; } .steps li .step-label { margin-left: 15px; font-size: 16px; color: #333; } .right { flex: 1; padding: 20px; } .step-content { padding: 10px; background-color: #fff; border-radius: 4px; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); } .step-content p { font-size: 16px; line-height: 1.6; }[/code] [code] [/code] [1]: Подробнее здесь: [url]https://stackoverflow.com/questions/79343485/logic-to-add-vertical-stepper-lines-reactjs[/url]