คุณสามารถสร้างเลย์เอาต์ HTML นี้โดยไม่ใช้ตารางได้หรือไม่?


102

โอเคฉันมีปัญหาการจัดวางง่ายๆเมื่อหนึ่งหรือสองสัปดาห์ก่อน ส่วนต่างๆของหน้าที่ต้องการส่วนหัว:

+---------------------------------------------------------+
| Title                                            Button |
+---------------------------------------------------------+

สิ่งที่ค่อนข้างเรียบง่าย สิ่งนี้คือความเกลียดชังตารางดูเหมือนจะถูกครอบงำในโลกของเว็บซึ่งฉันได้รับการเตือนเมื่อถามว่าทำไมต้องใช้แท็กรายการคำจำกัดความ (DL, DD, DT) สำหรับรูปแบบ HTML แทนตาราง ตอนนี้หัวข้อทั่วไปของตารางเทียบกับ divs / CSS ได้รับการกล่าวถึงก่อนหน้านี้เช่น:

ดังนั้นนี่จึงไม่ได้มีไว้เพื่อการสนทนาทั่วไปเกี่ยวกับ CSS เทียบกับตารางสำหรับเลย์เอาต์ นี่เป็นเพียงวิธีแก้ปัญหาเดียว ฉันลองใช้วิธีแก้ปัญหาต่างๆข้างต้นโดยใช้ CSS ได้แก่ :

  • ลอยไปทางขวาสำหรับปุ่มหรือ div ที่มีปุ่ม
  • ตำแหน่งที่สัมพันธ์กันสำหรับปุ่ม และ
  • ตำแหน่งสัมพัทธ์ + ค่าสัมบูรณ์

ไม่มีวิธีแก้ปัญหาใดที่น่าพอใจด้วยเหตุผลที่แตกต่างกัน ตัวอย่างเช่นการวางตำแหน่งสัมพัทธ์ทำให้เกิดปัญหาดัชนี z ที่เมนูแบบเลื่อนลงของฉันปรากฏขึ้นใต้เนื้อหา

ดังนั้นฉันจึงกลับไปที่:

<style type="text/css">
.group-header { background-color: yellow; width: 100%; }
.group-header td { padding: 8px; }
.group-title { text-align: left; font-weight: bold; }
.group-buttons { text-align: right; }
</style>
<table class="group-header">
<tr>
  <td class="group-title">Title</td>
  <td class="group-buttons"><input type="button" name="Button"></td>
</tr>
</table>

และทำงานได้อย่างสมบูรณ์ เป็นเรื่องง่ายที่เข้ากันได้แบบย้อนหลังเท่าที่จะทำได้ (ซึ่งอาจใช้งานได้แม้ใน IE5) และใช้งานได้จริง ไม่ยุ่งเกี่ยวกับการวางตำแหน่งหรือการลอยตัว

ใครสามารถเทียบเท่าโดยไม่มีตาราง?

ข้อกำหนดคือ:

  • เข้ากันได้ย้อนหลัง:ถึง FF2 และ IE6;
  • สอดคล้องกันอย่างสมเหตุสมผล:ในเบราว์เซอร์ต่างๆ
  • กึ่งกลางแนวตั้ง:ปุ่มและชื่อเรื่องมีความสูงต่างกัน และ
  • ยืดหยุ่น:ช่วยให้สามารถควบคุมตำแหน่ง (ช่องว่างภายในและ / หรือระยะขอบ) และการจัดแต่งทรงผมได้อย่างแม่นยำพอสมควร

ในบันทึกด้านข้างฉันเจอบทความที่น่าสนใจสองสามบทความในวันนี้:

แก้ไข:ให้ฉันอธิบายรายละเอียดเกี่ยวกับปัญหาการลอยตัว งานประเภทนี้:

