2016-09-22 1 views
3

나는 순서가 매겨진 목록과 몇몇 점들을 연결하려고하는데, 나는 그것을 작동시킬 수 없다. 활성 클래스에 따라 세그먼트를 켜고 추가로이 그림과 같은 세그먼트 사이에 학생 이름을 추가하고 싶습니다. enter image description hereCSS3의 순서있는 목록으로 점을 연결하기

그러면 활성 클래스로 다른 세그먼트를 켤 수 있습니다.

이것이 내가 시도한 것입니다. 내가 보여 리튬 요소

UPDATE

내가 업데이트 다시 내 바이올린에 활성화 클래스를 추가하는 것을 잊었다 때문에

jsfiddle

UPDATE는

내 바이올린을 업데이트 나는 그 사람의 이름을 어디로 가야하는지.

ol.timetable li { 
 
    min-width: 25%; 
 
} 
 

 
.timetable { 
 
    width: 100%; 
 
    list-style: none; 
 
    list-style-image: none; 
 
    margin: 20px 0 20px 0; 
 
    padding: 0; 
 
} 
 

 
    .timetable li { 
 
     float: left; 
 
     text-align: center; 
 
     position: relative; 
 
    } 
 

 
    .timetable .date { 
 
     display: block; 
 
     vertical-align: bottom; 
 
     text-align: center; 
 
     margin-bottom: 1em; 
 
     color: #2B2B2B; 
 
    } 
 

 
    .timetable .dot { 
 
     color: black; 
 
     border: 3px solid #B2B2B2; 
 
     background-color: #B2B2B2; 
 
     border-radius: 50%; 
 
     line-height: 1.2; 
 
     width: 1.2em; 
 
     height: 1.2em; 
 
     display: inline-block; 
 
     z-index: 2; 
 
    } 
 

 
    .timetable .active .date, 
 
    .timetable .active .dot span { 
 
     color: black; 
 
    } 
 

 
    .timetable .dot:before { 
 
     content: ""; 
 
     display: block; 
 
     background-color: #B2B2B2; 
 
     height: 0.4em; 
 
     width: 50%; 
 
     position: absolute; 
 
     bottom: 0.9em; 
 
     left: 0; 
 
     z-index: 1; 
 
    } 
 

 
    .timetable .dot:after { 
 
     content: ""; 
 
     display: block; 
 
     background-color: #B2B2B2; 
 
     height: 0.4em; 
 
     width: 50%; 
 
     position: absolute; 
 
     bottom: 0.9em; 
 
     right: 0; 
 
     z-index: 1; 
 
    } 
 

 
    .timetable li:first-child .dot:before { 
 
     display: none; 
 
    } 
 

 
     .timetable li:first-child .dot:after .active { 
 
      border: 3px solid #F26227 !important; 
 
      background-color: #F26227 !important; 
 
     } 
 

 
    .timetable li:last-of-type .dot:after { 
 
     display: none; 
 
    } 
 

 
    .timetable .active .dot { 
 
     border: 3px solid #F26227; 
 
     background-color: #F26227; 
 
    } 
 

 
    .timetable .active .dot:before, 
 
    .timetable .active .dot:before { 
 
     background-color: #F26227; 
 
    }
<ol class='timetable'> 
 
<li class="active"> 
 
    <span class='date'>5/26/2017</span> 
 
    <span class='active dot'> 
 
    <span> 
 
    </span> 
 
    </span> 
 
</li> 
 
<li class="active"> 
 
    <span class='date'>5/29/2017</span> 
 
    <span class='active dot'> 
 
     <span></span> 
 
    </span> 
 
</li> 
 
<li> 
 
    <span class='date'>6/5/2017</span> 
 
    <span class='dot'> 
 
     <span></span> 
 
    </span> 
 
</li> 
 
</ol>

+0

학생의 이름을 올리려는 HTML은 어디에서 계획하고 있습니까? 문제의 일부를 표시하는 이름을 처리하도록 코드를 업데이트 할 수 있습니까? – Serlite

+0

자세한 내용을 보려면를 누르십시오. 모든 세그먼트 아래에 레이블이 있거나 최신 레이블이 있어야합니까? 세 점이 모두 활성화되어 있으면 레이블은 어디에 있습니까? – Serlite

+0

내 질문이 업데이트되었습니다. 각 세그먼트 아래의 레이블. 그러나 레이블은 정확한 세그먼트에 동적으로 추가 될 것입니다. 따라서 한 세그먼트에서 오른쪽의 다른 경우 왼쪽에 나타납니다. 것은 정렬입니다. –

