การเยื้องเริ่มต้นจากบรรทัดที่สองของย่อหน้าด้วย CSS


106

ฉันจะเยื้องโดยเริ่มจากบรรทัดที่สองของย่อหน้าได้อย่างไร

ฉันได้ลองแล้ว

p {
    text-indent: 200px;
}
p:first-line {
    text-indent: 0;
}

และ

p {
    margin-left: 200px;
}
p:first-line {
    margin-left: 0;
}

และ

(with position:relative;)
p {
    left: 200px;
}
p:first-line {
    left: 0;
}

เหตุใดการเยื้องข้อความบรรทัดแรกทั้งหมดของคุณจึงถูกตั้งค่าเป็น 0 นอกจากนี้ฉันไม่รู้ว่าต้องทำอย่างไร แต่สิ่งที่ขาดหายไปจากรายการนี้คือสิ่งที่ทำให้ฉันรู้สึกได้มากที่สุดคือช่องว่างภายใน
Skarlinski

คำตอบ:


215

แท้จริงแล้วเป็นเพียงบรรทัดที่สองที่คุณต้องการเยื้องหรือมาจากบรรทัดที่สอง (เช่นการเยื้องห้อย )?

หากเป็นอย่างหลังสิ่งที่อยู่ในบรรทัดของJSFiddleนี้จะเหมาะสม

    div {
        padding-left: 1.5em;
        text-indent:-1.5em;
    }
    
    span {
        padding-left: 1.5em;
        text-indent:-1.5em;
    }
<div>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</div>

<span>Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</span>

ตัวอย่างนี้แสดงให้เห็นว่าการใช้ไวยากรณ์ CSS เดียวกันใน DIV หรือ SPAN สร้างเอฟเฟกต์ที่แตกต่างกันอย่างไร


3
@Reuben จากความคิดเห็นของคุณซึ่งตอนนี้ถูกลบไปแล้วฉันคิดว่าคุณทำต่อหน้าค่าเฉลี่ยจากบรรทัดที่สอง - และเพื่อประโยชน์ของผู้เยี่ยมชมในอนาคตบางทีซอนี้อาจจะดีกว่าโดยที่ไวยากรณ์คือ P ไม่ใช่ div หรือ span jsfiddle.net/gg9Hx
redditor

1
ทำไมต้องเว้นช่องว่างซ้ายแล้วจึงเยื้องข้อความเชิงลบ ทำไมต้องทำงานแบบนั้น ดูเหมือนจะแปลก ทำไมไม่แค่บวกtext-indent?
Don Cheadle

2
การเยื้องข้อความไม่มีผลต่อช่วง สามารถถอดออกจากสไตล์ของสแปนเพื่อให้ได้ผลลัพธ์เดียวกัน
Sam Hasler

25

ทำขอบซ้าย: 2em หรือมากกว่านั้นจะดันข้อความทั้งหมดรวมทั้งบรรทัดแรกไปทางขวา 2em กว่าเพิ่มการเยื้องข้อความ (ใช้ได้กับบรรทัดแรก) เป็น -2em หรือมากกว่านั้น .. ซึ่งจะทำให้บรรทัดแรกกลับมาเริ่มต้นโดยไม่มีขอบ ฉันลองใช้แท็กรายการ

<style>
    ul li{
      margin-left: 2em;
      text-indent: -2em;
    }
</style>

24

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

p { margin-left: -2em; 
 text-indent: 2em 
 }

10
สิ่งนี้ดูเหมือนจะตรงข้ามกับสิ่งที่ OP ถามอย่างสิ้นเชิง เวอร์ชันของ @ techillage ถูกต้อง คุณต้องสลับลบรอบ ๆ
Alex Holsgrove

1
นี่คือสิ่งที่ฉันต้องการเกือบทั้งหมด คำตอบที่ยอมรับจะใช้ไม่ได้สำหรับฉันเพราะฉันไม่มีอิสระใน CMS ของฉันที่จะเพิ่มช่วงเวลาดังกล่าว ปัญหาเดียวที่ฉันมีกับวิธีแก้ปัญหาที่นี่คือระยะขอบด้านซ้ายจะดึงทั้งย่อหน้าออกจากคอนเทนเนอร์ ดังนั้นฉันจึงเพิ่ม 'ตำแหน่ง: ญาติ' และ 'ซ้าย: 2em' และมันก็สมบูรณ์แบบ ตรงกันข้ามกับความคิดเห็นของ @AlexHolsgrove คำตอบของ techillage ไม่ได้ผลสำหรับฉันเลย แต่อาจเป็นเพราะฉันไม่ได้ทำสิ่งนี้ในองค์ประกอบรายการ
สตูเฟอร์ลอง

2

ฉันต้องเยื้องสองแถวเพื่อให้คำแรกใหญ่ขึ้นในย่อหน้า วิธีแก้ปัญหาแบบครั้งเดียวที่ยุ่งยากคือการวางข้อความในองค์ประกอบ SVG และวางตำแหน่งนี้เหมือนกับ <img> การใช้ float และแท็กความสูงของ SVG กำหนดจำนวนแถวที่จะเยื้องเช่น

<p style="color: blue; font-size: large; padding-top: 4px;">
<svg height="44" width="260" style="float:left;margin-top:-8px;"><text x="0" y="36" fill="blue" font-family="Verdana" font-size="36">Lorum Ipsum</text></svg> 
dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.</p>
  • ความสูงและความกว้างของ SVG กำหนดพื้นที่ที่ถูกปิดกั้น
  • Y = 36 คือความลึกของเส้นฐานข้อความ SVG และเหมือนกับขนาดตัวอักษร
  • margin-top ช่วยให้สามารถจัดตำแหน่งข้อความ SVG และข้อความพาราได้ดีที่สุด
  • ใช้สองคำแรกที่นี่เพื่อเตือนการดูแลที่จำเป็นสำหรับลูกหลาน

ใช่มันยุ่งยาก แต่ก็ไม่ขึ้นกับความกว้างของ div ที่มี

คำตอบข้างต้นคือแบบสอบถามของฉันเองเพื่อให้คำแรกของ para มีขนาดใหญ่ขึ้นและวางตำแหน่งไว้เหนือสองแถว ในการเยื้องสองบรรทัดแรกของพาราคุณสามารถแทนที่แท็ก SVG ทั้งหมดด้วย img พิกเซลเดียวต่อไปนี้:

<img src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" style="float:left;width:260px;height:44px;" />


1

หากคุณมีสไตล์เป็นรายการ

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

    ฉันเดาว่าการใส่บรรทัดที่สองก็ใช้ได้เช่นกัน แต่ต้องใช้ความคิดของมนุษย์เพื่อให้เนื้อหาไหลได้อย่างถูกต้องและแน่นอนว่าการแบ่งบรรทัดที่ยาก (ซึ่งไม่ทำให้ฉันรำคาญเลย)


  • 1
    ยินดีต้อนรับสู่ Stackoverflow ดูเหมือนว่าคุณจะมีวิธีแก้ปัญหาการเยื้องนี้ อย่างไรก็ตามมันจะเป็นความช่วยเหลือที่ดีสำหรับทุกคนหากคุณให้มาร์กอัปและอธิบายวิธีแก้ปัญหา คุณสามารถใช้ jsfiddle.net หรือบริการอื่น ๆ เพื่อสร้างการสาธิตที่ใช้งานได้ สิ่งที่ดีที่สุด
    EGL 2-101
    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.