Làm thế nào để bạn làm cho các yếu tố div hiển thị nội tuyến?


254

Đưa ra HTML này:

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

Làm thế nào để bạn làm cho chúng hiển thị nội tuyến như thế này:

thanh foo

không như thế này:

foo
thanh
baz

Câu trả lời:


268

Đó là một cái gì đó khác sau đó:

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 -->


thực ra đây là cách duy nhất tôi tìm thấy để hiển thị nội tuyến một cách chính xác. Tôi không biết tại sao giải pháp không nổi không hoạt động ....
Necronet

23
Tên lớp css ở đây không nên được sử dụng làm ví dụ. Sử dụng cách đặt tên ngữ nghĩa phù hợp như: css-tricks.com/semantic- class
Berik

261

Một div nội tuyến là một quái vật của web & nên bị đánh cho đến khi nó trở thành một nhịp (ít nhất 9 lần trong số 10) ...

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

... Trả lời câu hỏi ban đầu ...


11
Đôi khi bạn muốn div hiển thị nội tuyến, ví dụ, khi bạn muốn thêm một lề ở bên trái và bên phải của một phần tử. Tôi không nghĩ rằng có thể được thực hiện với một nhịp. Steve có lẽ nên sử dụng float thay vì nội tuyến.
Darryl Hein

8
đệm có, không lề
Andreas Wong

8
Thật không may, HTML5 không hỗ trợ đặt div trong <span>. Tôi đã từng sử dụng <span> s để đặt các kiểu CSS trên một phần và không để trình duyệt diễn giải phần đó thành một khối và buộc bố cục khối của nó đối với tôi. Nhưng tôi mới phát hiện ra hôm nay khi chuyển trang của mình sang JQuery Mobile + HTML5 rằng nếu bạn có <div> trong <span> trình xác thực HTML5 sẽ phàn nàn rằng đó là HTML5 không hợp lệ nên có trường hợp sử dụng thẻ <span> thay vì một <div> nội tuyến là không khả thi, ít nhất là với HTML5.
Kmeixner

4
Đôi khi, mặc dù bạn đang sống trong một thế giới mà bạn không tạo ra và điều duy nhất bạn có thể thay đổi trong CSS. Trong trường hợp đó, style = "display: inline" hoạt động độc đáo.
Khóa Matthew

3
Nếu bạn không 'mắc kẹt' với việc sử dụng div thì đây là một câu trả lời hay. Nhưng có thể có nhiều lý do tại sao bạn cần sử dụng div nhưng cần chúng xuất hiện dưới dạng các yếu tố nội tuyến.
Bobble

174

Hãy thử viết nó như thế này:

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


16
Đây là câu trả lời chính xác cho câu hỏi, nhưng xem xét câu trả lời được chấp nhận, tôi nghi ngờ câu hỏi không giải quyết được kịch bản thực sự.
Steve Perks

34

Đã đọc câu hỏi này và câu trả lời một vài lần, tất cả những gì tôi có thể làm là giả định rằng có khá nhiều chỉnh sửa đang diễn ra, và tôi nghi ngờ rằng bạn đã nhận được câu trả lời sai dựa trên việc không cung cấp đủ thông tin. Manh mối của tôi đến từ việc sử dụng brthẻ.

Xin lỗi Darryl. Tôi đọc class = "inline" là style = "display: inline". Bạn có câu trả lời đúng, ngay cả khi bạn sử dụng tên lớp có vấn đề về ngữ nghĩa ;-)

Việc sử dụng sai brđể cung cấp bố cục cấu trúc thay vì bố trí văn bản là quá phổ biến đối với sở thích của tôi.

Nếu bạn muốn đặt nhiều hơn các phần tử nội tuyến bên trong chúng divsthì bạn nên thả nổi các phần tử đó divthay vì đặt chúng thành nội tuyến.

Divs nổi:

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

Divs nội tuyến:

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

Nếu bạn là người cũ, thì đây là giải pháp của bạn và mất các brthẻ đó:

<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>

lưu ý rằng chiều rộng của các div này là chất lỏng, vì vậy hãy thoải mái đặt chiều rộng cho chúng nếu bạn muốn kiểm soát hành vi.

Cảm ơn, Steve


24

