DIV Tabelle Spaltenanzahl reduzieren
KC
- css
3 Rolf B0 Der Martin- css
- meinung
0 Rolf B
0 KC- css
- javascript
0 KC0 Rolf B
Hallo Leute,
wenn man auf den Link klickt, öffnet sich ein Slickslider. Darin sind 3 Spalten, dort möchte ich allerdings nur eine Spalte in voller Breite anzeigen. Scheinbar ist die Spaltenanzahl und -breite im CSS verankert, konnte leider den Wert nicht finden. In den Slickslider Einstellungen ist desbezüglich kein Wert hinterlegt, in der slick.js steht: rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1
Kann man bitte jemand drüber schauen und mir ggf. einen Lösungsansatz geben? Danke vielmals
KC
Hallo KC,
RTFM (read that famous main.js)
Zeile 96ff: Da steht slidesToShow, je nach Viewportbreite 1, 2 oder 3.
Du musst übrigens deine längeren Worte mit Trennhilfen versehen (­), damit es das Layout nicht zerreißt. Derzeit ist es so, dass lange Worte die Spalteninhalte verbreitern und in die nächste Slick-Spalte überragen lassen.
Das kannst Du auf einem Desktop durch Verringern der Anzahl der slidesToShow in den Griff bekommen, auf einem schmalen Viewport (Smartphone) dagegen nicht.
Und nun kommt die Self-Pest - ich kann mich einfach nicht zurückhalten 😉. Nimm Teile davon mit oder schmeiß es weg - deine Entscheidung. Bis auf die Sache mit dem alt-Text und dem a Element, das ist eindeutig falsch.
Wer hat Dir diese klassenverpestete div-Suppe eingegeben? Es ist gruselig!
<div class="col-md-4">
<div class="single-product-items">
<div class="product-item-image">
<a href="#"><img src="assets/images/product/p-1.jpg" alt="Product"></a>
</div>
<div class="product-item-content text-center mt-30">
<p><font color="#841811"><u><strong>Waldseebau Gaggenau</strong></u></font></p>
<div class="divTable">
<div class="divTableBody">
<div class="divTableRow">
<div class="divTableCell1">Bauherr:</div>
<div class="divTableCell2">Stadt Gaggenau</div>
</div>
<div class="divTableRow">
<div class="divTableCell1">Bauzeit:</div>
<div class="divTableCell2">Februar 2021 – Mai 2022</div>
</div>
<div class="divTableRow">
<div class="divTableCell1">Leistungen:</div>
<div class="divTableCell2">KG 440 etc etc etc.</div>
</div>
<div class="divTableRow">
<div class="divTableCell">Auftragswert:</div>
<div class="divTableCell">ca. 400.000,00€</div>
</div>
</div>
</div>
</div>
</div> <!-- single product items -->
</div>
Es geht sicherlich besser, übersichtlicher und vor allem: HTML5-iger. Ich habe deinen vollständigen Quellcode nicht und kann es darum nicht ausprobieren - aber ich würde folgendes vorschlagen wollen:
text-center
ist eine Bootstrap-Klasse für die CSS-Eigenschaft text-align:center. Dabei willst Die den Content gar nicht zentrieren, sondern nur die Überschrift - weswegen "Waldseebad Gaggenau" gar kein p sein möchte, sondern ein h3. "Unsere Referenzen" wäre das h2. Farbe, richtige Schrift und Unterstreichung bringst Du dann mit CSS hinzu, und bitte nicht mit dem missbilligten font Element. Unterstreichen mittels u ist ebenfalls verpönt - das ist HTML der 90er Jahre. Und das strong-Element ist auch nicht dazu da, um etwas fett zu machen, sondern um inhaltliche Wichtigkeit hervorzuheben. Das ist hier nicht der Fall. Die Klasse mt-30, um einen margin-top von 30px zu erzeugen, ist ebenfalls eine Layoutklasse und gehört weg. Gib explizit dem figure-Element einen margin-bottom oder der h3 einen margin-top.<article class="single-product-item">
<figure>
<img src="..." alt="...">
</figure>
<h3>Baumaßnahme XYZ</h3>
<dl>
<div>
<dt>Bauherr:</dt>
<dd>Dingsbums AG, Dingenskirchen</dd>
</div>
<div>
<dt>Bauzeit:</dt>
<dd>drölf Jahre</dd>
</div>
<div>
<dt>Leistungen:</dt>
<dd>Jede Menge, und wir sind stolz drauf</dd>
</div>
<div>
<dt>Auftragswert:</dt>
<dd>Unbezahlbar</dd>
</div>
</dl>
</article>
Genau so viel HTML - und der Rest per CSS, das wäre korrekt. div im dl? Ja, ist erlaubt und ist auch nötig, wenn mal dt und dd nebeneinander bekommen will.
Keine Klassen für die einzelnen Elemente? Nö, wozu. Mit CSS kann man zielgerichtet navigieren, die Überschrift bspw. mit .single-product-item h3
oder die Description List mit
@media (min-width: 30em) {
.single-product-item dl > div {
display: flex;
}
.single-product-item dt {
flex: 0 0 auto;
}
.single-product-item dd {
flex: 1 0 auto;
}
}
(Edit: Selektoren nach Martins Hinweis um ein dl
gekürzt)
müsste - aus der Hüfte geschossen - den Zweck erfüllen. Ganz wichtig: Nebeneinander nur, wenn der Viewport breit genug ist. Die 30em sind symbolisch zu verstehen und müssen an dein Konstrukt angepasst werden. Hier würde sich eher @container-CSS anbieten, aber leider ist das noch nicht in den Browsern drin. Die @media-Abfrage sorgt jedenfalls dafür dass das div nur zur Flexbox wird, wenn der Bildschirm breit genug ist. Das dürfte die Lesbarkeit auf Smartphones deutlich verbessern.
Rolf
Hallo Rolf,
Respekt vor deinem Einsatz hier! Zumindest die Länge, aber auch die Qualität deiner Beiträge ist ein Indiz dafür, dass du fast täglich viel Zeit und Hirnschmalz investierst.
@media (min-width: 30em) { .single-product-item dl > div { display: flex; } .single-product-item dl dt { flex: 0 0 auto; } .single-product-item dl dd { flex: 1 0 auto; } }
Wenn du das Stylesheet verschlanken willst, dann kannst du den Selektor für die zweite und dritte Regel auch noch verkürzen, denn dt- und dd-Elemente müssen immer Nachfahren von dl sein. Das dl-Element hier zu nennen, ist also redundant. Sozusagen hyperliquid.
Einen schönen Tag noch
Martin
Hallo Martin,
ja, natürlich. Danke. Das dl hab ich rausgenommen.
Rolf
Absolut top Support! Da bin ich nicht drauf gekommen die main.js zu editieren. Eine Zahl geändert und es ist erledigt.
Hut ab!!!
Bezüglich zu lange Wörter und Umbruch, ich erinnere mich, es gab doch mal einen automatischen Umbruch innerhalb einer Zelle. Reicht da nicht ein word wrap?
Hallo KC,
https://wiki.selfhtml.org/wiki/CSS/Eigenschaften/word-break
Rolf