<html>
  <head>
    <title>Layout</title>
    <style type="text/css">
      .group-header, .group-content { width: 500px; margin: 0 auto; }
      .group-header { border: 1px solid red; background: yellow; overflow: hidden; }
      .group-content { border: 1px solid black; background: #DDD; }
      .group-title { float: left; padding: 8px; }
      .group-buttons { float: right; padding: 8px; }
    </style>
  </head>
  <body>
    <div class="group-header">
      <div class="group-title">This is my title</div>
      <div class="group-buttons"><input type="button" value="Collapse"></div>
    </div>
    <div class="group-content">
      <p>And it works perfectly. It's simple, as backward compatibile as it gets (that'll work probably even on IE5) and it just works. No messing about with positioning or floats.</p>
      <p>So can anyone do the equivalent without tables that is backwards compatible to at least FF2 and IE6?</p>
      <p>On a side note, I came across a couple of interesting articles today:</p>
    </div>
  </body>
</html>

ขอบคุณAnt Pสำหรับoverflow: hiddenส่วนนี้ (ยังไม่เข้าใจว่าทำไม) นี่คือจุดเริ่มต้นของปัญหาสมมติว่าฉันต้องการให้ชื่อและปุ่มอยู่ตรงกลางในแนวตั้ง นี่เป็นปัญหาเนื่องจากองค์ประกอบมีความสูงต่างกัน เปรียบเทียบสิ่งนี้กับ:

<html>
  <head>
    <title>Layout</title>
    <style type="text/css">
      .group-header, .group-content { width: 500px; margin: 0 auto; }
      .group-header { border: 1px solid red; background: yellow; overflow: hidden; }
      .group-content { border: 1px solid black; background: #DDD; }
      .group-header td { vertical-align: middle; }
      .group-title { padding: 8px; }
      .group-buttons { text-align: right; }
    </style>
  </head>
  <body>
    <table class="group-header">
    <tr>
      <td class="group-title">This is my title</td>
      <td class="group-buttons"><input type="button" value="Collapse"></td>
    </tr>
    </table>
    <div class="group-content">
      <p>And it works perfectly. It's simple, as backward compatibile as it gets (that'll work probably even on IE5) and it just works. No messing about with positioning or floats.</p>
      <p>So can anyone do the equivalent without tables that is backwards compatible to at least FF2 and IE6?</p>
      <p>On a side note, I came across a couple of interesting articles today:</p>
    </div>
  </body>
</html>

ซึ่งทำงานได้อย่างสมบูรณ์แบบ


11
โอเคเข้าท่า "ฉันควรใช้สีอะไรสำหรับกลุ่ม" ได้รับการโหวตขึ้นปัญหาการจัดวาง CSS เฉพาะของฉันได้รับการโหวตลดลง
cletus


คุณสามารถทำอะไรก็ได้ที่คุณต้องการโดยไม่มีโต๊ะไม่ว่าในกรณีใด ๆ ทำไมในนรก @SamB กระแทกคำถาม 2 ปีนี้? DOH +
ไดนามิก

3
@ yes123: อืมการเน้นไวยากรณ์ผิด ...
SamB

คำตอบ:


50

ไม่มีอะไรผิดในการใช้เครื่องมือที่มีให้คุณทำงานได้อย่างรวดเร็วและถูกต้อง

ในกรณีนี้ตารางทำงานได้อย่างสมบูรณ์

ฉันเองจะใช้ตารางนี้

ฉันคิดว่าควรหลีกเลี่ยงโต๊ะที่ซ้อนกันอาจทำให้ยุ่งได้


21
ยกเว้นเมื่อคุณใช้ตารางสำหรับเค้าโครงการนำเสนอแทนที่จะเป็นข้อมูลแบบตารางเพียงเพราะมันง่ายกว่าในตอนแรกซีดซึ่งในกรณีนี้คุณกำลังมุ่งหน้าไปในเส้นทางที่มืดมิดและอันตราย
One Crayon

9
แม้แต่ Amazon ก็ใช้ตารางในบางกรณี และ stackoverflow.com ก็เช่นกัน ฉันทั้งหมดสำหรับโซลูชัน css เมื่อพวกเขาทำงานได้ดี
Nosredna

11
ไม่ว่าจะเป็น Amazon แต่ตอนนี้ stackoverflow เป็นจุดยอดเยี่ยมของการออกแบบเว็บ
Bobby Jack

31
อาจไม่ใช่ แต่เป็นโซลูชันการทำงานที่ให้บริการผู้ใช้หลายหมื่นคน
17 จาก 26