Sử dụng display:inline-blockvới lề và truy vấn phương tiện cho 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

Bạn nên sử dụng <span>thay vì <div>cho cách nội tuyến chính xác . bởi vì div là một phần tử mức khối và yêu cầu của bạn là các phần tử mức khối nội tuyến.

Đây là mã html theo yêu cầu của bạn:

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

Bạn có hai cách để làm điều này


  • sử dụng đơn giản display:inline-block;
  • hoặc sử dụng float:left;

vì vậy bạn phải thay đổi tài sản hiển thị một display:inline-block;cách mạnh mẽ

Ví dụ một

div {
    display: inline-block;
}

Ví dụ hai

div {
    float: left;
}

bạn cần xóa phao

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

7

Như đã đề cập, display: inline có lẽ là những gì bạn muốn. Một số trình duyệt cũng hỗ trợ các khối nội tuyến.

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


3
@NexusRex có cách giải quyết để IE hoạt động chính xác tuy nhiên hiển thị: nội tuyến là câu trả lời đúng. Tôi tin rằng công việc xung quanh là: display: inline-block; *Hiển thị nội dòng; * thu phóng: 1; thiết lập thu phóng buộc IE phải xử lý phần tử giống như phần tử khối.
Chris Stephens

7

Chỉ cần sử dụng div trình bao bọc với "float: left" và đặt các hộp bên trong cũng chứa 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
Tôi nghĩ rằng chúng ta đang nói về các yếu tố khối nội tuyến có thể có chiều rộng và chiều cao. Hãy tưởng tượng một div với một hình ảnh nền mà bạn muốn chảy nội tuyến với văn bản.
NexusRex

6

ok, đối với tôi:

<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

Tôi sẽ sử dụng nhịp hoặc nổi div trái. Vấn đề duy nhất với việc nổi là bạn phải xóa float sau đó hoặc div chứa phải có kiểu tràn được đặt thành tự động


Tôi tin rằng chúng ta đang nói về một div nội tuyến với văn bản hoặc khác, không trôi nổi sang một bên.
NexusRex

Khi sử dụng float: left, với overflow: auto trên div chứa, làm thế nào / khi nào thanh cuộn mà tràn có thể phát huy tác dụng?
cellepo

3

Tôi biết mọi người nói rằng đây là một ý tưởng tồi tệ, nhưng thực tế nó có thể hữu ích nếu bạn muốn làm một cái gì đó như hình ảnh gạch với các bình luận bên dưới chúng. ví dụ Picasaweb sử dụng nó để hiển thị hình thu nhỏ trong album.
Xem ví dụ / demo http://closure-library.googlecode.com/svn/trunk/closure/goog/demos/inline_block_quirks.html (lớp goog-inline-block; Tôi viết tắt nó để IB ở đây)

/* 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; }

Cho CSS đó, đặt div của bạn thành lớp ib và bây giờ, nó là một phần tử khối nội tuyến kỳ diệu.


3

Bạn cần phải chứa ba div. Đây là một ví dụ:

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;
}

Lưu ý: thuộc tính bán kính đường viền là tùy chọn và chỉ hoạt động trong các trình duyệt tuân thủ CSS3.

HTML

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

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

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

Lưu ý rằng các div 'foo' 'bar' và 'baz' đều được giữ trong div 'chứa'.


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

Tôi nghĩ bạn có thể sử dụng cách này mà không cần sử dụng bất kỳ css nào -

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

Ngay bây giờ bạn đang sử dụng phần tử cấp khối theo cách bạn đang nhận được kết quả không mong muốn. Vì vậy, bạn có thể bạn yếu tố nội tuyến như span, nhỏ, vv

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

0

chúng ta có thể làm điều này như thế

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

0
<div class="cdiv">
<div class="inline"><p>para 1</p></div>
 <div class="inline">
     <p>para 1</p>
     <span>para 2</span>
     <h1>para 3</h1>
</div>
 <div class="inline"><p>para 1</p></div>

http://jsfiddle.net/f8L0y5wx/


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

Tôi chỉ có xu hướng làm cho chúng có chiều rộng cố định để chúng cộng với tổng chiều rộng của trang - có thể chỉ hoạt động nếu bạn đang sử dụng trang có chiều rộng cố định. Cũng "nổi".

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.