2017-02-14 2 views
1

Я дал высоту 0px элементу, как показано нижеКак рассчитать высоту в пикселе в соответствии с содержимым, если оно установлено как 0px в css?

#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> 

Если бы я не указано высоту так, он будет принимать высоту контента (скажем 50px). Теперь изначально я не знаю высоту #sample. Я хочу установить его высоту в исходную расчетную высоту (т. Е. 50 пикселей), я могу сделать это, указав высоту 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

ответ

0

Я думаю, что вы хотите

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

P.S. Следует отметить, что offsetHeight включает в себя вертикальные отступы и границы. И округляется до целого числа.
Дополнительная информация: https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement/offsetHeight

+0

Я пишу это, чтобы проверить вычисленную высоту. 'var ht = document.getElementById (" sample "). OffsetHeight; alert (ht); ' Но он показывает 0. – Siraj

+1

Но если элемент начинается с' height' '0', то' offsetHeight' вернет '0'. –

+0

@ScottMarcus - это правильно. Это не сработает. – Siraj

0

Вы можете использовать JS для получения высоты и высоты тега html.

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

Тогда вы можете сделать:

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

Но если элемент начинается с 'height'' 0', то 'offsetHeight' вернет' 0'. –

1

Если Вы желаете, чтобы оживить высоту, что вы хотите сделать, это начать с установки max-height: 0, а затем перейти на максимальную высоту-путем изменения класс и добавление перехода или установки анимации, так что max-height: 500px или некоторое значение, которое определенно больше, чем содержимое внутри.

EDIT: Это не может быть именно то, что вы делаете, но здесь это достойный пример: https://davidwalsh.name/css-slide

+0

Это оставляет ОП с той же проблемой, что и сейчас. Он спрашивает, как определить, какое значение пикселя должно быть для элемента, когда оно находится в полном размере. –

+0

Дело в том, что когда вы устанавливаете 'max-height: 0' вместо' height: 0', а затем меняете 'max-height' на что-либо большее, чем вам нужно, содержимое будет автоматически заполняться до требуемой высоты брать. Вам не нужно вычислять высоту с помощью JS, делая это таким образом. – thesublimeobject

+0

Правда, но если содержимое изменяется со временем, ваше значение 'max-height' может стать неадекватным. Это работает, но это взломать. Правильный подход - получить фактическую высоту содержимого с помощью 'scrollHeight'. –

1

высота в процентах будет работать только тогда, когда родительский элемент был установлен его высота (вы не можете иметь процент от чего-то, что не имел свой набор высоты).

Однако, вы можете установить height обратно к исходному значению, используя scrollHeight.

// 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

Nice. Вы также можете использовать 'scaleY()', чтобы просто работать с высотой, которая ближе к тому, что делает идентификатор OP. –

+0

Я знаю, однако вы предполагаете, что ему нужно масштабировать только на оси Y. Я даю общий пример ... поскольку я понимаю, что требуется показать минимальный соответствующий код. Но спасибо за комментарий! – Gacci

+0

Это не предположение. OP преобразует свойство height. –

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

Смежные вопросы