วิธีลบการเยื้องออกจากรายการไม่มีการเรียงลำดับ?


260

ฉันต้องการลบการเยื้องออกจากulทั้งหมด ฉันพยายามตั้งmargin, padding, text-indentไป0แต่ไม่มีประโยชน์ ดูเหมือนว่าการตั้งค่าtext-indentเป็นจำนวนลบเป็นการหลอกลวง แต่นั่นเป็นวิธีเดียวที่จะลบการเยื้องได้หรือไม่


ยากที่จะพูดออกโดยไม่ใช้ HTML & CSS ของคุณ แต่การใช้ CSS Reset / Normalize ประกอบด้วยกฎ ul {padding: 0; margin: 0;} ทำการหลอกลวงในกรณีส่วนใหญ่ ฉันแน่ใจว่าการเยื้องข้อความไม่มีส่วนเกี่ยวข้องกับมัน
Jawad

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

6
"ใช้งานไม่ได้และไม่สามารถใช้การรีเซ็ต CSS การเปลี่ยนแปลงของฉันเป็นส่วนหนึ่งของเฟรมเวิร์กยักษ์ที่มีคนทำงานมากกว่า 60 คนฮ่าฮ่า" - ฮ่าฮ่าแน่นอน กว่าที่คุณไม่ได้ถามคำถามของคุณอย่างชัดเจน!
Jawad

คำตอบ:


416

กำหนดรูปแบบรายการและแพ็ดดิงด้านซ้ายเป็นอะไร

ul {
    list-style: none;
    padding-left: 0;
}​

เพื่อรักษากระสุนคุณสามารถแทนที่list-style: noneด้วย list-style-position: insideหรือจดชวเลขlist-style: inside:

ul {
  list-style-position: inside;
  padding-left: 0;
}


18
คุณสามารถลบการเยื้องและเก็บหมายเลข / สัญลักษณ์แสดงหัวข้อย่อยโดย: ul {list-style-position: inside; padding-left: 0;}
Myforwik

4
ทีนี้เมื่อคุณแก้ไขคำตอบแล้วกระสุนยังคงอยู่ แต่ยังคงมีปัญหาที่ <li> ของบรรทัดข้อความหลายบรรทัดไม่ถูกต้องเยื้องทุกบรรทัด ในที่สุดคุณก็สามารถแก้ไขได้ในที่สุด : D
Jpsy

โซลูชันที่สองที่ช่วยให้ bullet ไม่ทำงานอีกต่อไป (Chrome 55 บน Windows) ทางเลือกใด?
Tom Pažourek

2
@ TomPažourekลองlist-style-position: outside; padding-left: 1em;ที่<ul>
j08691

1
@ j08691: ใช่มันใช้งานได้แม้ว่า1emมันจะมีคุณค่าวิเศษ ... และจริง ๆ แล้วยังคงมีการเยื้องเล็กน้อย
Tom Pažourek

93

โซลูชันที่ฉันต้องการลบ <ul> การเยื้องเป็น CSS แบบครั้งเดียวง่าย ๆ :

ul { padding-left: 1.2em; }
<p>A leading line of paragraph text</p>
<ul>
    <li>Bullet points align with paragraph text above.</li>
    <li>Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. Long list items wrap around correctly. </li>
    <li>List item 3</li>
</ul>
<p>A trailing line of paragraph text</p>

โซลูชันนี้ไม่เพียงมีน้ำหนักเบา แต่มีข้อดีหลายประการ:

  • มันจัดเรียงสัญลักษณ์ของ <ul> ให้ตรงกับข้อความในย่อหน้าปกติรอบข้าง (= เยื้องการลบ <ul>)
  • บล็อกข้อความในองค์ประกอบ <li> ยังคงถูกเยื้องอย่างถูกต้องหากล้อมรอบเป็นหลายบรรทัด

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

    ul { margin-left: 1.2em; }

ฉันอธิบายปัญหาทั้งหมดแล้วในการโพสต์ของฉัน @aioobe แต่ที่นี่อีกครั้ง: คำตอบที่ยอมรับได้ (สถานะ ณ ตอนนี้เพราะหลังจากที่โพสต์ต้นฉบับของฉันได้รับการแก้ไขหลายครั้งเพื่อปรับปรุง) ตอนนี้รักษาสัญลักษณ์แสดงหัวข้อย่อย (ถ้าคุณใช้ตัวอย่างที่สองที่ได้รับ) แต่มันไม่ถูกต้อง ข้อความ นี่คือไวโอลินของตัวอย่างที่สองของคำตอบที่ได้รับการยอมรับการปรับเปลี่ยนเพื่อแสดงผลที่: jsfiddle.net/v6nyuq6f/88และนี่ก็เป็นซอเดียวกันการแก้ไขด้วยวิธีการของฉัน: jsfiddle.net/v6nyuq6f/89
Jpsy

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