22
มส์ต่อต้านตารางนี้เป็นเพียงเรื่องโง่ ๆ ธรรมดา ๆ ตัวจัดการเลย์เอาต์ 2 มิติเพียงตัวเดียวสำหรับ laout ตามข้อ จำกัด ที่ยืดหยุ่นคือตาราง และไม่ว่ามันจะซับซ้อนเพียงอันเดียว (ที่มี col / rowspans มากมาย) หรือสิ่งที่ซ้อนกันจะสร้างความแตกต่างเพียงเล็กน้อย แต่ความจริงและข้อเท็จจริงไม่ใช่อาวุธที่ดีพอที่จะต่อต้านความกระตือรือร้นได้เสมอไป
StaxMan

28

เพียงแค่ลอยไปทางซ้ายและขวาและตั้งค่าให้เคลียร์ทั้งคู่เท่านี้ก็เสร็จแล้ว ไม่จำเป็นต้องมีโต๊ะ

แก้ไข:ฉันรู้ว่าฉันได้รับคะแนนโหวตเพิ่มขึ้นมากมายและฉันเชื่อว่าฉันคิดถูก แต่มีบางกรณีที่คุณต้องมีโต๊ะ คุณสามารถลองทำทุกอย่างด้วย CSS และมันจะทำงานในเบราว์เซอร์ที่ทันสมัย แต่ถ้าคุณต้องการที่จะสนับสนุนคนเก่า ... ไม่ได้ที่จะทำซ้ำตัวเองที่นี่ด้ายแตกล้นที่เกี่ยวข้องและพูดจาโผงผางบนบล็อกของฉัน

แก้ไข 2:เนื่องจากเบราว์เซอร์รุ่นเก่าไม่น่าสนใจอีกต่อไปฉันจึงใช้ Twitter bootstrap สำหรับโครงการใหม่ เหมาะสำหรับความต้องการการจัดวางส่วนใหญ่และใช้ CSS


2
ไม่จัดการการจัดกึ่งกลางแนวตั้งดังนั้น -1
SamB

1
ฉันมีปัญหาที่คล้ายกันซึ่งฉันมีโลโก้ทางด้านซ้ายและเมนูข้อความทางด้านขวา เมนูต่างๆจะต้องถูกจัดวางบนเส้นฐานของโลโก้ การใช้ float: ถูกต้องสำหรับเมนูไม่ทำงาน ส่งไปที่มุมขวาบนและไม่ได้อยู่ในแนวตั้งตรงกับเส้นฐานของโลโก้อีกต่อไป
Jean-François Beauchamp

1
ฉันคิดว่าคุณสามารถแก้ปัญหาการจัดกึ่งกลางแนวตั้งได้โดยตั้งค่าความสูงของบรรทัดของ Title ให้เท่ากับความสูงของปุ่ม
อิก

1
@igors +1 คุณพูดถูก โปรดทราบว่าคำถามนี้มาจากปี 2009;)
Milan Babuškov

17

นี่เป็นคำถามหลอกลวง: มันดูเรียบง่ายมากจนกว่าคุณจะไปถึง

สมมติว่าฉันต้องการให้ชื่อและปุ่มอยู่ตรงกลางในแนวตั้ง

ฉันต้องการระบุให้บันทึกว่าใช่การจัดกึ่งกลางแนวตั้งเป็นเรื่องยากใน CSS เมื่อมีคนโพสต์และดูเหมือนไม่มีที่สิ้นสุดใน SO "คุณทำ X ใน CSS ได้ไหม" คำตอบคือ "ใช่" เกือบตลอดเวลาและการแส้ของพวกเขาดูเหมือนไม่ยุติธรรม ในกรณีนี้ใช่ว่าสิ่งใดสิ่งหนึ่งจะยาก

ใครบางคนควรแก้ไขคำถามทั้งหมดเป็น "การจัดกึ่งกลางแนวตั้งมีปัญหาใน CSS หรือไม่"