답변

0

는 차라리 :before:after의 조합보다, 하나의 긴 :before 의사 요소로 구성된 각 선분을 건의 할 것입니다, 당신은 쓸 필요가 얼마나 많은 CSS 단순화하기 . 또한 연관된 ​​항목이 활성화되어있을 때 이전 선분을 채우는 것이 더 간단합니다.

레이블을 배치 할 때 동적으로 포함 된 <span>을 추가/제거 할 것이라고 가정 할 예정입니다. 따라서 어디에 배치해야하는지 결정해야합니다. 그에 따라 위치를 지정하고 중심을 맞추기 위해 절대 위치 지정과 텍스트를 가운데 맞추기위한 작은 변형을 제안합니다.

모두 함께이 퍼팅, 당신은 얻을 : 레이블 요소가 항목 내에서 같은 장소에 보장되어 있지 않은 경우

ol.timetable li { 
 
    min-width: 25%; 
 
} 
 
.timetable { 
 
    width: 100%; 
 
    list-style: none; 
 
    list-style-image: none; 
 
    margin: 20px 0 20px 0; 
 
    padding: 0; 
 
} 
 
.timetable li { 
 
    float: left; 
 
    text-align: center; 
 
    position: relative; 
 
} 
 
.timetable .date { 
 
    display: block; 
 
    vertical-align: bottom; 
 
    text-align: center; 
 
    margin-bottom: 1em; 
 
    color: #2B2B2B; 
 
} 
 
.timetable .dot { 
 
    color: black; 
 
    border: 3px solid #B2B2B2; 
 
    background-color: #B2B2B2; 
 
    border-radius: 50%; 
 
    line-height: 1.2; 
 
    width: 1.2em; 
 
    height: 1.2em; 
 
    display: inline-block; 
 
    z-index: 2; 
 
} 
 
.timetable .active .date, 
 
.timetable .active .dot span { 
 
    color: black; 
 
} 
 
.timetable .dot:before { 
 
    content: ""; 
 
    display: block; 
 
    background-color: #B2B2B2; 
 
    height: 0.4em; 
 
    width: 100%; 
 
    position: absolute; 
 
    bottom: 0.9em; 
 
    left: -50%; 
 
    z-index: 1; 
 
} 
 
.timetable li:first-child .dot:before { 
 
    display: none; 
 
} 
 
.timetable .active .dot { 
 
    border: 3px solid #F26227; 
 
    background-color: #F26227; 
 
} 
 
.timetable .active + .active .dot:before { 
 
    background-color: #F26227; 
 
} 
 
.timetable li > span:nth-child(3){ 
 
    position:absolute; 
 
    right:0; 
 
    bottom:-15px; 
 
    transform: translateX(50%); 
 
}
<ol class='timetable'> 
 
    <li class="active"> 
 
    <span class='date'>5/26/2017</span> 
 
    <span class='active dot'> 
 
    <span> 
 
    </span> 
 
    </span> 
 
    <span>John Doe</span> 
 
    </li> 
 
    <li class="active"> 
 
    <span class='date'>5/29/2017</span> 
 
    <span class='active dot'> 
 
     <span></span> 
 
    </span> 
 
    </li> 
 
    <li> 
 
    <span class='date'>6/5/2017</span> 
 
    <span class='dot'> 
 
     <span></span> 
 
    </span> 
 
    </li> 
 
</ol>
, 내가 추가 제안 거라고 CSS를 사용하여보다 쉽게 ​​타겟팅 할 수있는 클래스입니다. 또한 활성 도트 뒤의 채워지지 않은 선을 숨기려면 .timetable .dot:beforez-index을 음수 값으로 설정하면됩니다.

또한 형제 선택 도구의 사용은 .timetable .active + .active .dot:before입니다. 이렇게하면 활성 항목과 관련된 모든 줄이 아닌 두 개의 활성 점 사이의 선만 강조 표시됩니다.

희망이 도움이됩니다. 궁금한 점이 있으면 알려주세요.

+0

답장을 보내 주셔서 감사합니다. 난 그냥 첫 번째 세그먼트에 대한 작동하지만 다른 세그먼트로 전환하면 문제가있어. 중간 점과 마지막 점이 class = active를 의미합니다. –

+0

@ MaximusDecimus 알겠습니다 - 주어진 시간에 최대 두 개의 점만'.active '이 될 수 있다는 것을 의미합니까? – Serlite

+0

예. 미안해. 세그먼트를 전환 할 수 있습니다. –