Як зробити так, щоб елементи дзвінка відображалися в рядку?


254

Враховуючи цей HTML:

<div>foo</div><div>bar</div><div>baz</div>

Як змусити їх відображати рядки таким чином:

foo bar baz

не так:

foo
bar
baz

Відповіді:


268

Це щось інше тоді:

div.inline { float:left; }
.clearBoth { clear:both; }
<div class="inline">1<br />2<br />3</div>
<div class="inline">1<br />2<br />3</div>
<div class="inline">1<br />2<br />3</div>
<br class="clearBoth" /><!-- you may or may not need this -->


насправді це був єдиний спосіб, коли я виявив, що правильно відображати вбудований текст, я не знаю, чому рішення, яке не працює з плаванням, не спрацювало ....
Necronet

23
Імена класів css тут не повинні використовуватися як приклад. Використовуйте правильне смислове іменування як: css-tricks.com/semantic-class-names
Берик

261

Вбудований дів - це виродження в Інтернеті, і його слід бити, поки він не стане розмахом (принаймні 9 разів з 10) ...

<span>foo</span>
<span>bar</span>
<span>baz</span>

... відповідає на початкове запитання ...


11
Бувають випадки, коли ви хочете, щоб діви відображалися в рядку, наприклад, коли ви хочете додати поле зліва та справа від елемента. Я не думаю, що це можна зробити за допомогою проміжку. Стів, мабуть, повинен використовувати float замість inline.
Дарріл Хайн

8
padding так, не маржа
Андреас Вонг

8
На жаль, HTML5 не підтримує введення div всередині <span>. Раніше я використовував <span> s, щоб розміщувати стилі CSS на секції, а браузер не мав інтерпретувати розділ як блок і змушувати його блокувати макет. Але я щойно відкрив свою сторінку на JQuery Mobile + HTML5, що якщо у вас є <div> в межах <span>, валідатор HTML5 поскаржиться, що він недійсний HTML5, тому є випадки, коли використовується тег <span> замість вбудований <div> неможливий, принаймні, з HTML5.
Кмейкснер

4
Іноді, хоча ти живеш у світі, якого ти не створив, і єдине, що ти можеш змінити в CSS. У цьому випадку style = "display: inline" працює добре.
Меттью Лок

3
Якщо ви не «застрягли» у використанні divs, це хороша відповідь. Але може бути дуже багато причин, чому вам потрібно використовувати div, але потрібно, щоб вони відображалися як вбудовані елементи.
Боббл

174

Спробуйте написати це так:

div { border: 1px solid #CCC; }
    <div style="display: inline">a</div>
    <div style="display: inline">b</div>
    <div style="display: inline">c</div>


16
Це правильна відповідь на питання, але, враховуючи прийняту відповідь, я підозрюю, що це питання не відповідає реальному сценарію.
Стів Перкс

34

Прочитавши це питання та відповіді кілька разів, все, що я можу зробити, - це припустити, що відбулося досить багато редагування, і я підозрюю, що вам дали невірну відповідь на основі недостатнього надання інформації. Моя підказка походить від використання brтегів.

Вибачте Дарріл. Я читаю class = "inline" як style = "display: inline". Ви маєте правильну відповідь, навіть якщо ви використовуєте семантично сумнівні назви класів ;-)

Пропущення використання brструктурного макета, а не текстового макета є занадто поширеним для мого вподобання.

Якщо ви хочете помістити в них більше, ніж вбудованих елементів, divsто вам слід буде плавати ці div, а не робити їх вбудованими.

Плаваючі діви:

===== ======= ==   **** ***** ******   +++++ ++++
===== ==== =====   ******** ***** **   ++ +++++++
=== ======== ===   ******* **** ****   
===== ==== =====                       +++++++ ++
====== == ======

Вбудовані діви:

====== ==== ===== ===== == ==== *** ******* ***** ***** 
**** ++++ +++ ++ ++++ ++ +++++++ +++ ++++

Якщо ви шукаєте колишнього, то це ваше рішення і втрачайте ці brтеги:

<div style="float: left;" >
  <p>block level content or <span>inline content</span>.</p>
  <p>block level content or <span>inline content</span>.</p>
</div>
<div style="float: left;" >
  <p>block level content or <span>inline content</span>.</p>
  <p>block level content or <span>inline content</span>.</p>
</div>
<div style="float: left;" >
  <p>block level content or <span>inline content</span>.</p>
  <p>block level content or <span>inline content</span>.</p>
</div>

зауважте, що ширина цих дівок є текучою, тому сміливо накладайте їх на ширину, якщо ви хочете контролювати поведінку.

Спасибі, Стів


24

Використовувати display:inline-blockз маржинальним запитом та медіа-запитом для IE6 / 7:

<html>
  <head>
    <style>
      div { display:inline-block; }
      /* IE6-7 */
      @media,
          {
          div { display: inline; margin-right:10px; }
          }
   </style>
  </head>
  <div>foo</div>
  <div>bar</div>
  <div>baz</div>
</html>

11

Ви повинні використовувати <span>замість <div>правильного способу вставки . оскільки div - елемент рівня блоку, а ваша вимога - до елементів рівня вбудованого блоку.

Ось html-код відповідно до ваших вимог:

