2016-10-09 90 views
3

我有一系列行,每行包含兩列,寬度爲50/50。在交替行上交換列(左/右)

我想每隔一行將左側列(.image)交換到右側,但我需要維護HTML中的序列,因爲它在較小的屏幕上顯示爲一列。

CSS:

ul { 
    list-style: none; 
    padding-left: 0; 
} 

.row { 
    text-align: center; 
} 

@media (min-width: 768px) { 

    .image, 
    .text { 
     display: inline-block; 
     width: 50%; 
     vertical-align: middle; 
    } 

    /* alternate */ 
    .row:nth-child(odd) .image { 
    float: right; 
    } 

    /* clearfix */ 
    .row:before, 
    .row:after { 
     content: " "; 
     display: table; 
    } 

    .row:after { 
     clear: both; 
    } 

} 

HTML:

<ul> 
    <li class="row"> 
    <div class="image"> 
     <img src="http://placehold.it/350x150"> 
    </div><div class="text"> 
     <p>Lorem ipsum</p> 
    </div> 
    </li> 
    <li class="row"> 
    <div class="image"> 
     <img src="http://placehold.it/350x150"> 
    </div><div class="text"> 
     <p>Lorem ipsum</p> 
    </div> 
    </li> 
    <li class="row"> 
    <div class="image"> 
     <img src="http://placehold.it/350x150"> 
    </div><div class="text"> 
     <p>Lorem ipsum</p> 
    </div> 
    </li> 
</ul> 

我知道我可以Flexbox的,我不能在這個項目中使用做到這一點。並且使用float: left不允許我垂直對齊元素。我還有什麼其他選擇?

注意:我對這些列使用display: inline-block,因爲它們的高度不同,我希望它們彼此垂直對齊。

編輯:我已經made a CodePen與使用浮動如上所示的示例。

+0

請顯示完整的代碼(包括CSS) – vals

+0

我已經更新它與CSS和CodePen,謝謝。 – Benji

回答

3

你可以使用display:table(optionnal):nth-child(even)direction交換DIV位置: codepen

ul { 
 
    margin: 0; 
 
    padding: 0; 
 
    width: 100%; 
 
} 
 
.row { 
 
    width: 100%; 
 
    display: table; 
 
    table-layout: fixed; 
 
} 
 
.row:nth-child(even) { 
 
    direction: rtl; 
 
} 
 
.row:nth-child(odd) .image { 
 
    text-align: right 
 
} 
 
.image, 
 
.text { 
 
    display: table-cell; 
 
    direction: ltr; 
 
    border: solid; 
 
} 
 
.text { 
 
    background: tomato; 
 
} 
 
img {vertical-align:top;} 
 
@media screen and (max-width: 640px) { 
 
    .row, 
 
    .image, 
 
    .text { 
 
    display: block; 
 
    direction:ltr 
 
    } 
 
    .row:nth-child(odd) .text { 
 
    text-align: right 
 
} 
 
}
<ul> 
 
    <li class="row"> 
 
    <div class="image"> 
 
     <img src="http://placehold.it/350x150"> 
 
    </div> 
 
    <div class="text"> 
 
     <p>Lorem ipsum</p> 
 
    </div> 
 
    </li> 
 

 
    <li class="row"> 
 
    <div class="image"> 
 
     <img src="http://placehold.it/350x150"> 
 
    </div> 
 
    <div class="text"> 
 
     <p>Lorem ipsum</p> 
 
    </div> 
 
    </li> 
 
    <li class="row"> 
 
    <div class="image"> 
 
     <img src="http://placehold.it/350x150"> 
 
    </div> 
 
    <div class="text"> 
 
     <p>Lorem ipsum</p> 
 
    </div> 
 
    </li> 
 
</ul>

+0

這完美的作品。如果將'vertical-align:middle'添加到'.image,.text',它也會垂直居中,這是我無法使用最簡單的修復方法所做的:'float:right' - 感謝聰明人解! – Benji

1

試試這個:

/* CSS */ 
 

 
.row .image { 
 
    display: table-cell 
 
} 
 
.row .text { 
 
    display: table-cell; 
 
    vertical-align: top; 
 
} 
 
.row:nth-child(even) .image { 
 
    float: right; 
 
} 
 
.row { 
 
    clear: both; 
 
}

這裏是一個工作plunker

+0

似乎很好的答案。但OOP說,不能使用float lef(我不明白爲什麼),並且你正在使用float float ... – vals

+0

使用浮點數不允許我垂直地允許列,即與'vertical-align:middle'等。您可以使用CSS和CodePen在我的更新後的帖子中看到問題。我剛剛接受的答案是針對這個問題的。 – Benji

1

我真的不明白你的意思了 「垂直對齊彼此」。如何完全一致?

但也許你想要使用vertical-align: middle垂直對齊它們,然後,是的,float: left不是你的朋友。

你說你的專欄的寬度是50/50。然後,您可以使用position: relativeleft: 50%;right: 50%;規則。

像這樣:

.row { 
    display: block; 
    position: relative; 
} 

.row > .image { 
    display: inline-block; 
    position: relative; 
    width: 50%; 
    background-color: #eef; 
    vertical-align: middle; 
} 
.row > .text { 
    display: inline-block; 
    position: relative; 
    width: 50%; 
    background-color: #fee; 
    vertical-align: middle; 
} 

.row:nth-child(even) > .image { 
    left: 50%; 
} 
.row:nth-child(even) > .text { 
    right: 50%; 
} 

的背景顏色只是爲了演示。

這樣每個偶數行都會交換列,您仍然可以使用vertical-align規則。請參閱plunker

+0

我應該說「對齊中間」暗示「垂直對齊:中間」,這是我正在尋找。我已經使用CSS和CodePen更新了原始文章。 – Benji

+0

@Benji,那時我就能猜出你想要什麼。 :)你試過我的CSS還是笨蛋?它可以按照你的想法工作。 '位置:相對'與左/右50%偏移量的伎倆。但@ GCyrillus使用'direction'的解決方案我甚至更喜歡它,因爲它甚至可以應用於可變寬度的元素。 – djxak

+0

是的,我做了,謝謝!它確實做我需要的,因爲我知道寬度。但我發現@ GCyrillus的解決方案如此聰明,我無論如何去了:) – Benji