11
นั่นเป็นปัญหาของฉันกับอาร์กิวเมนต์ "ผู้เกลียดชังตาราง": CSS สามารถทำทุกอย่างที่ตารางทำได้ ... ยกเว้นกรณีที่ค่อนข้างเรียบง่ายธรรมดาและสมเหตุสมผล (เช่นการจัดกึ่งกลางแนวตั้ง) CSS ดูเหมือนว่าสัญญาการเลือกตั้งจะไม่ดี
cletus

4
ประเด็นของฉันคือการจัดกึ่งกลางแนวตั้งเป็นเพียงสิ่งเดียวที่ยากจริงๆ
AmbroseChapel

3
CSS ไม่ได้มีไว้เพื่อแทนที่ตาราง มีไว้เพื่อให้คุณสามารถแก้ปัญหาเค้าโครงทั่วไปส่วนใหญ่โดยไม่มีตารางได้ ถ้าโต๊ะทำงานได้ให้ใช้โต๊ะเช่นเดียวกับที่คุณใช้ปากกาวาดแทนค้อนเลื่อน
Aaron Digulla

16

ชื่อลอยซ้าย, ปุ่มลอยขวาและ (ที่นี่เป็นส่วนหนึ่งที่ผมไม่เคยรู้จนกระทั่งเมื่อเร็ว ๆ ) - {overflow:hidden}ให้ภาชนะของเขาทั้งสอง

นั่นควรหลีกเลี่ยงปัญหา z-index อยู่ดี หากไม่ได้ผลและคุณต้องการการสนับสนุน IE5 จริงๆให้ใช้ตารางต่อไป


+1 โอ้โฮมีอะไรซ่อนอยู่ มันสร้างความแตกต่าง ไม่รู้ว่าทำไม
cletus

พูดตามตรงฉันไม่เข้าใจเหมือนกันและไม่พบการกล่าวถึงในข้อมูลจำเพาะ มีคนบอกฉันว่านั่นเป็นวิธีที่ "ถูกต้อง" หลังจากที่ฉันตอบคำถามอื่นที่แนะนำว่าพวกเขาใช้องค์ประกอบที่ชัดเจนในการทำ ดูเหมือนเป็นความคิดที่ดีสำหรับฉัน

องค์ประกอบที่ลอยยังคงต้องได้รับการล้างเพื่อให้เนื้อหาที่ตามมาไหลได้อย่างถูกต้อง ล้น: ซ่อน; ระบุเฉพาะความสูงของภาชนะ
Zack The Human

2
"overflow: hidden" คือการแฮ็กเพื่อให้ได้ 'การขยายตัว' และการล้างความสูงทั้งสอง องค์ประกอบต่อไปนี้จะล้างกล่องนั้น (ในเบราว์เซอร์ที่ใช้ส่วนนั้นของข้อมูลจำเพาะอย่างถูกต้องอย่างน้อยที่สุด)
Bobby Jack

1
-1 สำหรับไม่จัดการศูนย์กลางแนวตั้ง แต่ +2 สำหรับoverflow:hidden.
SamB

7

ในบริสุทธิ์ CSS, "display:table-cell"คำตอบที่ทำงานวันหนึ่งจะไปใช้เพียง น่าเสียดายที่ใช้ไม่ได้กับเบราว์เซอร์เกรด A ในปัจจุบันดังนั้นสำหรับทุกสิ่งที่คุณอาจใช้ตารางหากคุณต้องการให้ได้ผลลัพธ์เดียวกัน อย่างน้อยคุณจะมั่นใจได้ว่ามันใช้งานได้ดีพอในอดีต

สุจริตเพียงแค่ใช้ตารางถ้ามันง่ายกว่า มันจะไม่เจ็บ

หากความหมายและความสามารถในการเข้าถึงขององค์ประกอบตารางมีความสำคัญต่อคุณจริงๆมีแบบร่างที่ใช้งานได้เพื่อทำให้ตารางของคุณไม่ใช่ความหมาย:

http://www.w3.org/TR/wai-aria/#presentation

ผมคิดว่านี่ต้องใช้ DTD พิเศษเกิน XHTML 1.1 ซึ่งจะเพียงสะเทือนทั้งtext/htmlVS application/xmlการอภิปรายเพื่อให้ได้ไปที่นั่น