<div class="main-div">
 <div>foo</div>
 <div>bar</div>
 <div>baz</div>`
</div>

У вас є два способи це зробити


  • використовуючи прості display:inline-block;
  • або використовуючи float:left;

тож вам потрібно display:inline-block;насильно змінити властивість відображення

Приклад перший

div {
    display: inline-block;
}

Приклад другий

div {
    float: left;
}

вам потрібно очистити поплавок

.main-div:after {
    content: "";
    clear: both;
    display: table;
}

7

Як згадувалося, display: inline - це, мабуть, те, що ви хочете. Деякі браузери також підтримують вбудовані блоки.

http://www.quirksmode.org/css/display.html#inlineblock


3
@NexusRex є робота над тим, щоб IE поводився правильно, однак дисплей: inline - це правильна відповідь. Я вважаю, що навколо цього є: display: inline-block; * дисплей: вбудований; * зум: 1; встановлення масштабу примушує IE ставитися до елемента, як до блокового елемента.
Кріс Стівенс

7

Просто використовуйте обгортковий div з "float: left", а всередину поставте поле, що також містить float: left:

CSS:

wrapperline{
width: 300px;
float: left;
height: 60px;
background-color:#CCCCCC;}

.boxinside{
width: 50px;
float: left;
height: 50px;
margin: 5px;
background-color:#9C0;
float:left;}

HTML:

<div class="wrapperline">
<div class="boxinside">Box 1</div>
<div class="boxinside">Box 1</div>
<div class="boxinside">Box 1</div>
<div class="boxinside">Box 1</div>
<div class="boxinside">Box 1</div>
</div>

6

<span> ?


2
Я думаю, ми говоримо про вбудовані елементи блоків, які можуть мати ширину і висоту. Уявіть собі div з фоновим зображенням, яке ви хочете передати в рядку з текстом.
NexusRex

6

гаразд, для мене:

<style type="text/css">
    div{
        position: relative;
        display: inline-block;
        width:25px;
        height:25px;
    }
</style>
<div>toto</div>
<div>toto</div>
<div>toto</div>

4

Я б скористався прольотами або поплавав би дівом ліворуч. Єдина проблема з плаваючою полягає в тому, що ви повинні очистити float після цього, або містить div повинен мати стиль переповнення, встановлений на auto


Я вважаю, що ми говоримо про поділ, вбудований з текстом чи іншим, а не плив на одну сторону.
NexusRex

Під час використання float: зліва, з переповненням: auto на вміщеному div, як / коли буде прокручуватися панель прокрутки, щоб переповнення могло ввійти в гру?
cellepo

3

Я знаю, що люди кажуть, що це жахлива ідея, але вона на практиці може бути корисною, якщо ви хочете зробити щось на зразок плиткових зображень із коментарями під ними. наприклад, Picasaweb використовує його для відображення ескізів в альбомі.
Див. Наприклад / demo http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/inline_block_quirks.html (клас goog-inline-block; скорочую його до ib тут)

/* below is a set of hacks to make inline-block work right on divs in IE. */
html > body .ib { display:inline-block; }
.ib {display:inline-block;position:relative;}
* html .ib { display: inline; }
:first-child + html .ib { display:inline; }

Враховуючи цей CSS, встановіть свій div на клас ib, і тепер це магічний елемент вбудованого блоку.


3

Потрібно містити три діви. Ось приклад:

CSS

div.contain
{
  margin:3%;
  border: none;
  height: auto;
  width: auto;
  float: left;
}

div.contain div
{
  display:inline;
  width:200px;
  height:300px;
  padding: 15px;
  margin: auto;
  border:1px solid red;
  background-color:#fffff7;
  -moz-border-radius:25px; /* Firefox */
  border-radius:25px;
}

Примітка: атрибути радіусу кордону необов’язкові і працюють лише в браузерах, сумісних з CSS3.

HTML

<div class="contain">
  <div>Foo</div>
</div>

<div class="contain">
  <div>Bar</div>
</div>

<div class="contain">
  <div>Baz</div>
</div>

Зауважте, що значки 'foo' 'bar' та 'baz' утримуються в розділі 'содержать'.


2
<style type="text/css">
div.inline { display:inline; }
</style>
<div class="inline">a</div>
<div class="inline">b</div>
<div class="inline">c</div>

2

Я думаю, що ви можете використовувати цей спосіб, не використовуючи css -

<table>
    <tr>
        <td>foo</td>
    </tr>
    <tr>
        <td>bar</td>
    </tr>
    <tr>
        <td>baz</td>
    </tr>
</table>

Зараз ви використовуєте елемент рівня блоку, щоб отримати непотрібний результат. Таким чином, ви можете вбудовувати такі елементи як span, small тощо.

<span>foo</span><span>bar</span><span>baz</span>

0

ми можемо робити це так

.left {
    float:left;
    margin:3px;
}
<div class="left">foo</div>
<div class="left">bar</div>
<div class="left">baz</div>


0
<div>foo</div><div>bar</div><div>baz</div>
//solution 1
<style>
    #div01, #div02, #div03 {
                                float:left;
                                width:2%;
    }   
 </style>
 <div id="div01">foo</div><div id="div02">bar</div><div id="div03">baz</div>

 //solution 2

 <style>
      #div01, #div02, #div03 {
                                  display:inline;
                                  padding-left:5px;
      }   
</style>
<div id="div01">foo</div><div id="div02">bar</div><div id="div03">baz</div>

 /* I think this would help but if you have any other thoughts just let me knw      kk */

-1

Я просто прагну робити їх фіксованої ширини, щоб вони додавали до загальної ширини сторінки - ймовірно, це працює лише в тому випадку, якщо ви використовуєте сторінку з фіксованою шириною. Також "плавають".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.