วิธีจัดกึ่งกลางข้อความในแนวตั้งด้วยไอคอนขนาดใหญ่ที่น่ากลัวแบบอักษร?


231

ให้บอกว่าฉันมีปุ่มบูตที่มีไอคอนตัวอักษรที่ยอดเยี่ยมและข้อความบางส่วน:

<div>
    <i class='icon icon-2x icon-camera'></i>
    hello world
</div>

ฉันจะทำให้ข้อความปรากฏกึ่งกลางในแนวตั้งได้อย่างไร ข้อความอยู่ในแนวเดียวกับขอบด้านล่างของไอคอนทันที: http://jsfiddle.net/V7DLm/1/

แก้ไข: ฉันมีทางออกที่เป็นไปได้: http://jsfiddle.net/CLdeG/1/แต่มันให้ความรู้สึกค่อนข้างยุ่งเหยิง - แนะนำแท็ก p เพิ่มเติมใช้การดึงซ้ายและแสดง: ตาราง บางทีใครบางคนสามารถแนะนำวิธีที่ง่ายขึ้น


2
คุณเป็นพระเจ้า อย่างจริงจังฉันใช้เวลา 2 ชั่วโมงในวันนี้ทางออกของคุณคือสะอาดที่สุด ไม่จำเป็นต้อง hardcode อะไร
เชย

วิธีนี้ง่ายกว่า
Raveen Beemsingh

คำตอบ:


304

ฉันแค่ต้องทำสิ่งนี้ด้วยตัวเองคุณต้องทำอย่างอื่น

  • อย่าเล่นด้วยการจัดแนวข้อความของคุณ
  • เล่นด้วยการจัดแนวแนวตั้งของไอคอนตัวอักษรสุดยอดเยี่ยม
<div>
  <span class="icon icon-2x icon-camera" style=" vertical-align: middle;"></span>
  <span class="my-text">hello world</span>
</div>

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

ดูที่นี่: การจัดตำแหน่งแนวตั้งของข้อความและไอคอนในปุ่ม

ถ้ามันขึ้นอยู่กับฉันอย่างไรก็ตามฉันจะไม่ใช้ไอคอน -x2 และเพียงระบุขนาดตัวอักษรของตัวเองดังต่อไปนี้

<div class='my-fancy-container'>
    <span class='my-icon icon-file-text'></span>
    <span class='my-text'>Hello World</span>
</div>
.my-icon {
    vertical-align: middle;
    font-size: 40px;
}

.my-text {
    font-family: "Courier-new";
}

.my-fancy-container {
    border: 1px solid #ccc;
    border-radius: 6px;
    display: inline-block;
    margin: 60px;
    padding: 10px;
}

สำหรับตัวอย่างการทำงานโปรดดูJsFiddle


1
ใช่นี่เป็นทางออกที่ดีกว่าขอบคุณ ดูเหมือนว่าจะยังต้องการความสูงของบรรทัดแม้ว่าjsfiddle.net/paulftw/F3KyK/41
Paul

1
ฉันอัปเดต jsfiddle ของคุณสำหรับวิธีการที่จะทำ ฉันใช้ขนาดตัวอักษรสำหรับไอคอนแทนที่จะใช้ 2x jsfiddle.net/3GMjp/1
andxyz

ในรหัสชิ้นแรกของคุณแท็กเริ่มต้น <span> ไม่ตรงกับแท็กสิ้นสุด </i>
jzacharuk

ไม่ทำงานกับไอคอนบางอย่าง ตัวอย่าง fa-angle-left
steakchaser

สำคัญที่ต้องตระหนักว่าการรวมไฟล์ fontawesome js ยังสามารถปรับเปลี่ยนรูปลักษณ์ได้ ไอคอนของฉันอยู่ด้านบนสุดฉันลบการรวม js เพื่อดูว่าจะเกิดอะไรขึ้นและตอนนี้มันอยู่ไกลเกินไปที่ด้านล่าง -.
ลูซิดบร็อท

53

ฉันใช้ไอคอนถัดจากข้อความ 99% ของเวลาดังนั้นฉันจึงทำการเปลี่ยนแปลงทั่วโลก:

.fa-2x {
  vertical-align: middle;
}

เพิ่ม 3x, 4x, etc ไปยังคำจำกัดความเดียวกับที่ต้องการ


7
ในความเห็นของฉันนี้ควรเป็นคำตอบที่ยอมรับเนื่องจากเป็นวิธีที่ง่ายที่สุดเว้นแต่ฉันจะหายไปบางสิ่งบางอย่างในคำถามเดิม ขอบคุณ @rushonerok! ฉันไม่แน่ใจว่าทำไมบางคนบอกว่าไม่ใช้vertical-align: middle;- ฉันอาจจะขาดอะไรบางอย่างที่นี่ โปรดอธิบายหากเป็นเช่นนั้น
Kendall

