2014-10-09 154 views
2

我正在做一個簡單的向上/向下滑動轉換。CSS轉換 - 溢出和盒子陰影問題

設置很簡單 - 我有一個父form元素已應用overflow: hidden; max-height: 0; transition: 200ms, all;它和一個子fieldsetborder: 1px solid #ddd; margin: 0; padding: 10px; box-shadow: 0 1px 5px #aaa;。爲了實現向下滑動的效果,我將一個類應用於form的父級,後者又將其css更改爲max-height: 100px; overflow: visible;

這裏是它在行動小提琴:

http://jsfiddle.net/1Lqmrzgw/

我的問題是因爲我不必設置overflow: visible在打開狀態,你可以看到形式「衰落」,而不是僅僅滑動向下(點擊查看1查看)。如果我起飛overflow: visiblebox-shadow不可見。

我怎樣才能克服這個問題,並創建我的向上滑動/滑下過渡並保持box-shadow可見?

我的全HTML:

<div class="container"> 
    <ul> 
     <li> 
      <p>view 1</p> 
      <form> 
       <fieldset> 
        <label>a label</label> 
        <input type="text" /> 
        <br/> 
        <label>a label</label> 
        <input type="text" /> 
       </fieldset> 
      </form> 
     </li> 
     <li> 
      <p>view 2</p> 
      <form> 
       <fieldset> 
        <label>a label</label> 
        <input type="text" /> 
        <br/> 
        <label>a label</label> 
        <input type="text" /> 
       </fieldset> 
      </form> 
     </li> 
    </ul> 
</div> 

完整的CSS:

/* setup */ 
.container { margin: 15px; border: 1px solid #ccc; } 
ul { list-style: none; margin: 0; padding: 0; } 
li { border-bottom: 1px solid #ccc; } 
li:last-of-type { border-bottom: none; padding-bottom: 0; } 
fieldset { border: 1px solid #ddd; margin: 0; padding: 10px; } 
p { cursor: pointer; transition: 200ms, all; padding: 15px; margin: 0; } 
p:hover { background: #fff6e3; } 
.open p { background: #fff6e3; } 

/* show/hide */ 

form { overflow: hidden; max-height: 0; transition: 200ms, all; } 
.open form { max-height: 100px; overflow: visible; transition: 200ms, all; box-shadow: 0 1px 5px #aaa; } 

JS:

$('p').click(function(e){ 
    $(this).parent().toggleClass('open'); 
}); 
+0

嘿,這個問題已被標記被關閉。我要投票保持開放,但如果你能做一些工作來證明我花時間做這件事,這將是有益的。主要的問題是你的代碼在jsfiddle上,沒有嵌入到quesiton中(參見:[問]關於這個的細節)。 SO現在提供與jsfiddle相同的功能,所以你不需要再離開現場。讓你的代碼只在jsfiddle上的問題是,如果該網站消失,你的問題將變得不可讀。 – 2014-10-09 20:23:27

+0

我看到沒有'overflow:visible'的'box-shadow'。只有我嗎? http://jsfiddle.net/1Lqmrzgw/1/ – showdev 2014-10-09 20:34:15

+0

@EngineerDollery - 我會複製代碼。 – boz 2014-10-10 08:12:52

回答

0

添加

box-shadow: 0px 1px 5px #aaa; 

到:

.open form { max-height: 100px; transition: 200ms, all; overlay:visible;} 

這樣的:

.open form { max-height: 100px; transition: 200ms, all; overlay:visible; box-shadow: 0px 1px 5px #aaa; } 
+0

將陰影應用於'form'對我來說不是一種選擇,它必須留在'fieldset'上。 「形式」只是一個容器。 – boz 2014-10-09 10:12:45

+0

將字段集的邊距從0增加到5px – Flux 2014-10-09 10:22:38

+0

對不起,這也行不通。我已經稍微更新了我的jsfiddle,所以它與我的實際設計稍微更接近。 – boz 2014-10-09 10:32:48

0

我已成功地包含字段集內的表單字段並取得了影戲更好。我使用了一個特定的高度,所以它不會將表單的大小設置爲內容大小,但至少它是一個滑出的表單,因此您有一個起點。

把影子表單元素上,而是和使用的height代替max-height

form { height: 0; transition: 500ms, all; box-shadow: 0 1px 5px #aaa; } 
.open form { height: 100px; transition: 500ms, all; } 

overflow: hiddenfieldset,使之成爲形式的整個高度,並添加里面的fieldset另一個元素您可以與邊框和填充樣式:

fieldset { overflow: hidden; border: none; margin: 0; padding: 0; height: 100%; } 
fieldset > div { height: 80px; padding: 10px; border: 1px solid #ddd; } 

演示:http://jsfiddle.net/Guffa/k9nj3s43/5/

(我放慢了轉換,以便更好地看看到底發生了什麼。)

+0

謝謝你,但正如我對Flux所說的,陰影需要留在'fieldset'上。另外,我不知道我的表單會有多高,因此使用'max-height'。我通常會使用'height:auto',但不能用於css轉換。 – boz 2014-10-09 10:30:01

+0

@boz:你可以添加更多的容器來保持fieldset上的陰影,但動態高度是棘手的...... – Guffa 2014-10-09 11:08:18

+0

「最大高度」將它照顧到一定程度。如果其中一種形式很大,其他則不然,但當我來到這裏時我會穿過那座橋。我認爲我可以在父母的「形式」上對陰影進行排序。 – boz 2014-10-09 11:11:39