Home > Blockchain >  How to adjust max-height for div based on content?
How to adjust max-height for div based on content?

Time:10-24

I have a block with text that has

and . I need 3 dots to be added to the text on phones and when the button is clicked, the full text drops out. Now I have implemented this functionality, but the problem is that I set max-height statically. How can I dynamically measure the height of the block and set the max-height so that only one list item is visible? Tried the option with line-clamp but it doesn't work with on IOS devices. And if it is statically prescribed, then it is not adaptive. The block should look like this:enter image description here

enter image description here

const showTextButton = document.querySelectorAll(".read-more");
const textContainer = document.querySelectorAll(".colonnes-texte");
const texte = document.querySelectorAll(".texte");

textContainer.forEach(item => {
  item.classList.add("hide-text");
  texte.forEach(item => {
    item.classList.add("ellipsis-text");
    console.log(item.clientHeight);
  });
});
.colonnes-texte.hide-text {
  overflow: hidden;
}

.colonnes-texte.hide-text .texte {
  max-height: 100px;
}

.colonnes-texte .texte.ellipsis-text ul li {
  list-style-position: inside;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
<div >
  <div >
    <p>Spécialiste du polycarbonate depuis plus de vingt ans, JPemball commercialise deux types de produits :</p>
    <ul>
      <li>Des cabines insonorisées, qui peuvent s’adapter à différents usages : cabines de traduction, studio d’enregistrement, cabinets d’audioprothésistes, cabines de bureau adaptées aux open-space. Des institutions prestigieuses comme le Parlement Européen
        nous font confiance pour les équiper.</li>
      <li>Des flight case ultra légers, qui permettent de transporter en toute sécurité les matériaux les plus fragiles. Nous fabriquons nos caisses de transport sur-mesure à la demande de nos clients.</li>
      <li>Nous proposons également des caisses de transport traditionnelles en bois.</li>
    </ul>
    <p>Vous souhaitez en savoir plus ?</p>
  </div>
</div>
<button  type="button">Lire la suite</button>

CodePudding user response:

Here's a possible logic: use media queries to set initial styling on mobile screens, then toggle active class with JS. There may be a sense not to use such complex selectors as in the example to have a better control on their specificity.

const showTextButton = document.querySelector(".read-more");
const texteListItems = document.querySelectorAll(".texte li");
const textePItems = document.querySelectorAll(".texte p:last-child");


const handleClick = () => {
  [...texteListItems, ...textePItems].forEach(item => item.classList.toggle('active'));
  return false;
};

showTextButton.addEventListener('click', handleClick);
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

ul {
  margin: .7rem;
  list-style-type: none;
}

.texte {
  padding: 1rem;
  display: flex;
  flex-direction: column;
}

.texte li {
  position: relative;
  padding-left: 15px;
}

.texte li::before {
  content: "●";
  position: absolute;
  left: 0;
  top: 0;
}

.read-more {
  display: none;
}


@media screen and (max-width: 768px) {
  .texte li,
  .texte p:last-of-type {
    display: none;
  }
  
  .texte li:first-child {
    display: block;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
  }

  .texte li.active,
  .texte p:last-of-type.active {
    display: block;
  }

  .texte li:first-child.active {
    white-space: normal;
  }

  .read-more {
    display: block;
  }
}
  <div >
    <p>Spécialiste du polycarbonate depuis plus de vingt ans, JPemball commercialise deux types de produits :</p>
    <ul>
      <li>Des cabines insonorisées, qui peuvent s’adapter à différents usages : cabines de traduction, studio d’enregistrement, cabinets d’audioprothésistes, cabines de bureau adaptées aux open-space. Des institutions prestigieuses comme le Parlement Européen
        nous font confiance pour les équiper.</li>
      <li>Des flight case ultra légers, qui permettent de transporter en toute sécurité les matériaux les plus fragiles. Nous fabriquons nos caisses de transport sur-mesure à la demande de nos clients.</li>
      <li>Nous proposons également des caisses de transport traditionnelles en bois.</li>
    </ul>
    <p>Vous souhaitez en savoir plus ?</p>
  </div>
<button  type="button">Lire la suite</button>

  • Related