1
@Kendall Roth ผมคิดว่าเมื่อมีคนบอกว่าจะไม่ใช้vertical-align: middleพวกเขาหมายความว่าถ้าคุณกำลังใช้blockองค์ประกอบ หากคุณกำลังใช้inline, inline-blockหรือtable-cellคุณควรจะดี MDN:vertical-align
rinogo

ทำงานเหมือนจับใจ! ขอบคุณ: D
Mohammed A. Fadil

37

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

ดูการสาธิต Jsfiddle

CSS:

div {
    border: 1px solid #ccc;
    display: inline-block;
    height: 50px;
    margin: 60px;
    padding: 10px;
}
#text, #ico {
    line-height: 50px;
}

#ico {
    vertical-align: middle;
}

2
เกิดอะไรขึ้นถ้าคอนเทนเนอร์ของคุณใหญ่กว่า 50px ถ้าอย่างนั้นมันจะไม่ทำงาน ... ฉันมีเนื้อหาที่เปลี่ยนขนาดและควรมีไอคอนอยู่ตรงกลาง ... ความคิดใด ๆ
Slaven Tomac

24

หากสิ่งต่าง ๆ ไม่เรียงกันง่าย ๆline-height: inherit;ผ่าน CSS บนองค์ประกอบเฉพาะของ i.fa ที่มีปัญหาเกี่ยวกับการจัดตำแหน่งสามารถทำเคล็ดลับได้ง่ายพอ

คุณยังสามารถใช้โซลูชันระดับโลกได้ซึ่งเนื่องจากความจำเพาะ CSS ที่สูงขึ้นเล็กน้อยจะแทนที่กฎ. fa ของ FontAwesome ซึ่งระบุline-height: 1โดยไม่ต้อง!importantใช้คุณสมบัติ:

i.fa {
  line-height: inherit;
}

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


16

ตัวเลือก flexbox - แบบอักษรดีเลิศ 4.7 และต่ำกว่า

FA 4.x URL ที่โฮสต์ - https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css

div {
  display: inline-flex; /* make element size relative to content */
  align-items: center; /* vertical alignment of items */
  line-height: 40px; /* vertically size by height, line-height or padding */
  padding: 0px 10px; /* horizontal with padding-l/r */
  border: 1px solid #ccc;
}

/* unnecessary styling below, ignore */
body {display: flex;justify-content: center;align-items: center;height: 100vh;}div i {margin-right: 10px;}div {background-color: hsla(0, 0%, 87%, 0.5);}div:hover {background-color: hsla(34, 100%, 52%, 0.5);cursor: pointer;}
<link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
<div>
    <i class='fa fa-2x fa-camera'></i>
    hello world
</div>

ซอ

http://jsfiddle.net/Hastig/V7DLm/180/


ใช้ดิ้นและตัวอักษรที่น่ากลัว 5

FA 5.x URL ที่โฮสต์ - https://use.fontawesome.com/releases/v5.0.8/js/all.js

div {
  display: inline-flex; /* make element size relative to content */
  align-items: center; /* vertical alignment of items */
  padding: 3px 10px; /* horizontal vertical position with padding */
  border: 1px solid #ccc;
}
.svg-inline--fa { /* target all FA icons */
  padding-right: 10px;
}
.icon-camera .svg-inline--fa { /* target specific icon */
  font-size: 50px;
}
/* unnecessary styling below, ignore */
body {display: flex;justify-content: center;align-items: center;height: 100vh; flex-direction: column;}div{margin: 10px 0;}div {background-color: hsla(0, 0%, 87%, 0.5);}div:hover {background-color: hsla(212, 100%, 63%, 1);cursor: pointer;}
<script src="https://use.fontawesome.com/releases/v5.0.8/js/all.js"></script>
<div class="icon-camera">
    <i class='fas fa-camera'></i>
    hello world
</div>
<div class="icon-clock">
    <i class='fas fa-clock'></i>
    hello world
</div>

ซอ

https://jsfiddle.net/3bpjvof2/


1
สิ่งนี้สามารถจัดกึ่งกลางไอคอนในแนวตั้งภายใน div ไม่ใช่แค่ในบรรทัดข้อความ ใช้งานได้ดี!
ฌอนถั่ว

@ ใครก็ตามที่พยายามจะแก้ไขสิ่งนี้ - โดยทั่วไปนี่คือสไตล์การจัดวางของฉันสำหรับคำตอบ ฉันเชื่อว่ามันทำให้อ่าน / เข้าใจได้ง่ายขึ้นและช่วยให้ผู้คนรู้ว่าพวกเขาจะไปที่ใดดีกว่าก่อนที่จะคลิกลิงค์ ในกรณีของ FA Hosted URL บางคนมีนิสัยในการเน้นลิงค์เพื่อคัดลอกนี่คือเหตุผลที่มันเขียนเต็ม ลิงก์ jsfiddle มีส่วนหัวเพื่อแยกหน้าดีขึ้นมิฉะนั้นจะพลาดได้ง่ายขึ้นและคำตอบอาจดูยุ่งเหยิง
Hastig Zusammenstellen