ดังนั้นปัญหา CSS ที่ยังไม่ได้แก้ไขของคุณ ...

ในการจัดองค์ประกอบสององค์ประกอบในแนวตั้งให้อยู่ตรงกลาง: สามารถทำได้หลายวิธีด้วยการแฮ็กเกอร์ CSS แบบป้าน

หากคุณสามารถทำตามข้อ จำกัด ต่อไปนี้ได้มีวิธีที่ค่อนข้างง่าย:

  • ความสูงของทั้งสององค์ประกอบได้รับการแก้ไข
  • ความสูงของภาชนะได้รับการแก้ไข
  • องค์ประกอบจะแคบพอที่จะไม่ทับซ้อนกัน (หรือสามารถตั้งค่าเป็นความกว้างคงที่)

จากนั้นคุณสามารถใช้การวางตำแหน่งสัมบูรณ์ด้วยระยะขอบลบ:

.group-header { height: 50px; position: relative; }
.group-title, .group-buttons { position: absolute; top: 50%; }
# Assuming the height of .group-title is a known 34px
.group-title { left: 0; margin-top: -17px; }
# Assuming the height of .group-buttons is a known 38px
.group-buttons { right: 0; margin-top: -19px; }

แต่สิ่งนี้ไม่มีจุดหมายในสถานการณ์ส่วนใหญ่ ... หากคุณทราบความสูงขององค์ประกอบแล้วคุณสามารถใช้การลอยตัวและเพิ่มระยะขอบให้เพียงพอเพื่อจัดตำแหน่งได้ตามต้องการ

นี่เป็นอีกวิธีหนึ่งที่ใช้พื้นฐานของข้อความเพื่อจัดแนวคอลัมน์ทั้งสองในแนวตั้งเป็นบล็อกแบบอินไลน์ ข้อเสียคือคุณต้องตั้งค่าความกว้างคงที่สำหรับคอลัมน์เพื่อเติมเต็มความกว้างจากขอบด้านซ้าย เนื่องจากเราจำเป็นต้องล็อคองค์ประกอบไว้เป็นเส้นฐานของข้อความเราจึงไม่สามารถใช้ float: เหมาะสำหรับคอลัมน์ที่สองได้ (แต่เราต้องทำให้คอลัมน์แรกกว้างพอที่จะดันเข้าไปได้)

