แก้ไขความหนาของเส้นของแอตทริบิวต์ "ขีดเส้นใต้" ของ CSS


118

เนื่องจากคุณสามารถขีดเส้นใต้ข้อความใดก็ได้ใน CSS ดังนี้:

H4 {text-decoration: underline;}

แล้วคุณจะแก้ไข 'เส้น' ที่วาดได้อย่างไรสีที่คุณได้รับบนเส้นนั้นสามารถระบุได้อย่างง่ายดายว่า 'color: red' แต่จะแก้ไขความสูงของเส้นได้อย่างไรเช่นความหนา?


10
h4 {border-bottom: 10px solid #000;}
Pranav 웃

@PranavKapoor - ดี! ยอดเยี่ยมมากขอบคุณมาก ฉันจะตั้งค่าความกว้างของเส้นขอบนี้เป็น 'อัตโนมัติ' ได้อย่างไรในตอนนี้เพื่อให้มันกั้นขอบแท็ก H4 เท่านั้นไม่ใช่ความกว้างทั้งหมดของ div ที่มี

คุณสามารถเพิ่มdisplay:inline-blockเพื่อให้แน่ใจว่าได้ตั้งค่าความกว้างไว้แล้วอย่างไรก็ตามการใช้องค์ประกอบภายใน<h4>และจัดแต่งทรงผมภายในจะดีกว่า ตรวจสอบคำตอบของฉันด้านล่าง
Pranav 웃

1
@PranavKapoor - อีกแล้ว! คุณเหมือนนินจา CSS ขอบคุณคน ฉันใช้คำตอบนี้ที่คุณให้ไว้ในความคิดเห็นแทนที่จะเป็นคำตอบของคุณที่โพสต์ไว้ด้านล่าง วิธีนี้ฉันคิดว่าดีกว่าเนื่องจากคุณไม่จำเป็นต้องห่อข้อความของคุณในแท็ก <u> อื่น คุณควบคุมสิ่งนี้ได้อย่างสมบูรณ์จากฝั่ง CSS

เป็นไปได้ที่จะทำซ้ำความหนาของขีดเส้นใต้
Jukka K. Korpela

คำตอบ:


92

นี่คือวิธีหนึ่งในการบรรลุสิ่งนี้:

HTML:

<h4>This is a heading</h4>

<h4><u>This is another heading</u></h4>

CSS:

 u {
    text-decoration: none;
    border-bottom: 10px solid black;
  }​

นี่คือตัวอย่าง: http://jsfiddle.net/AQ9rL/


91
... หรือข้อความหลายบรรทัด
cfx

ในกรณีนี้คุณต้องตัดข้อความจากแต่ละบรรทัดก่อนและหลังตัวแบ่งบรรทัดด้วย<span>และใช้เส้นขอบล่างตรงนั้น เป็นวิธีแก้ปัญหาที่อาจเจ็บปวดในสถานการณ์ที่ไม่ได้เข้ารหัส
Fabián

@cfx ถ้าคุณทำได้คุณยังสามารถทำได้display: inline;(แต่มันจะไม่ถูกปิดกั้นอีกต่อไปแล้วสามารถช่วยใครสักคนได้)
jave.web

คุณทำให้วันของฉัน ขอบคุณ
Tessaracter

ซึ่งจะทำให้เค้าโครงเปลี่ยนไป เส้นขอบจะบังคับให้องค์ประกอบอื่น ๆ เคลื่อนไหวซึ่งแตกต่างจากขีดล่างที่จะไม่ทำ
Joel Karunungan

51

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

.custom-underline{
    box-shadow: inset 0 0px 0 white, inset 0 -1px 0 black
}

เงาแรกถูกวางไว้ด้านบนของเงาที่สองและนั่นคือวิธีที่คุณสามารถควบคุมเงาที่สองได้โดยการเปลี่ยนค่า 'px' ของทั้งสอง

บวก: สีต่างๆความหนาและตำแหน่งขีดเส้นใต้

ลบ: ไม่สามารถใช้กับพื้นหลังที่ไม่ทึบ

ฉันได้สร้างตัวอย่างไว้ที่นี่: http://jsfiddle.net/xsL6rktx/


4
เรียบร้อยแค่ไหน. สิ่งที่เป็นมืออาชีพ (สำหรับฉันอย่างน้อยที่สุด) สำหรับสิ่งนี้ในแง่ของเส้นขอบ - ล่างคือความหนาของ "เส้น" จะขยายเข้าหาข้อความซึ่งทำให้ช่องว่างระหว่างข้อความและบรรทัดน้อยลงมาก
Victor Häggqvist

ฉันได้เส้นแนวตั้งครึ่งพิกเซลนอกเหนือจากขีดเส้นใต้เมื่อทำสิ่งนี้
yeahdixon

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

แทนที่จะเป็นสีขาวการใช้แบบโปร่งใสจะใช้ได้ผลในกรณีที่มีพื้นหลังใด ๆ
Jay Dadhania

นี่คือคำตอบที่ดีที่สุด ไม่จำเป็นต้องปรับเปลี่ยน HTML และโซลูชัน CSS ที่แท้จริงซึ่งจะไม่เปลี่ยนตำแหน่งเหมือนที่เส้นขอบทำ
Joel Karunungan

15

ง่ายมาก ... ภายนอกองค์ประกอบ "ช่วง" ที่มีแบบอักษรขนาดเล็กและขีดเส้นใต้และภายในองค์ประกอบ "แบบอักษร" ที่มีขนาดตัวอักษรที่ใหญ่กว่า

<span style="font-size:1em;text-decoration:underline;">
 <span style="font-size:1.5em;">
   Text with big font size and thin underline
 </span>
</span>


8
หากคุณแทนที่<font>แท็กที่ล้าสมัยด้วยspanแท็กนี่จะเป็นคำตอบเดียวที่ตอบคำถามได้จริง
matteo

11

อีกวิธีในการทำเช่นนี้คือการใช้ ": after" (องค์ประกอบหลอก) บนองค์ประกอบที่คุณต้องการขีดเส้นใต้

h2{
  position:relative;
  display:inline-block;
  font-weight:700;
  font-family:arial,sans-serif;
  text-transform:uppercase;
  font-size:3em;
}
h2:after{
  content:"";
  position:absolute;
  left:0;
  bottom:0;
  right:0;
  margin:auto;
  background:#000;
  height:1px;

}

10

นอกจากนี้text-decoration-thicknessในปัจจุบันเป็นส่วนหนึ่งของCSS ข้อความตกแต่งระดับ 4 อยู่ในขั้นตอน "ร่างของบรรณาธิการ" ดังนั้นจึงอยู่ระหว่างดำเนินการและอาจมีการเปลี่ยนแปลงได้ เมื่อวันที่มกราคม 2020 มันได้รับการสนับสนุนใน Firefox และ Safari

คุณสมบัติ CSS text-decoration-thickness ตั้งค่าความหนาหรือความกว้างของเส้นตกแต่งที่ใช้กับข้อความในองค์ประกอบเช่นเส้นผ่านขีดเส้นใต้หรือขีดทับ

a {
  text-decoration-thickness: 2px;
}

Codepen: https://codepen.io/mrotaru/pen/yLyLOgr (Firefox เท่านั้น)


นอกจากนี้ยังมีtext-decoration-colorซึ่งเป็นส่วนหนึ่งของCSS ข้อความตกแต่งโมดูลระดับที่ 3 สิ่งนี้เป็นผู้ใหญ่มากขึ้น (คำแนะนำสำหรับผู้สมัคร) และได้รับการสนับสนุนในเบราว์เซอร์หลัก ๆ ส่วนใหญ่ (ข้อยกเว้นคือ Edge และ IE) แน่นอนว่าไม่สามารถใช้เพื่อเปลี่ยนความหนาของเส้นได้ แต่สามารถใช้เพื่อให้ได้เส้นใต้แบบ "ปิดเสียง" มากขึ้น (แสดงใน codepen ด้วย)


หากผู้ใช้อยู่ใน Firefox text-decorationทุกสิ่งตกแต่งข้อความที่สามารถเข้าถึงได้ใน ฉันไม่รู้ว่าสิ่งนี้มีแผนที่จะรวมไว้ในทั้งหมดนี้หรือไม่ แต่ถ้าเป็นเช่นนั้นมันจะดีมากในอนาคต แก้ไข: มันเป็นร่างทำงานเพื่อสนับสนุนเรื่องนี้ใน text-decoration
Stormblessed

9

ฉันจะทำอะไรง่ายๆเช่น:

.thickness-underline {
    display: inline-block;
    text-decoration: none;
    border-bottom: 1px solid black;
    margin-bottom: -1px;
}
  • คุณสามารถใช้line-heightหรือpadding-bottomตั้งค่าความเป็นไปได้ระหว่างพวกเขา
  • คุณสามารถใช้ได้display: inlineในบางกรณี

การสาธิต: http://jsfiddle.net/5580pqe8/

CSS ขีดเส้นใต้


น่าเสียดายที่ขอบล่างไม่สามารถรับค่าลบได้
soleshoe

5
@soleshoe ไม่ถูกต้องคุณสามารถมีขอบลบที่ด้านล่างขององค์ประกอบ
Alex

7

background-imageนอกจากนี้ยังสามารถใช้ในการสร้างขีดเส้นใต้

จะต้องเลื่อนลงbackground-positionและทำซ้ำในแนวนอน สามารถปรับความกว้างของเส้นได้ในระดับหนึ่งโดยใช้background-size(พื้นหลัง จำกัด ไว้ที่กล่องเนื้อหาขององค์ประกอบ)

.underline
{
    --color: green;
    font-size: 40px;
    background-image: linear-gradient(var(--color) 0%, var(--color) 100%);
    background-repeat: repeat-x;
    background-position: 0 1.05em;
    background-size: 2px 5px;
}
<span class="underline">
     Underlined<br/>
     Text
</span>


6

a {
  text-decoration: none;
  position: relative;
}

a.underline {
  text-decoration: underline;
}

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}
<h1><a href="#" class="underline">Default: some text alpha gamma<br>the quick brown fox</a></h1>
<p>Working:</p>
<h1><a href="#" class="shadow">Using Shadow: some text alpha gamma<br>the quick brown fox<br>even works with<br>multiple lines</a></h1>
<br>

