Chcę mieć wiersz elementów div (komórek), które nie są zawijane, jeśli przeglądarka jest zbyt wąska, aby je dopasować.
Przeszukałem stos i nie mogłem znaleźć działającej odpowiedzi na to, co moim zdaniem powinno być prostym pytaniem CSS.
Komórki mają określoną szerokość. Jednak nie chcę określać szerokości wiersza, szerokość powinna automatycznie odpowiadać szerokości jego komórek potomnych.
Jeśli widoczny obszar jest zbyt wąski, aby pomieścić wiersze, element div powinien być przepełniony paskami przewijania.
Podaj swoją odpowiedź jako działający fragment kodu, ponieważ wypróbowałem wiele rozwiązań, które widziałem gdzie indziej (np. Określ szerokość: 100% i wydaje się, że nie działają).
Szukam tylko rozwiązania HTML / CSS, bez JavaScript.
.row {
float: left;
border: 1px solid yellow;
width: 100%;
overflow: auto;
}
.cell {
float: left;
border: 1px solid red;
width: 200px;
height: 100px;
}
<div class="row">
<div class="cell">a</div>
<div class="cell">b</div>
<div class="cell">c</div>
</div>
W tej chwili naprawdę ciężko koduję szerokość wiersza do naprawdę dużej liczby.
Odpowiedzi:
Właściwość CSS
display: inline-block
została zaprojektowana, aby zaspokoić tę potrzebę. Możesz o tym trochę poczytać tutaj: http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/Poniżej przykład jego zastosowania. Kluczowe elementy to to, że
row
element mawhite-space: nowrap
icell
elementy majądisplay: inline-block
. Ten przykład powinien działać w większości głównych przeglądarek; tabela kompatybilności jest dostępna tutaj: http://caniuse.com/#feat=inline-block<html> <body> <style> .row { float:left; border: 1px solid yellow; width: 100%; overflow: auto; white-space: nowrap; } .cell { display: inline-block; border: 1px solid red; width: 200px; height: 100px; } </style> <div class="row"> <div class="cell">a</div> <div class="cell">b</div> <div class="cell">c</div> </div> </body> </html>
źródło
<!DOCTYPE html>
lub<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
na górze kodu HTML, aby IE nie był domyślnie w trybie dziwactw.float: right
, prawda?Chcesz zdefiniować
min-width
wiersz, aby po zmianie rozmiaru przeglądarki nie schodził poniżej tego i zawijał.źródło
Po przeczytaniu odpowiedzi Johna odkryłem, że wydaje się, że działają u nas następujące rzeczy (nie wymagały określenia szerokości):
<style> .row { float:left; border: 1px solid yellow; overflow: visible; white-space: nowrap; } .cell { display: inline-block; border: 1px solid red; height: 100px; } </style> <div class="row"> <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div> <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div> <div class="cell">hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello hello </div> </div>
źródło
overflow: visible; white-space: nowrap;
załatwił mi sprawę. Dzięki!Jedynym sposobem, w jaki udało mi się to zrobić, jest użycie
overflow: visible;
iwidth: 20000px;
na elemencie nadrzędnym. Nie ma sposobu na zrobienie tego z poziomem CSS 1, o którym jestem świadomy i nie chciałem myśleć, że będę musiał iść na całość z poziomem CSS 3. Poniższy przykład ma 18 menu, które wykraczają poza mój wyświetlacz LCD o rozdzielczości 1920x1200 , jeśli ekran jest większy, po prostu skopiuj elementy menu pierwszego poziomu lub po prostu zmień rozmiar przeglądarki. Alternatywnie, przy nieco niższych poziomach zgodności przeglądarki, możesz użyć zapytań o media CSS3.Oto pełna przykładowa demonstracja kopiowania / wklejania ...
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> <head> <title>XHTML5 Menu Demonstration</title> <style type="text/css"> * {border: 0; box-sizing: content-box; color: #f0f; font-size: 10px; margin: 0; padding: 0; transition-property: background-color, background-image, border, box-shadow, color, float, opacity, text-align, text-shadow; transition-duration: 0.5s; white-space: nowrap;} a:link {color: #79b; text-decoration: none;} a:visited {color: #579;} a:focus, a:hover {color: #fff; text-decoration: underline;} body {background-color: #444; overflow-x: hidden;} body > header {background-color: #000; height: 64px; left: 0; position: absolute; right: 0; z-index: 2;} body > header > nav {height: 32px; margin-left: 16px;} body > header > nav a {font-size: 24px;} main {border-color: transparent; border-style: solid; border-width: 64px 0 0; bottom: 0px; left: 0; overflow-x: hidden !important; overflow-y: auto; position: absolute; right: 0; top: 0; z-index: 1;} main > * > * {background-color: #000;} main > section {float: left; margin-top: 16px; width: 100%;} nav[id='menu'] {overflow: visible; width: 20000px;} nav[id='menu'] > ul {height: 32px;} nav[id='menu'] > ul > li {float: left; width: 140px;} nav[id='menu'] > ul > li > ul {background-color: rgba(0, 0, 0, 0.8); display: none; margin-left: -50px; width: 240px;} nav[id='menu'] a {display: block; height: 32px; line-height: 32px; text-align: center; white-space: nowrap;} nav[id='menu'] > ul {float: left; list-style:none;} nav[id='menu'] ul li:hover ul {display: block;} p, p *, span, span * {color: #fff;} p {font-size: 20px; margin: 0 14px 0 14px; padding-bottom: 14px; text-indent: 1.5em;} .hidden {display: none;} .width_100 {width: 100%;} </style> </head> <body> <main> <section style="height: 2000px;"><p>Hover the first menu at the top-left.</p></section> </main> <header> <nav id="location"><a href="">Example</a><span> - </span><a href="">Blog</a><span> - </span><a href="">Browser Market Share</a></nav> <nav id="menu"> <ul> <li><a href="" tabindex="2">Menu 1 - Hover</a> <ul> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> <li><a href="" tabindex="2">Menu 1 B</a></li> </ul> </li> <li><a href="" tabindex="2">Menu 2</a></li> <li><a href="" tabindex="2">Menu 3</a></li> <li><a href="" tabindex="2">Menu 4</a></li> <li><a href="" tabindex="2">Menu 5</a></li> <li><a href="" tabindex="2">Menu 6</a></li> <li><a href="" tabindex="2">Menu 7</a></li> <li><a href="" tabindex="2">Menu 8</a></li> <li><a href="" tabindex="2">Menu 9</a></li> <li><a href="" tabindex="2">Menu 10</a></li> <li><a href="" tabindex="2">Menu 11</a></li> <li><a href="" tabindex="2">Menu 12</a></li> <li><a href="" tabindex="2">Menu 13</a></li> <li><a href="" tabindex="2">Menu 14</a></li> <li><a href="" tabindex="2">Menu 15</a></li> <li><a href="" tabindex="2">Menu 16</a></li> <li><a href="" tabindex="2">Menu 17</a></li> <li><a href="" tabindex="2">Menu 18</a></li> </ul> </nav> </header> </body> </html>
źródło
width:100%
zwidth:1000px
nim pracuje dla mniewhite-space: nowrap;
a dzieci na,display: inline-block;
jak już powiedziano w innych odpowiedziach (lub cofnij się dodisplay: table;
idisplay: table-cell;
).main > * > * {background-color: #000;}
O_oDla mnie (używając bootstrap) jedyną rzeczą, która działała, było ustawienie
display:absolute;z-index:1
na ostatniej komórce.źródło
display:absolute
nie jest poprawnymMiałem nieco podobny problem, w którym ograniczony obszar składał się z obrazu w postaci pływającej: lewy blok i niepływający blok tekstu. Obszar ma płynną szerokość. Zgodnie z projektem tekst byłby zawinięty wzdłuż prawej strony obrazu. Problem polegał na tym, że tekst zaczynał się od znacznika <h2>, którego pierwszym słowem było maleńkie słowo „From”. Gdy zmieniłem rozmiar okna na mniejszą szerokość, tekst niepływający pozostawiałby dla pewnego zakresu szerokości tylko słowo „Od” na górze obszaru zawijania, reszta tekstu byłaby ściśnięta poniżej elementu zmiennoprzecinkowego blok. Moim rozwiązaniem było powiększenie pierwszego słowa tagu poprzez zastąpienie spacji występującej po nim tym kodem, <span style = "opacity: 0;"> x </span>. Efektem było utworzenie pierwszego słowa zamiast „From”, „FromxNextWord”, gdzie „x” jako niewidoczny wyglądał jak spacja. Teraz moje pierwsze słowo było na tyle duże, że nie zostało porzucone przez resztę bloku tekstu.
źródło