<html>
  <head>
    <title>Layout</title>
    <style type="text/css">
      .group-header, .group-content { width: 500px; margin: 0 auto; }
      .group-header { border: 1px solid red; background: yellow; }
      .valign { display: inline-block; vertical-align: middle; }
      .group-content { border: 1px solid black; background: #DDD; }
      .group-title { padding: 8px; width: 384px; }
      .group-buttons { padding: 8px; width: 84px; text-align: right; }
    </style>
    <!--[if lt IE 8]>
    <style type="text/css">
      .valign { display: inline; margin-top: -2px; padding-top: 1px; }
    </style>
    <![endif]-->
  </head>
  <body>
    <div class="group-header">
      <div class="valign">
        <div class="group-title">This is my title.</div>
      </div><!-- avoid whitespace between these! --><div class="valign">
        <div class="group-buttons"><input type="button" value="Collapse"></div>
      </div>
    </div>
    <div class="group-content">
      <p>And it works perfectly, but mind the hacks.</p>
    </div>
  </body>
</html>

HTML:เราเพิ่ม. Valign Wrapper รอบ ๆ แต่ละคอลัมน์ (ตั้งชื่อ "ความหมาย" ให้พวกเขามากกว่านี้ถ้ามันทำให้คุณมีความสุขมากขึ้น) สิ่งเหล่านี้จำเป็นต้องเก็บไว้โดยไม่มีช่องว่างระหว่างช่องข้อความไม่เช่นนั้นจะทำให้พวกเขาแยกออกจากกัน (ฉันรู้ว่ามันแย่ แต่นั่นคือสิ่งที่คุณได้รับจากการ "บริสุทธิ์" ด้วยการมาร์กอัปและแยกมันออกจากเลเยอร์การนำเสนอ ... ฮา!)

CSS:เราใช้vertical-align:middleเพื่อจัดเรียงบล็อกตามเส้นฐานข้อความขององค์ประกอบส่วนหัวของกลุ่ม ความสูงที่แตกต่างกันของแต่ละบล็อกจะอยู่ตรงกลางในแนวตั้งและดันความสูงของคอนเทนเนอร์ออกไป ต้องคำนวณความกว้างขององค์ประกอบให้พอดีกับความกว้าง นี่คือ 400 และ 100 ลบด้วยช่องว่างในแนวนอน

การแก้ไข IE: Internet Explorer จะแสดงเฉพาะอินไลน์บล็อกสำหรับองค์ประกอบอินไลน์เนทีฟ (เช่นสแปนไม่ใช่ div) แต่ถ้าเราให้ div hasLayout แล้วแสดงแบบอินไลน์มันจะทำงานเหมือนกับอินไลน์บล็อก การปรับระยะขอบคือการแก้ไขช่องว่าง 1px ที่ด้านบน (ลองเพิ่มสีพื้นหลังใน. group-title เพื่อดู)


1
อืมการแสดงผล: แท็ก table-X ดูเหมือนจะมีจุดประสงค์เพื่อทำเค้าโครงโดยใช้ตารางโดยไม่ใช้แท็กตารางเท่านั้น?
Danubian Sailor

3

ฉันไม่แนะนำให้ใช้ตารางในกรณีนี้เนื่องจากไม่ใช่ข้อมูลแบบตาราง เป็นการนำเสนออย่างหมดจดที่จะมีปุ่มอยู่ที่ด้านขวาสุด นี่คือสิ่งที่ฉันทำเพื่อทำซ้ำโครงสร้างตารางของคุณ (เปลี่ยนเป็น H # อื่นเพื่อให้เหมาะกับตำแหน่งที่คุณอยู่ในลำดับชั้นของไซต์ของคุณ):

<style>
  .group-header { background: yellow; zoom: 1; padding: 8px; }
  .group-header:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
  /* set width appropriately to allow room for button */
  .group-header h3 { float: left; width: 300px; }
  /* set line-height or margins to align with h3 baseline or middle */
  .group-header input { float: right; }
</style>

<div class="group-header">
  <h3>This is my title</h3>
  <input type="button" value="Collapse"/>
</div>

หากคุณต้องการจัดตำแหน่งแนวตั้งที่แท้จริงตรงกลาง (กล่าวคือถ้าข้อความที่ตัดปุ่มยังคงอยู่ตรงกลางตามข้อความทั้งสองบรรทัด) คุณต้องทำตารางหรือทำงานบางอย่างด้วยposition: absoluteและระยะขอบ คุณสามารถเพิ่มposition: relativeลงในเมนูแบบเลื่อนลงของคุณ (หรือมีแนวโน้มว่าจะเป็นพาเรนต์) เพื่อดึงให้อยู่ในระดับการสั่งซื้อเดียวกันกับปุ่มทำให้คุณสามารถชนปุ่มดังกล่าวข้างบนด้วยดัชนี z ได้หากเป็นเช่นนั้น

โปรดทราบว่าคุณไม่จำเป็นต้องwidth: 100%ใช้ div เนื่องจากเป็นองค์ประกอบระดับบล็อกและzoom: 1ทำให้ div ทำงานเหมือนมี clearfix ใน IE (เบราว์เซอร์อื่น ๆ จะรับ clearfix จริง) นอกจากนี้คุณยังไม่จำเป็นต้องมีคลาสที่ไม่เกี่ยวข้องทั้งหมดเหล่านี้หากคุณกำหนดเป้าหมายสิ่งต่างๆให้เฉพาะเจาะจงมากขึ้นแม้ว่าคุณอาจต้องใช้ wrapper div หรือขยายบนปุ่มเพื่อให้วางตำแหน่งได้ง่ายขึ้น


โซลูชันของคุณไม่ทำงานบน IE6 แม้ว่าจะเป็นเพราะ: after pseudo-class
Sebastian Hoitz

1
มันใช้งานได้ใน IE 6 ต้องขอบคุณzoom: 1อิน.group-headerซึ่งทริกเกอร์ hasLayout และทำให้ IE 6 ทำงานเหมือนกับว่ามันมีองค์ประกอบ: after ที่ใช้งานอยู่
One Crayon

2

ทำ double float ใน div และใช้ clearfix http://www.webtoolkit.info/css-clearfix.html คุณมีข้อ จำกัด ด้านการขยาย / ระยะขอบหรือไม่?

<div class="clearfix">
   <div style="float:left">Title</div>
   <input type="button" value="Button" style="float:right" />
</div>

ฉันมีข้อกำหนดตรงกลางแนวตั้ง (และช่องว่างเพิ่มเติมเล็กน้อย) ฉันคิดว่าฉันชี้แจงว่าหลังจากที่คุณโพสต์แล้ว
cletus


1

ฉันเลือกใช้ Flexbox เพราะมันทำให้สิ่งต่างๆง่ายขึ้นมาก

โดยพื้นฐานแล้วคุณต้องไปหาผู้ปกครองของเด็กที่คุณต้องการจัดตำแหน่งและเพิ่มdisplay:box(แน่นอนว่าต้องมีคำนำหน้า) จะทำให้พวกเขานั่งอยู่ในด้านการใช้ปรับเนื้อหา ช่องว่างระหว่างเป็นสิ่งที่ถูกต้องเมื่อคุณมีองค์ประกอบที่ต้องจัดให้ชิดกันเช่นในกรณีนี้ (ดูลิงค์) ...

จากนั้นปัญหาการจัดแนวตามแนวตั้ง เนื่องจากฉันสร้างพาเรนต์ของทั้งสององค์ประกอบคุณจึงต้องการจัดแนว Flexbox align-items: centerมันเป็นเรื่องง่ายในขณะนี้เพื่อการใช้งาน

จากนั้นฉันเพิ่มสไตล์ที่คุณต้องการก่อนหน้านี้ลบลอยออกจากชื่อและปุ่มในส่วนหัวและเพิ่มช่องว่างภายใน:

.group-header, .group-content {
    width: 500px;
    margin: 0 auto;
}
.group-header{
    border: 1px solid red;
    background: yellow;
    overflow: hidden;
    display: -webkit-box;
    display: -moz-box;
    display: box;
    display: -webkit-flex;
    display: -moz-flex;
    display: -ms-flexbox;
    display: flex;
    -webkit-justify-content: space-between;
    -moz-justify-content: space-between;
    -ms-justify-content: space-between;
    -o-justify-content: space-between;
    justify-content: space-between;
    webkit-align-items: center;
    -moz-align-items: center;
    -ms-align-items: center;
    -o-align-items: center;
    align-items: center;
    padding: 8px 0;
}
.group-content{
    border: 1px solid black;
    background: #DDD;
}
.group-title {
    padding-left: 8px;
}
.group-buttons {
    padding-right: 8px
}

ดูการสาธิต


1

ฉันยอมรับว่าควรใช้ตารางสำหรับข้อมูลแบบตารางเท่านั้นด้วยเหตุผลง่ายๆที่ตารางจะไม่แสดงจนกว่าจะโหลดเสร็จ (ไม่ว่าจะเร็วแค่ไหนวิธี CSS จะช้ากว่า) อย่างไรก็ตามฉันรู้สึกว่านี่เป็นวิธีที่ง่ายและสง่างามที่สุด:

<html>
    <head>
        <title>stack header</title>
        <style type="text/css">
            #stackheader {
                background-color: #666;
                color: #FFF;
                width: 410px;
                height: 50px;
            }
            #title {
                color: #FFF;
                float: left;
                padding: 15px 0 0 15px;
            }
            #button {
                color: #FFF;
                float: right;
                padding: 15px 15px 0 0;
            }
        </style>
    </head>

    <body>
        <div id="stackheader">
        <div id="title">Title</div>
        <div id="button">Button</div>
        </div>
    </body>
</html>

ฟังก์ชั่นปุ่มและรายละเอียดเพิ่มเติมสามารถกำหนดสไตล์ได้จากรูปแบบพื้นฐานนี้ ขออภัยสำหรับแท็กที่ไม่ดี

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.