'Trust badges html css and script
I am trying to do custom badges on my store. I want to have 4 objects with info like "fast shipping". When clicking on one of them, a small descriptive text will show just underneath.
Now, my problem is that I can't find a way to set the <p>
to width 100% only when active, without putting it 100% all the time (which will make it all look bad when not pressed)
Can someone give me tips on how to do this? <3 I am out of ideas hahah
Here is my code, thanks!
var acc = document.getElementsByClassName("accordion-2");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + "px";
}
});
}
.accordion-2 {
background-color: rgb(255, 255, 255);
color: #444;
cursor: pointer;
padding: 18px;
width: 49%;
float: left;
border: none;
border-bottom: 1px solid rgba(0, 0, 0, 0.164);
text-align: left;
outline: none;
font-size: 15px;
font-style: italic;
transition: 0.2s;
}
.active,
.accordion-2:hover {
background-color: rgb(212, 245, 255);
}
.accordion-2-guld:hover {
background-color: rgb(236, 185, 45);
}
.accordion-2:after {
content: '\002B';
color: #777;
font-weight: bold;
float: right;
margin-left: 5px;
}
.active:after {
content: "\2212";
}
.panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
.panel:after {
float: left;
}
<button class="accordion-2">Gratis frakt</button>
<div class="panel">
<p>Gratis | Postnord Hemleverans 3-5 dagar.<br><br>49kr | Skickas samma dag eller dagen efter. 1-2 arbetsdagar.<br><br>57kr | Utlämningsställe</p>
</div>
<button class="accordion-2">Enkel retur</button>
<div class="panel">
<p>Byta storlek eller färg? Inga problem! <br><br> Du står för frakten till oss och vi skickar gratis tillbaka nya produkter!</p>
</div>
<button class="accordion-2">Fin paketbox</button>
<div class="panel">
<p>Varje smycke kommer fint paketerad i våra fina askar och läderpåsar. De kommer i vit eller svart och olika storlekar. Vi ser till att paketet passar just din beställning 💎 Har du ett speciellt önskemål är det bara att lägga en liten kommentar vi utcheckning,
så löser vi det!</p>
</div>
<button class="accordion-2">Betala efter 30 dagar med Klarna</button>
<div class="panel">
<p>Vi erbjuder Klarna betalning, Swish & Kortbetlaning.</p>
</div>
Solution 1:[1]
2 columns and description is under the button inside each column.
Use CSS grid.
Wrap your button
and .panel
into a .column
. Use CSS grid to display 2 columns at 40%
each.
Remove float: left
from your button
and set width: 100%
to your button.
var acc = document.getElementsByClassName("accordion-2");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + "px";
}
});
}
.accordion-columns::after {
clear: both;
content: '';
}
.accordion-columns {
align-items: stretch;
display: grid;
grid-template-columns: repeat(2, 49%);
justify-items: stretch;
}
.accordion-2 {
background-color: rgb(255, 255, 255);
color: #444;
cursor: pointer;
padding: 18px;
border: none;
border-bottom: 1px solid rgba(0, 0, 0, 0.164);
text-align: left;
outline: none;
font-size: 15px;
font-style: italic;
transition: 0.2s;
width: 100%;
}
.active,
.accordion-2:hover {
background-color: rgb(212, 245, 255);
}
.accordion-2-guld:hover {
background-color: rgb(236, 185, 45);
}
.accordion-2:after {
content: '\002B';
color: #777;
font-weight: bold;
float: right;
margin-left: 5px;
}
.active:after {
content: "\2212";
}
.panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
.panel:after {
float: left;
}
<div class="accordion-columns">
<div class="column">
<button class="accordion-2">Gratis frakt</button>
<div class="panel">
<p>Gratis | Postnord Hemleverans 3-5 dagar.<br><br>49kr | Skickas samma dag eller dagen efter. 1-2 arbetsdagar.<br><br>57kr | Utlämningsställe</p>
</div>
</div>
<div class="column">
<button class="accordion-2">Enkel retur</button>
<div class="panel">
<p>Byta storlek eller färg? Inga problem! <br><br> Du står för frakten till oss och vi skickar gratis tillbaka nya produkter!</p>
</div>
</div>
<div class="column">
<button class="accordion-2">Fin paketbox</button>
<div class="panel">
<p>Varje smycke kommer fint paketerad i våra fina askar och läderpåsar. De kommer i vit eller svart och olika storlekar. Vi ser till att paketet passar just din beställning ? Har du ett speciellt önskemål är det bara att lägga en liten kommentar vi utcheckning,
så löser vi det!</p>
</div>
</div>
<div class="column">
<button class="accordion-2">Betala efter 30 dagar med Klarna</button>
<div class="panel">
<p>Vi erbjuder Klarna betalning, Swish & Kortbetlaning.</p>
</div>
</div>
</div>
Now you will have 2 columns with description under the button inside each column.
See it on jsfiddle.
To have 2 columns but when active, display .panel
in full width.
Use the same CSS grid as above but add .active
class to .column
in JS. Modify .accordion-columns .column.active
CSS to start and column 1 and end at the end.
Modify your CSS to display +
and -
correctly.
var acc = document.getElementsByClassName("accordion-2");
var i;
for (i = 0; i < acc.length; i++) {
acc[i].addEventListener("click", function() {
this.classList.toggle("active");
this.closest('.column').classList.toggle('active');
var panel = this.nextElementSibling;
if (panel.style.maxHeight) {
panel.style.maxHeight = null;
} else {
panel.style.maxHeight = panel.scrollHeight + "px";
}
});
}
.accordion-columns::after {
clear: both;
content: '';
}
.accordion-columns {
align-items: stretch;
display: grid;
grid-template-columns: [first] 49% [second] 49% [end];
justify-items: stretch;
}
.accordion-columns .column.active {
grid-column-start: 1;
grid-column-end: end;
}
.accordion-2 {
background-color: rgb(255, 255, 255);
color: #444;
cursor: pointer;
padding: 18px;
border: none;
border-bottom: 1px solid rgba(0, 0, 0, 0.164);
text-align: left;
outline: none;
font-size: 15px;
font-style: italic;
transition: 0.2s;
width: 100%;
}
.accordion-2:hover {
background-color: rgb(212, 245, 255);
}
.accordion-2-guld:hover {
background-color: rgb(236, 185, 45);
}
.accordion-2:after {
content: '\002B';
color: #777;
font-weight: bold;
float: right;
margin-left: 5px;
}
.accordion-2.active:after {
content: "\2212";
}
.panel {
padding: 0 18px;
background-color: white;
max-height: 0;
overflow: hidden;
transition: max-height 0.2s ease-out;
}
.panel:after {
float: left;
}
<div class="accordion-columns">
<div class="column">
<button class="accordion-2">Gratis frakt</button>
<div class="panel">
<p>Gratis | Postnord Hemleverans 3-5 dagar.<br><br>49kr | Skickas samma dag eller dagen efter. 1-2 arbetsdagar.<br><br>57kr | Utlämningsställe</p>
</div>
</div>
<div class="column">
<button class="accordion-2">Enkel retur</button>
<div class="panel">
<p>Byta storlek eller färg? Inga problem! <br><br> Du står för frakten till oss och vi skickar gratis tillbaka nya produkter!</p>
</div>
</div>
<div class="column">
<button class="accordion-2">Fin paketbox</button>
<div class="panel">
<p>Varje smycke kommer fint paketerad i våra fina askar och läderpåsar. De kommer i vit eller svart och olika storlekar. Vi ser till att paketet passar just din beställning ? Har du ett speciellt önskemål är det bara att lägga en liten kommentar vi utcheckning,
så löser vi det!</p>
</div>
</div>
<div class="column">
<button class="accordion-2">Betala efter 30 dagar med Klarna</button>
<div class="panel">
<p>Vi erbjuder Klarna betalning, Swish & Kortbetlaning.</p>
</div>
</div>
</div>
See it on jsfiddle.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
Solution | Source |
---|---|
Solution 1 | vee |