2014-11-21 100 views
1

我正試圖通過改變寬度,填充和邊框來有效'摺疊'div和其包含的浮動元素。在寬度,填充和邊框上平滑CSS'摺疊'過渡

我已經做了一些調查,你可以在這裏看到: http://jsfiddle.net/p38b6ndb/1

要包括樣本:

HTML:

<div> 
    <div class="section"> 
     <div class="sub-section">label</div> 
     <div class="sub-section">field</div> 
    </div> 
    <div class="section collapsible"> 
     <div class="sub-section">label</div> 
     <div class="sub-section">field</div> 
    </div> 
    <div class="section"> 
     <div class="sub-section">label</div> 
     <div class="sub-section">field</div> 
    </div>  
</div> 

CSS:

.section { 
    float: left; 
    width: 25%; 
} 

.section.collapsible { 
    opacity: 1; 
    transition: opacity linear 1s, width linear 1s; 
} 

.section.collapsible.collapsed { 
    width: 0; 
    opacity: 0; 
} 

.sub-section { 
    width: 50%; 
    float: left; 
    height: 42px; 
} 

的場景:第二節應該崩潰,第三節跟着第一節左移。

問題:如果我有正被摺疊,當所述寬度達到崩潰一定量的div環繞,導致高度增加,推後續元素向下對DIV padding和/或border

  • 我試過box-sizing: border-box,但是這個效果也很清晰,換行效果也不錯。
  • 我試圖過渡paddingborder-width以及 width,但它仍然包裝。我可以嘗試不同的 持續時間,但它仍然有一個奇怪的效果。
  • 我試圖忽略填充和邊框,因爲它們不透明,只是 添加一個margin-left,但這並不影響高度和「向下推」。
  • 我可以修復高度,但我實際上希望高度爲自動,因爲每個 部分可以包含各種大小的內容。

如何在帶有填充/邊界元素的div上實現這種摺疊過渡?

如果可以通過更新真正受歡迎的小提琴演示答案。

+1

爲什麼不將字體大小轉換爲0呢? - http://jsfiddle.net/p38b6ndb/2/ – 2014-11-21 16:24:32

+0

好主意,這個作品並不會導致內容被向下推。 – 2014-11-24 09:47:30

回答

0

到目前爲止,最好的解決方案我找到的是將填充和邊框寬度轉換爲0,但僅限於左側和右側,而不是頂部和底部。那樣的話,崩潰看起來只是在寬度上,divs根本不會改變高度。

.section.collapsible { 
    opacity: 1; 
    transition: opacity linear 1s, width linear 1s; 
} 

.section.collapsible.collapsed { 
    width: 0; 
    opacity: 0; 
} 

.section.collapsible .sub-section {  
    padding: 10px; 
    border-width: 2px; 
    transition: padding linear 1s, border-width linear 1s; 
} 

.section.collapsible.collapsed .sub-section {  
    padding: 10px 0; 
    border-width: 2px 0; 
} 

演示:http://jsfiddle.net/p38b6ndb/6/

這也意味着我仍然可以使用box-sizing: border-box爲好。

1

嘗試設置「填充:0」到每個.collapsed>子部分邊界盒,當然設置一個過渡

demo

.section.collapsible .sub-section-border-box {  
    padding: 10px; 
    border-width: 2px; 
    transition: all linear 1s; 
} 

.section.collapsible.collapsed .sub-section-border-box{  
    padding: 0; 
    border-width: 0; 
} 
+0

因此,根據演示中的3個示例,這是'sub-section-border-box'版本與'sub-section-padding'版本的向padding:0和border-width:0的轉換的組合。這絕對會更好,因爲它不會壓低下面的內容,但是像這樣高度縮小的內容意味着它甚至可能不如直接轉換的「分段邊框」版本更合意。 – 2014-11-24 09:46:38