Я хочу иметь ряд div (ячеек), которые не переносятся, если браузер слишком узок для их размещения.
Я искал Stack и не смог найти рабочего ответа на то, что, по моему мнению, должно быть простым вопросом css.
Ячейки имеют заданную ширину. Однако я не хочу указывать ширину строки, ширина должна автоматически совпадать с шириной ее дочерних ячеек.
Если область просмотра слишком узкая для размещения строк, то div должен переполниться полосами прокрутки.
Пожалуйста, предоставьте свой ответ как рабочий фрагмент кода, поскольку я пробовал много решений, которые видел в другом месте (например, укажите ширину: 100%, и они, похоже, не работают).
Я ищу решение только для HTML / CSS, без 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>
На данный момент я на самом деле жестко кодирую ширину строки очень большим числом.
Ответы:
Свойство CSS
display: inline-block
было разработано для удовлетворения этой потребности. Вы можете немного прочитать об этом здесь: http://robertnyman.com/2010/02/24/css-display-inline-block-why-it-rocks-and-why-it-sucks/Ниже приведен пример его использования. Ключевыми элементами являются то, что есть у
row
элементаwhite-space: nowrap
и уcell
элементов естьdisplay: inline-block
. Этот пример должен работать в большинстве основных браузеров; таблица совместимости доступна здесь: 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>
источник
<!DOCTYPE html>
или<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
в верхнюю часть HTML, чтобы IE не работал по умолчанию в режиме совместимости.float: right
, не так ли?Вы хотите определить
min-width
строку, чтобы при изменении размера браузера он не опускался ниже и не переносился.источник
Прочитав ответ Джона, я обнаружил, что для нас работает следующее (не требует указания ширины):
<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>
источник
overflow: visible; white-space: nowrap;
помогло мне. Благодаря!Единственный способ, которым мне удалось это сделать, - использовать
overflow: visible;
иwidth: 20000px;
в родительском элементе. Невозможно сделать это с помощью CSS уровня 1, о котором я знаю, и я отказывался от мысли, что мне придется полностью посвятить себя CSS уровня 3. В приведенном ниже примере есть 18 меню, которые выходят за пределы моего ЖК-дисплея с разрешением 1920x1200. , если ваш экран больше, просто продублируйте элементы меню первого уровня или просто измените размер браузера. В качестве альтернативы и с немного более низким уровнем совместимости браузера вы можете использовать медиа-запросы CSS3.Вот полный демонстрационный пример копирования / вставки ...
<?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>
источник
width:100%
сwidth:1000px
ним работает для меняwhite-space: nowrap;
и дочерние элементы,display: inline-block;
как уже было сказано в других ответах (или вернитесь кdisplay: table;
иdisplay: table-cell;
).main > * > * {background-color: #000;}
O_oДля меня ( с использованием начальной загрузки), единственное , что работал , была установка
display:absolute;z-index:1
на последней ячейке.источник
display:absolute
У меня была несколько похожая проблема, когда ограниченная область состояла из изображения в блоке float: left и текстовом блоке без float. Область имеет плавную ширину. Текст по замыслу должен оборачиваться по правой стороне изображения. Проблема заключалась в том, что текст начинался с тега <h2>, первым словом которого является крошечное слово «From». Когда я изменил размер окна на меньшую ширину, не плавающий текст для определенного диапазона ширины оставил бы только слово «From» в верхней части области переноса, а остальной текст был сжат ниже плавающего объекта. блок. Мое решение заключалось в том, чтобы увеличить первое слово тега, заменив следующий за ним пробел этим кодом <span style = "opacity: 0;"> x </span>. В результате первое слово вместо "From", "FromxNextWord", где «х», будучи невидимым, выглядел как пробел. Теперь мое первое слово было достаточно большим, чтобы его не бросила остальная часть текстового блока.
источник