2017-12-22 3 views
5

Ich versuche, eine vertikale Linie mit mehreren Zweigen linken und rechten Seiten der Linie zu zeichnen. Ich habe pseudo Klasse div nach, aber wenn der rechten Seite Text gibt es ein Problem bei der Positionierung des Pfeils.Ist gibt es eine andere Möglichkeit, diese Klasse zu schreiben.Kann jemand vorschlagen, wie man diese Klasse schreiben?Vertikale Linie mit Niederlassungen in css

Jede Hilfe wird geschätzt. enter image description here für Inspiration Blick auf diese demo

.at-timeline .timeline--details { 
 
    position: relative; 
 
} 
 
.at-timeline .timeline--single { 
 
    display: flex; 
 
    flex-direction: row; 
 
} 
 
.at-timeline .timeline--details, 
 
.at-timeline .time--date { 
 
    flex-basis: 14%; 
 
    padding: 15px 50px; 
 
} 
 
.text-right { text-align: right;} 
 
.at-timeline .timeline--details:before { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 35px; 
 
    height: 2px; 
 
    top: 17%; 
 
    right: 0; 
 
    background: #2783e8; 
 
} 
 
.at-timeline:after { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 2px; 
 
    height: 300%; 
 
    top: 15%; 
 
    left: 24%; 
 
    background: #2783e8; 
 
}
<div class="timeline at-timeline" style="padding: 100px;"> 
 
\t <div class="timeline--single"> 
 
\t \t <div class="timeline--details text-right"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t \t <span class="time--date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t </div> 
 
\t <div class="timeline--single"> 
 
\t \t <span class="time--date text-right"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t \t <div class="timeline--details reverse"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t </div> 
 
\t <div class="timeline--single"> 
 
\t \t <div class="timeline--details text-right"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t \t <span class="time--date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t </div> 
 
</div>

+1

aber tun Sie Ihren eigenen Code schreiben wollen? oder auch die Demo nutzen? – Leo

+0

Ich möchte die gleichen HTML-Klassen verwenden. Ich möchte HTML nicht nur in CSS ändern Ich möchte den Code ändern. – Husna

+0

Ich habe einfach den Code aus der Demo extrahiert, und ich habe ihr CSS verwendet. vielleicht hilft es Ihnen https://jsfiddle.net/Micio/27ehjpt3/ – Leo

Antwort

0

Ich würde die HTML vereinfachen, Tracking rechts/links auf jeder Zeile und Ändern der Reihenfolge der Elemente könnte ein Problem und störend für Bildschirmleser oder mobile Version sein (In einem schmalen Bildschirm könnten die "zwei Seiten" weit von bester Aussicht sein, Verwenden Sie einfach die rechte Seite spart Platz) : nth-Kind (ungerade) können Sie die Position, Ausrichtung usw. der Elemente ändern, alternativ auf jeder "Zeile".

div{box-sizing:border-box;} 
 
.timeline-item{ 
 
    color:blue; 
 
} 
 
.timeline{overflow:hidden;position:relative;} 
 
.timeline:after{display:block;content:" ";width:2px;height:100%;position:absolute;left:50%;background:green;}/*vertical bar*/ 
 
h4{margin:0;} 
 

 
.timeline-item .timeline-date{clear:both;float:left;width:50%;text-align:right;;padding:0 1rem 1rem;} 
 
.timeline-item .timeline-details{float:right;width:50%;text-align:left;padding:0 1rem 1rem;position:relative;} 
 
.timeline-item:nth-child(odd){ 
 
    color:red; 
 
} 
 
.timeline-item:nth-child(odd) .timeline-date{float:right;text-align:left;} 
 
.timeline-item:nth-child(odd) .timeline-details{float:left;text-align:right} 
 

 
/*branches*/ 
 
.timeline-item .timeline-details:before{display:block;content:" ";height:2px;width:1rem;background-color:green;position:absolute;top:0.5em;left:0;} 
 
.timeline-item:nth-child(odd) .timeline-details:before{right:0;left:initial;}
<div class="timeline at-timeline"> 
 
\t <div class="timeline-item"> 
 
    <div class="timeline-date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </div> 
 
\t \t <div class="timeline-details"> 
 
\t \t \t <h4>Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
    </div> 
 
    \t 
 
     <div class="timeline-item"> 
 
    <div class="timeline-date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </div> 
 
\t \t <div class="timeline-details"> 
 
\t \t \t <h4>Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
    </div> 
 
    <div class="timeline-item"> 
 
    <div class="timeline-date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </div> 
 
\t \t <div class="timeline-details"> 
 
\t \t \t <h4>Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
    </div> 
 
    <div class="timeline-item"> 
 
    <div class="timeline-date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </div> 
 
\t \t <div class="timeline-details"> 
 
\t \t \t <h4>Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
    </div> 
 
\t </div>

2

Sie konnten erreichen sie die absolute Positionierung mit und ein Bündel von Margen und Polsterungen wie in diesem Snippet

.at-timeline { 
 
    position: relative; 
 
    width: 70%; 
 
} 
 

 
.at-timeline:after { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 2px; 
 
    height: 900px; 
 
    top: 0; 
 
    left: 50%; 
 
    background: #2783e8; 
 
} 
 
.timeline--single { 
 
    position: relative; 
 
    margin: 50px 0; 
 
} 
 