เพื่อความปลอดภัย:ul { padding-left:1.2em; margin-left: 0; }
Andrew Murphy

1
ทางออกเดียวในหน้านี้ซึ่งทำงานได้อย่างถูกต้องกับรายการแบบยาว (ห่ออย่างถูกต้อง) - ขอบคุณ!
FredyWenger

8

เพิ่มลงใน CSS ของคุณ:

ul { list-style-position: inside; }

สิ่งนี้จะวางองค์ประกอบ li ในเยื้องเดียวกับย่อหน้าและข้อความอื่น ๆ

Ref: http://www.w3schools.com/cssref/pr_list-style-position.asp


6
บน <li> ที่มีบรรทัดข้อความหลายบรรทัดให้list-style-position: insideจัดแนวข้อความของบรรทัดที่สองและบรรทัดต่อไปนี้ทั้งหมดด้วยสัญลักษณ์แสดงหัวข้อย่อย สิ่งนี้ไม่เป็นที่ต้องการแน่นอน
Jpsy



4

คุณสามารถให้ลิงค์หรือไม่ ขอบคุณฉันดูได้มากที่สุดตัวเลือก css ของคุณไม่แข็งแรงพอหรือคุณลองได้

padding:0!important;


1
ไม่จำเป็นต้องใช้มิติข้อมูลเมื่อระบุ 0.
raam86

11
!importantis EVIL
Madbreaks

@Madbreaks มันสามารถทำงานได้ถ้าตัวเลือกเป็นตัวที่ถูกต้องและการใช้ case นั้นถูกต้อง แต่ prob ขวาของคุณไม่ใช่อันนี้บางทีในกรณีนี้อาจมีกฎ css หลักที่ต้องถูกแทนที่ด้วยการเปลี่ยนไฟล์ฐานดังนั้นมันจึงเหลือ ตรึงเหมือนไม่แฮ็คคอร์? ฉันไม่รู้บางทีฉันผิด
naeluh

4

ฉันมีปัญหาเดียวกันกับส่วนท้ายที่ฉันพยายามแบ่ง ฉันพบว่าสิ่งนี้ได้ผลกับฉันโดยลองใช้ข้อเสนอแนะสองสามข้อที่รวมกัน

footer div ul {
    list-style-position: inside;
    padding-left: 0;
}

นี่ดูเหมือนจะเก็บไว้ทางซ้ายภายใต้ h1 ของฉันและสัญลักษณ์แสดงหัวข้อย่อยภายใน div แทนที่จะออกไปทางซ้าย


3

การสาธิตสด: https://jsfiddle.net/h8uxmoj4/

ol, ul {
  padding-left: 0;
}

li {
  list-style: none;
  padding-left: 1.25rem;
  position: relative;
}

li::before {
  left: 0;
  position: absolute;
}

ol {
  counter-reset: counter;
}

ol li::before {
  content: counter(counter) ".";
  counter-increment: counter;
}

ul li::before {
  content: "●";
}

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

  • จัดแนวรายการกระสุนด้วยข้อความย่อหน้านอก
  • จัดหลายบรรทัดภายในรายการเดียวกัน

ฉันต้องการโซลูชันที่ไม่พึ่งพาเบราว์เซอร์ที่ยอมรับว่าใช้ช่องว่างภายในเท่าใด ฉันได้เพิ่มรายการที่เรียงลำดับแล้วเพื่อความสมบูรณ์


-1

ทำแบบอินไลน์นี้ฉันตั้งระยะขอบเป็น 0 (ul style = "margin: -0px") สัญลักษณ์แสดงหัวข้อย่อยสอดคล้องกับย่อหน้าโดยไม่มีสิ่งที่แขวนอยู่


ฉันไม่เข้าใจว่าทำไมคุณถึงถูกลงคะแนนเสียงนอกเหนือจากเครื่องหมายลบหน้าศูนย์ ฉันลองสิ่งนี้บน Google Chrome และทำงานได้ในขณะที่วิธีแก้ปัญหาซ้าย: 0 ไม่ได้ นี่คือใน Google Chrome เวอร์ชัน 79.0.3945.88 WinX, 64 บิต
MrPotato เฮด

การเพิ่มความคิดเห็นของฉันด้านบน ... เนื่องจากฉันไม่สามารถแก้ไขได้ ... ฉันเล่นกับสิ่งนี้อีกเล็กน้อยและใน Firefox ล่าสุด (71.0) พฤติกรรมนั้นเหมือนกัน อย่างไรก็ตามนี่คือรายการที่ไม่ได้เรียงลำดับ (ul) เมื่อใช้รายการที่เรียงลำดับ (ol) ดูเหมือนว่า 1.2em จะจัดตำแหน่งขอบด้านซ้ายของรายการกับระยะขอบด้านซ้ายของข้อความอื่น ๆ (ต่อคำตอบ Jpsy ด้านบน)
MrPotato เฮด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.