#html #css
Вопрос:
У меня есть макет для чего-то здесь. По сути, существуют разделы, столбцы и поля, которые все записаны как комбинация элементов <ul>
и. <li>
Это делается специально для последующего анализа.
Фрагмент HTML-кода:
<li class="layout"><span class="type">[Column] </span>
<ul class="layout-children">
<li class="field"><span class="type">[Text] </span>A field</li>
<li class="field"><span class="type">[Text] </span>Another field</li>
<li class="field"><span class="type">[Text] </span>Yet another field</li>
</ul>
</li>
<li class="layout"><span class="type">[Column] </span>
<ul class="layout-children">
<li class="field"><span class="type">[Text] </span>More fields</li>
<li class="field"><span class="type">[Text] </span>And one more field</li>
</ul>
</li>
Если вы перейдете к связанному контенту, вы заметите, что эти столбцы расположены вертикально.
Я хочу, чтобы колонны стояли рядом друг с другом, но я не уверен, как это сделать.
Было бы предпочтительнее, если бы HTML не менялся, а только CSS.
Ответ №1:
Я только что добавил это в ваш css:
ul .section-children li.layout {
display : inline-block;
}
К сожалению, я не знаю, насколько хорошо поддерживается встроенный блок в настоящее время.
Комментарии:
1. встроенный блок-это определенно правильный путь, если он работает в системах, на которые вы нацелены.
2. встроенный блок, безусловно, поддерживается как IE 6, так и 7… на встроенных элементах.
3. Однако он не поддерживается Firefox
Ответ №2:
display: -moz-inline-box;
display: inline-block;
*display: inline;
*zoom: 1;
Комментарии:
1. @CharlesPrakashDasari, более старые версии IE (6 и 7) не поддерживают
inline-block
элементы, для которых по умолчаниюblock
установлено значение . Ноinline
плюс проприетарноеhasLayout
состояние IE идентичноinline-block
.*
Префикс нацелен на ошибку синтаксического анализа CSS в этих старых версиях IE, изолируя эти стили.zoom: 1
срабатываетhasLayout
без каких-либо побочных эффектов.
Ответ №3:
В своем <UL>
теге используйте атрибут css «стиль списка:нет», а в <li>
теге используйте атрибут css «отображение:встроенное». Вам придется поиграть с заполнением и полями, чтобы он выглядел хорошо, но эти два атрибута помогут вам в вашем пути. Для лучшего примера смотрите мой некоммерческий веб-сайт: Техническое обучение
Ответ №4:
Как насчет этого:
.layout { float: left; width: 50%; margin: 0; border: 0; padding: 0; /* background: transparent */ }
* html .layout { display: inline } /* IE margin hack */
.field { clear: both }
Комментарии:
1. есть способы справиться с этим без взлома, поэтому я бы не советовал этого делать.
Ответ №5:
да, используя display:block
его, было бы невозможно заставить их сидеть рядом друг с другом, если только вы не попытаетесь указать ширину для каждого из них, но если это так, просто используйте display:inline
Ответ №6:
Просто альтернатива использованию встроенных элементов, так как у IE была история проблем с заполнением встроенных элементов:
.layout-children:after
{
content: "";
display: block;
height: 0px;
clear: both;
}
.layout-children .field
{
float: left;
}
Комментарии:
1. IE также имеет историю проблем с :после псевдоэлементов.
Ответ №7:
Использование inline
или inline-block
не принесет ничего, кроме неприятностей. Гораздо лучше использовать поплавки, как предложил @Dmitry Z (но без взлома полей, в котором нет необходимости).
Ответ №8:
Простой поплавок: слева будет работать (с небольшой регулировкой ширины)
li {
margin: .5em 1em;
padding: .1em;
font-family: sans-serif;
list-style-type: none;
border: 1px #666 solid;
float: left;
}
#layout-section {
width: 85%;
}