11

วิธีที่ง่ายที่สุดคือการตั้งค่าคุณสมบัติ css แนวตั้งเป็นกลาง

i.fa {
    vertical-align: middle;
}

3
.svg-inline--faสำหรับ FontAwesome 5
darylknight

@darylknight สิ่งนี้หมายความว่าอย่างไร ฉันจะเปิดใช้งาน / ใช้สิ่งนั้นได้อย่างไร เพิ่มบางสิ่งหลังจากที่fa-clockอยู่ในชั้นเรียนหรือไม่
ศ. Falken


3

ลองตั้งค่าไอคอนของคุณเป็น height: 100%

คุณไม่จำเป็นต้องทำอะไรกับเสื้อคลุม (พูดปุ่มของคุณ)

ต้องใช้ Font Awesome 5 ไม่แน่ใจว่าใช้งานได้กับ FA เวอร์ชันเก่าหรือไม่

.wrap svg {
    height: 100%;
}

โปรดทราบว่าไอคอนนี้เป็นsvgกราฟิกจริง

การสาธิต


2

สำหรับผู้ที่ใช้ Bootstrap 4 นั้นง่ายมาก:

<span class="align-middle"><i class="fas fa-camera"></i></span>

สิ่งนี้ไม่มีประโยชน์ในการจัดเรียงแนวตั้ง: ระดับกลางซึ่งใช้โดยคลาสนี้คือกำหนดเป้าหมายตารางเท่านั้น
ลูคัส Manzke

1

ตัวเลือกอื่นในการปรับความสูงของบรรทัดของไอคอนคือการใช้เปอร์เซ็นต์ของvertical-alignคุณสมบัติ โดยปกติแล้ว 0% จะอยู่ด้านล่างและ 100% ที่ด้านบน แต่สามารถใช้ค่าลบหรือมากกว่าร้อยเพื่อสร้างเอฟเฟกต์ที่น่าสนใจ

.my-element i.fa {
    vertical-align: 100%; // top
    vertical-align: 50%; // middle
    vertical-align: 0%; // bottom
}

1

ฉันจะห่อข้อความด้วยเพื่อให้คุณสามารถกำหนดเป้าหมายแยกจากกัน ตอนนี้ถ้าคุณลอยทั้งสองและซ้ายคุณสามารถใช้ความสูงบรรทัดเพื่อควบคุมระยะห่างแนวตั้งของ การตั้งค่าให้มีความสูงเท่ากับ (30px) จะจัดแนวกลาง ดูที่นี่

มาร์กอัปใหม่:

 <div>
    <i class='icon icon-2x icon-camera'></i>
    <span id="text">hello world</span>
</div>

ใหม่ CSS:

div {
    border: 1px solid #ccc;
    height: 30px;
    margin: 60px;
    padding: 4px;
    vertical-align: middle;
}
i{
    float: left;
}
#text{
    line-height: 30px;
    float: left;
}

4
การจัดแนวตั้งไม่ได้ทำอะไรกับองค์ประกอบบล็อก แต่จะทำงานกับองค์ประกอบแบบอินไลน์หรือเซลล์ตาราง
cimmanon

ฉันเห็นว่าการตั้งค่า line-height = ความสูงของคอนเทนเนอร์และสิ่งที่ลอยอยู่นั้นใช้งานได้และต้องการการพิมพ์น้อยลง นี่คือซอที่ปรับปรุงใหม่พร้อมลดเสียงรบกวน: jsfiddle.net/F3KyK/7
Paul

เป็นการดีกว่าที่จะตั้งค่าvertical-align: middleบนไอคอนและข้อความ ด้วยวิธีนี้คุณไม่ได้ตั้งสมมติฐานเกี่ยวกับความสูงของไอคอนและมี CSS น้อยกว่า
Maros

0

เมื่อใช้ flexbox การจัดแนวแนวตั้งของไอคอนตัวอักษรที่ยอดเยี่ยมติดกับข้อความอาจเป็นเรื่องยากมาก ฉันลองมาร์จิ้นและแพ็ดดิ้ง แต่นั่นก็ย้ายรายการทั้งหมด ฉันลองจัดเรียงเฟล็กซ์ต่าง ๆ เช่นกึ่งกลางเริ่มต้นพื้นฐานและอื่น ๆ โดยไม่มีประโยชน์ วิธีที่ง่ายที่สุดและสะอาดที่สุดในการปรับเฉพาะไอคอนคือการตั้งค่าให้มี div เป็นposition: relative; top: XX;สิ่งนี้ทำงานได้อย่างสมบูรณ์แบบ


0

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

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

.button {
    border: 1px solid #ccc;
    height: 40px;
    margin: 60px;
    padding: 4px;
    display: flex;
    justify-content: space-around;
    align-items: center;
}

ตัวอย่าง: JsFiddle


0

เพียงกำหนดvertical-alignคุณสมบัติสำหรับองค์ประกอบไอคอน:

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