v2.5.2
Giriş yap

Javascript ile html etiketinin yüksekliğini otomatik yapmak

memdhaci
398 defa görüntülendi

Merhaba, yüksekliği içindeki metinin uzunluğuna göre değişen bir div container ım var. Bu containera tıklayınca yüksekliği 10vh a düşüyor. Containera yüksekliği 10vh dayken tıklayınca tekrar içindeki metinin uzunluğuna göre otomatik yükselmesini istiyorum fakat bunu javascript ile yapamiyorum.
Yüksekliği javascript ile otomatik arttıramiyorum tam bir değer girmem gerekiyor bunu yapmanin başka bir yolu var mi?

Eğer anlamadiysaniz codepen ile örnek bir tasarim yapabilirim

ebykdrms
855 gün önce

Merhaba. Evet, biraz sıkıntılı bir iş otomatik yükseklik vermek. Yani ufak bir takla atmak gerekiyor.
Şöyle bir kurgu önerebilirim:

  • Metin sayfaya yüklendiğinde container metin yüksekliğindedir. O anda yüksekliği js yardımıyla alıp container'a attribute olarak kaydedin.
  • Container'a basıldığında yüksekliği 10vh, tekrar basıldığında da attribute değerini alsın.
  • Bu işlemleri yapan bir fonksiyon oluşturalım ki başka elementlerde veya projelerde de kullanabilelim...
<div class="container">
  Lorem ipsum dolor sit amet consectetur adipisicing elit. Repudiandae amet, nostrum eligendi aliquid deleniti, et nisi ipsa nesciunt illum quidem maiores temporibus. Laboriosam recusandae quasi enim error non sequi quam.<br>
  Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laudantium nihil facilis consectetur vitae temporibus quis quibusdam iure qui tempore mollitia, cum voluptas reiciendis minus rem similique architecto dolores totam laborum!<br>
  Lorem ipsum dolor sit, amet consectetur adipisicing elit. Fugit ducimus cum repellat eum. Dolorem nobis, molestiae, natus cumque velit temporibus laudantium aliquam facere cum animi nesciunt sed soluta iusto. Nam.
</div>
.container {
  width:300px;
  overflow-y:hidden;
  border:1px solid #ccc;
  padding:10px;
  transition:height .5s ease 0s;
}

CSS kısmında dikkat: Elemente height değerini burada vermemeniz gerekiyor.
Çünkü javascript, elementin açıkkenki durumda yüksekliğini görebilmeli.
Elemente yükseklik değerini javascript'le vermeniz gerekiyor. Aşağıda örneği var.

function example(selector, closedHeight, openedHeight="auto", startStatus=false) {
  
  // Elementi seçip değişkene alalım.
  const $this = $(selector);
  
  // Elementin açık ve kapalı hallerinin alacağı yükseklikleri attribute olarak kaydedelim.
  $this.attr('data-orj-height', openedHeight=="auto" ? $this.outerHeight() : openedHeight);
  $this.attr('data-closed-height', closedHeight);
    
  // Container'a tıklandığında açıksa kapalı kapalıysa açık yapacak olay dinleyici:
  $this.on("click",function(){
  
    // Elementte data-opened="false" diye bir attibute varsa element kapalı haldedir. Açılsın...
    if($this.attr('data-opened')=="false") {
      $this.attr('data-opened',"true");
      $this.height($this.attr('data-orj-height'));
    }
    // Elementte data-opened="true" diye bir attibute varsa element açık haldedir. Kapatılsın...
    else {
      $this.attr('data-opened',"false");
      $this.height($this.attr('data-closed-height'));
    }
  });
  
  // Başlangıç durumu olarak kapalı olacaksa elementi kapalı hale getirelim.
  if(!startStatus) {
    $this.height(closedHeight);
    $this.attr('data-opened',"false");
  }
}

// Parametreler: 
// 1) Seçici, 
// 2) Element açık olduğunda alacağı yükseklik,
// 3) Element kapalı olduğunda alacağı yükseklik (Varsayılan:"auto")
// 4) Element başlangıçta açık olacaksa true, kapalı olacaksa false. (Varsayılan:false)
example(".container", "auto", "10vh", false);

Bu örneğin çalışan halini codepen'de oluşturdum:
https://codepen.io/ebykdrms/pen/yLKZvqX

Tabi burada container'a tıklanınca açık/kapalı toggle yapıyor ama siz bunu yapmasını istemiyor olabilirsiniz. Yani container'a değil de container'ın içindeki bir butona basınca açılıp kapanmasını istiyor da olabilirsiniz.
O zaman sadece $this.on("click",function() { yazan satırı düzenlemeniz yeterli olur.
Örn: $this.find(".close-button").on("click", function(){ gibi...