2017-02-14 51 views
1

我給的0px高度的要素如下圖所示如何在css中設置爲0px時根據內容計算像素高度?

#sample{ 
    height: 0px; 
    overflow: hidden; 
    transition-duration: 1.2s; 
} 

<div id="sample"> 
    <h1>Hello World main headinh</h1> 
    <h2>Hello World sub heading</h2> 
    <p>Hello world paragraph</p> 
</div> 

如果我不指定高度,它會採取的含量高(比如50像素)。現在最初我不知道#sample的高度。我想將其高度設置爲原來的計算高度(即50px),我可以通過給高度100%來實現。

document.getElementById("sample").style.height = "100%"; 

transition-duration屬性沒有在這種情況下工作,所以當我改變到百分之像素所以transition-duration財產運作良好。

document.getElementById("sample").style.height = "50px"; 

但這裏的問題是div裏面的內容是dyanamic,所以它的高度是不斷變化的。

那麼我怎樣才能給像素所需的#sample像素的高度。 解決方案應該只有Javascript沒有任何其他框架,如JQuery

+0

再你想動畫的寬度和高度? – Gacci

+0

是的,我想動畫@Gacci的高度。 – Siraj

+0

可能是一個愚蠢的http://stackoverflow.com/questions/3508605/how-can-i-transition-height-0-to-height-auto-using-css – epascarello

回答

1

嘗試。當父元素有其高度設置(你不能擁有的東西,一直沒有高度集中的百分比)

var element = document.getElementById('sample'); 
element.style.height= element.scrollHeight+"px" 

https://jsfiddle.net/y0g22540/

+0

是啊完成了! – Siraj

0

我想你想要的是

var s = document.getElementById('sample'); 
s.style.height = s.offsetHeight + 'px'; 

附:應該注意offsetHeight包括垂直填充和邊框。並四捨五入爲整數。
更多的信息在:https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight

+0

我寫這個來檢查計算出來的高度。 'var ht = document.getElementById(「sample」)。offsetHeight; alert(ht);' 但它顯示爲0. – Siraj

+1

但是,如果元素的起始高度爲'0',那麼'offsetHeight'將返回'0'。 –

+0

@ScottMarcus是對的。它不會工作。 – Siraj

0

你可以使用JS來獲取html標籤的高度和高度。

var example = document.getElementById("yourTag").offsetHeight; 

然後,你可以這樣做:

document.getElementById("sample").style.height = example; 
+1

但是,如果元素以'0'的高度開始,那麼'offsetHeight'將返回'0'。 –

1

如果你想動畫的高度,你想要做的是通過設置max-height: 0開始出來,然後通過改變過渡的最大高度一個班級,並添加一個過渡或設置動畫,這樣max-height: 500px或某些值肯定比裏面的內容更大。

編輯:這可能不是正是你在做什麼,但這裏是一個不錯的例子:https://davidwalsh.name/css-slide

+0

這使得OP具有與他現在完全相同的問題。他問的是如何確定元素在全尺寸時適合的像素值。 –

+0

問題是,當您設置'max-height:0'而不是'height:0',然後將'max-height'更改爲比您需要的更大的值時,內容會自動填充到需要的高度採取。您不需要以這種方式使用JS來計算高度。 – thesublimeobject

+0

的確如此,但如果內容隨着時間而改變,那麼您的「最大高度」值可能會變得不足。它的工作原理,但它是一個黑客。正確的方法是用'scrollHeight'獲取內容的實際高度。 –

1

百分比高度纔有效。

但是,您可以使用scrollHeightheight設置回其原始值。

// Get references to the elements: 
 
var btn = document.getElementById("show"); 
 
var sample = document.getElementById("sample"); 
 

 
// Set up an event handler to trigger the code: 
 
btn.addEventListener("click", function(){ 
 
    // Set the height to the height of the element's content: 
 
    sample.style.height = sample.scrollHeight + "px"; 
 
    
 
    // Just for testing purposes: 
 
    console.log(sample.style.height); 
 
});
#sample{ 
 
    height: 0px; 
 
    overflow: hidden; 
 
    transition-duration: 1.2s; 
 
}
<button id="show">Show</button> 
 
<div id="sample"> 
 
    <h1>Hello World main headinh</h1> 
 
    <h2>Hello World sub heading</h2> 
 
    <p>Hello world paragraph</p> 
 
</div>

+0

是的,我知道了。 感謝您的幫助:) – Siraj

1

如果你只是想顯示和隱藏收縮或擴張的寬度和高度,然後在這裏它是和例子都將指向你在那個方向!

#click:checked ~ #sample{ 
 
    -webkit-transform: scale(1); 
 
    -moz-transform: scale(1); 
 
      transform: scale(1); 
 
} 
 
#sample{ 
 
    overflow: hidden; 
 
    -webkit-transition: transform 0.125s; 
 
     -moz-transition: transform 0.125s; 
 
      transition: transform 0.125s; 
 
    
 
    -webkit-transform: scale(0); 
 
    -moz-transform: scale(0); 
 
      transform: scale(0); 
 
}
<input type="checkbox" id="click"/> 
 
<label for="click"> Click me </label> 
 

 
<div id="sample"> 
 
    <h1>Hello World main headinh</h1> 
 
    <h2>Hello World sub heading</h2> 
 
    <p>Hello world paragraph</p> 
 
</div>

+0

不錯。你也可以使用'scaleY()'來處理高度,這更接近OP id的功能。 –

+0

我知道,但是你假設他只需要在Y軸上縮放。我給出了一個通用的例子......據我所知,它需要顯示最小的相關代碼。但感謝評論! – Gacci

+0

這不是一個假設。 OP正在改變高度屬性。 –

1

你可以使用DIV中的包裝,並讀取其高度。

document.getElementById('toggle').onclick = function() { 
 

 
    const sample = document.getElementById("sample"); 
 
    const wrapper = sample.getElementsByClassName('wrapper'); 
 

 
    if (parseInt(sample.style.height) > 0) { 
 
    sample.style.height = 0; 
 

 
    } else { 
 

 
    const style = window.getComputedStyle(wrapper[0], null); 
 
    const height = style.getPropertyValue("height"); 
 

 

 
    sample.style.height = height; 
 

 

 
    } 
 

 

 

 
};
#sample { 
 
    height: 0px; 
 
    overflow: hidden; 
 
    transition-duration: 1.2s; 
 
}
<div id="sample"> 
 
    <div class="wrapper"> 
 
    <h1>Hello World main headinh</h1> 
 
    <h2>Hello World sub heading</h2> 
 
    <p>Hello world paragraph</p> 
 
    </div> 
 
</div> 
 

 
<button id="toggle">Toggle</button>

+0

是的,沒有JQuery也很容易做到,讓我更新我的代碼片段。 – dschu

+0

更新:刪除了jQuery – dschu

相關問題