.timeline--single:nth-child(odd) .timeline--details { 
 
    margin-right: 50%; 
 
    text-align: right; 
 
    padding-right: 50px; 
 
} 
 

 
.timeline--single:nth-child(odd) .time--date{ 
 
    position: absolute; 
 
    left: 50%; 
 
    top: 0px; 
 
    margin-left: 20px; 
 
} 
 
.timeline--single:nth-child(even) .time--date{ 
 
    position: absolute; 
 
    right: 50%; 
 
    top: 0px; 
 
    margin-right: 20px; 
 
} 
 

 
.timeline--single:nth-child(even) .timeline--details { 
 
    margin-left: 50%; 
 
    text-align: left; 
 
    padding-left: 50px; 
 
} 
 

 
.at-timeline .timeline--details:before { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 35px; 
 
    height: 2px; 
 
    top: 10px; 
 
    background: #2783e8; 
 
} 
 

 
.timeline--single:nth-child(odd) .timeline--details:before { 
 
    right: 50%; 
 
} 
 
.timeline--single:nth-child(even) .timeline--details:before { 
 
    left: 50%; 
 
} 
 

 
.timeline--title { 
 
    margin-top: 5px; 
 
}
<div class="timeline at-timeline" style="padding: 100px;"> 
 
\t <div class="timeline--single"> 
 
\t \t <div class="timeline--details text-right"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t \t <span class="time--date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t </div> 
 
\t <div class="timeline--single"> 
 
\t \t <span class="time--date text-right"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t \t <div class="timeline--details reverse"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t </div> 
 
\t <div class="timeline--single"> 
 
\t \t <div class="timeline--details text-right"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t \t <span class="time--date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t </div> 
 
</div>

+0

So viele absolute Positionen machen Renderelemente langsam. –

+0

ein paar Mikrosekunden sind vernachlässigbar – JoshKisb

+0

Ich muss den Artikel finden, aber ein einfaches Layout wie dieses (Absolutes) vs Flexbox ist eigentlich eher wie eine halbe Sekunde. Die Probleme treten auf, wenn absolut innerhalb der absoluten Werte bewirkt wird, dass alle Rendering-Engines n + 1 über das dom laufen, um korrekt zu rendern. Hängt von der Anzahl der Elemente ab. Sicher, Ihr Beispiel könnte nur 400ms langsamer sein, aber wo sonst sind absolute Werte auf der gleichen Seite. Es kann ziemlich schnell summieren. Am besten, es zu vermeiden, besonders wenn es bessere Technologien gibt. –

2

ich alle Ihre HTML ohne Änderungen gehalten haben, entfernte ich nur die Inline-Stil und änderte es für Marge das Layout zu erleichtern.

Auf der anderen Seite habe ich versucht, keine absoluten Einheiten zu verwenden, außer wenn ich versuche, mich an andere bereits eingestellte Einheiten anzupassen.

Der h4-Rand entspricht dem Chrome-Standard-Stylesheet. Ich habe es nur explizit machen es mehr tragbar für andere Browser

.at-timeline .timeline--details { 
 
    position: relative; 
 
} 
 
.at-timeline .timeline--single { 
 
    display: flex; 
 
    flex-direction: row; 
 
} 
 
.at-timeline .timeline--details, 
 
.at-timeline .time--date { 
 
    flex-basis: 50%; 
 
    padding: 15px 50px; 
 
    position: relative; 
 
} 
 
.at-timeline h4 { 
 
    margin-top: 1.33em; 
 
} 
 
.text-right { 
 
    text-align: right; 
 
} 
 
.at-timeline .timeline--details:before { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 35px; 
 
    height: 2px; 
 
    top: calc(15px + 1.83em); /* padding details +`margin top h4 + 0.5em */ 
 
    right: 0; 
 
    background: #2783e8; 
 
} 
 
.at-timeline .reverse:before { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 35px; 
 
    height: 2px; 
 
    top: calc(15px + 1.83em); 
 
    left: 0; 
 
    background: #2783e8; 
 
} 
 

 
.at-timeline { 
 
    position: relative; 
 
    margin: 100px 100px; 
 
} 
 
.at-timeline:after { 
 
    content: ""; 
 
    position: absolute; 
 
    width: 2px; 
 
    left: 0px; 
 
    right: 0px; 
 
    margin: auto; 
 
    top: 0px; 
 
    bottom: 0px; 
 
    background: #2783e8; 
 
}
<div class="timeline at-timeline"> 
 
\t <div class="timeline--single"> 
 
\t \t <div class="timeline--details text-right"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t \t <span class="time--date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t </div> 
 
\t <div class="timeline--single"> 
 
\t \t <span class="time--date text-right"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t \t <div class="timeline--details reverse"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t </div> 
 
\t <div class="timeline--single"> 
 
\t \t <div class="timeline--details text-right"> 
 
\t \t \t <h4 class="timeline--title">Title</h4> 
 
\t \t \t <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum non dolor ultricies, porttitor justo non, pretium mi.</p> 
 
\t \t </div> 
 
\t \t <span class="time--date"> 
 
\t \t \t <span class="date">01</span> 
 
\t \t \t <span class="month">January</span> 
 
\t \t \t <span class="year">2017</span> 
 
\t \t </span> 
 
\t </div> 
 
</div>