วิธีแก้ไขขั้นสุดท้าย: http://codepen.io/vikrant-icd/pen/gwNqoM

a.shadow {
   box-shadow: inset 0 -4px 0 white, inset 0 -4.5px 0 blue;
}

1
ปัญหาที่ขีดเส้นใต้จะแสดงผลโดยเบราว์เซอร์ที่แตกต่างกัน
Joel Karunungan

3

ด้วยความมหัศจรรย์ของตัวเลือก cssใหม่ตอนนี้สามารถทำได้โดยกำเนิด:

a {
  text-decoration: underline;
  text-decoration-thickness: 5px;
  text-decoration-skip-ink: auto;
  text-underline-offset: 3px;
}

ยังเป็นของการสนับสนุนค่อนข้างยากจน แต่มันจะเข้าสู่เบราว์เซอร์อื่นที่ไม่ใช่ ff ในที่สุด


2

โซลูชันของฉัน: https://codepen.io/SOLESHOE/pen/QqJXYj

{
    display: inline-block;
    border-bottom: 1px solid;
    padding-bottom: 0;
    line-height: 70%;
}

คุณสามารถปรับตำแหน่งขีดเส้นใต้ด้วยค่าความสูงของเส้นขีดเส้นใต้ความหนาและรูปแบบโดยมีขอบล่าง

ระวังการปิดใช้งานพฤติกรรมขีดเส้นใต้เริ่มต้นหากคุณต้องการขีดเส้นใต้ href

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