Używając CSS, jak mogę stylizować następujące elementy:
<dl>
<dt>Mercury</dt>
<dd>Mercury (0.4 AU from the Sun) is the closest planet to the Sun and the smallest planet.</dd>
<dt>Venus</dt>
<dd>Venus (0.7 AU) is close in size to Earth, (0.815 Earth masses) and like Earth, has a thick silicate mantle around an iron core.</dd>
<dt>Earth</dt>
<dd>Earth (1 AU) is the largest and densest of the inner planets, the only one known to have current geological activity.</dd>
</dl>
więc treść dt
przedstawienia w jednej kolumnie i zawartość dd
innej kolumny, z których każda dt
i odpowiadająca dd
jej linia znajdują się w tym samym wierszu? Tj. Produkuję coś, co wygląda:
Odpowiedzi:
źródło
clear: left
do stylu dt, aby upewnić się, że pozostaną w linii, nawet jeśli będą musiały się zawijać.* { ... }
Zestawienie sprawia, że wszystko stracić marginesu i dopełnienie, a usunięcie go zniekształca DL. Korzystanie z klasy też nie załatwi sprawy. Wygląda na to, że jeśli chcę czegoś oprócz DL, będę musiał przejść wszędzie bez marginesów i wypełnień ... Lub?Mam rozwiązanie bez użycia pływaków!
sprawdź to na codepen
Mianowicie.
Aktualizacja - 3 rd stycznia 2017: rozwiązanie oparte Dodałem flex-box dla problemu. Sprawdź to w połączonym codepen i popraw go zgodnie z potrzebami. Dzięki!
źródło
Układ siatki CSS
Aby zmienić rozmiary kolumn, spójrz na
grid-template-columns
właściwość.źródło
Jeśli używasz Bootstrap 3 (lub wcześniejszego) ...
źródło
dl-horizontal
faktycznie spadła z Bootstrap 4. W BS4, trzeba zamiast użyć klas siatki.Zakładając, że znasz szerokość marginesu:
źródło
Ponieważ jeszcze nie widziałem przykładu, który działa w moim przypadku użycia, oto najbardziej kompletne rozwiązanie, jakie udało mi się zrealizować.
O dziwo, to nie działa
display: inline-block
. Podejrzewam, że jeśli chcesz ustawić rozmiar któregokolwiek zdt
elementów lubdd
elementów, możesz ustawićdl
wyświetlanie jakodisplay: flexbox; display: -webkit-flex; display: flex;
orazflex
skrótdd
elementów idt
elementów jako coś podobnegoflex: 1 1 50%
idisplay
jakodisplay: inline-block
. Ale nie testowałem tego, więc podejdź ostrożnie.źródło
Zobacz demo jsFiddle
Potrzebowałem listy dokładnie takiej, jak opisano dla projektu, który pokazywał pracownikom firmy, ich zdjęcie po lewej stronie i informacje po prawej stronie. Udało mi się to osiągnąć, stosując elementy psuedo po każdym
DD
:Ponadto chciałem, aby tekst był wyświetlany tylko po prawej stronie obrazu, bez zawijania pod pływającym obrazem (efekt pseudokolumny). Można to osiągnąć przez dodanie
DIV
elementu z CSSoverflow: hidden;
wokół zawartościDD
znacznika. Możesz pominąć to dodatkoweDIV
, ale zawartośćDD
tagu zawinie się pod zmiennoprzecinkowąDT
.Po dłuższej zabawie byłem w stanie obsłużyć wiele
DT
elementów naDD
, ale nie wieleDD
elementów naDT
. Próbowałem dodać kolejną opcjonalną klasę do wyczyszczenia dopiero po ostatnimDD
, ale kolejnychDD
elementach zawiniętych podDT
elementy (nie mój pożądany efekt… Chciałem, aby elementyDT
iDD
tworzyły kolumny, a dodatkoweDD
elementy były zbyt szerokie).Według wszystkich praw powinno to działać tylko w IE8 +, ale z powodu dziwactwa w IE7 to również tam działa.
źródło
Oto kolejna opcja, która działa, wyświetlając dt i dd w linii, a następnie dodając podział linii po dd.
Jest to podobne do powyższego rozwiązania Navaneeth, ale przy takim podejściu zawartość nie będzie zgodna jak w tabeli, ale dd będzie podążać za dt natychmiast w każdej linii, niezależnie od długości.
źródło
Muszę to zrobić, a
<dt>
zawartość powinna być wyśrodkowana pionowo względem<dd>
zawartości. Użyłemdisplay: inline-block
razem zvertical-align: middle
Zobacz pełny przykład na Codepen tutaj
źródło
W zależności od stylu elementów dt i dd możesz napotkać problem: ustawienie ich na tej samej wysokości. Na przykład, jeśli chcesz, ale widoczna ramka na dole tych elementów, najprawdopodobniej chcesz wyświetlić ramkę na tej samej wysokości, jak w tabeli.
Jednym z rozwiązań jest oszustwo i uczynienie każdego wiersza elementem „dl”. (jest to równoważne z użyciem tr w tabeli) Tracimy pierwotne zainteresowanie listami definicji, ale w odpowiedniku jest to łatwy sposób na uzyskanie pseudo-tabel, które są szybko i ładnie zaprojektowane.
CSS:
HTML:
źródło
quatreVingtCinqPts
? :)Znalazłem rozwiązanie, które wydaje mi się idealne, ale wymaga dodatkowych
<div>
tagów. Okazuje się, że nie trzeba używać<table>
tagu do wyrównywania jak w tabeli, wystarczy użyćdisplay:table-row;
idisplay:table-cell;
stylów:źródło
dl
y mają mieć tylkodt
S idd
S, jak dzieci.dt
jako dzieci mogą mieć tylko elementy wbudowane.dd
s, z jakiegoś powodu, może mieć elementy na poziomie bloku jako dzieci.DI
elementu, tak jak ja . Ale z każdym takim elementem wcale nie potrzebujesz ezoterycznych rzeczy, takich jak tabele CSS ... W każdym razie ten element nie istnieje, więc nie powinieneś go używać.run-in
CSSdisplay
jest dokładnie tym, czego chcę (w moim przypadku chcę prostych list metadanych nazwa-wartość).Niedawno potrzeby mieszać rolki i bez rolki dt / dd pary poprzez określenie klasy
dl-inline
od<dt>
elementów, które powinny być stosowane przez wbudowanymi<dd>
elementami.źródło
Działa na IE7 +, jest zgodny ze standardami i pozwala na różne wysokości.
Zobacz JSFiddle .
źródło
to działa, aby wyświetlić je jako tabelę, z ramką, powinno reagować z 3em szerokości pierwszej kolumny. Zawijanie wyrazów dzieli tylko słowa szersze niż kolumna
Porównanie
<table>
z<dl>
:źródło
Zwykle zaczynam od następujących czynności, gdy style definiuje listy jako tabele:
źródło
Większość sugerowanych przez ludzi tutaj działa, jednak należy umieszczać tylko ogólny kod w arkuszu stylów, a konkretny kod w kodzie HTML, jak pokazano poniżej. W przeciwnym razie skończysz z rozdętym arkuszem stylów.
Oto jak to robię:
Twój kod arkusza stylów:
Twój kod HTML:
Wygląda tak
źródło