căn chỉnh dọc của phần tử văn bản trong SVG


142

Giả sử tôi có tệp SVG:

<svg width="1024" height="768" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <text x='20' y='60' style="font-size: 60px">b</text>
    <text x='100' y='60' style="font-size: 60px">a</text>
</svg>

Tôi muốn bằng cách nào đó sắp xếp đầu ab. Trên thực tế, tôi muốn định vị của tôi là theo rooflinethay vì baseline!


Câu trả lời duy nhất hoạt động trong IE: stackoverflow.com/a/29089222/9069356
Dominus.Vobiscum

Câu trả lời:


116

Tài alignment-baselinesản là những gì bạn đang tìm kiếm nó có thể lấy các giá trị sau

auto | baseline | before-edge | text-before-edge | 
middle | central | after-edge | text-after-edge | 
ideographic | alphabetic | hanging | mathematical | 
inherit

Mô tả từ w3c

Thuộc tính này xác định cách một đối tượng được liên kết với cha mẹ của nó. Thuộc tính này xác định đường cơ sở của phần tử này sẽ được căn chỉnh với đường cơ sở tương ứng của cha mẹ. Ví dụ, điều này cho phép các đường cơ sở chữ cái trong văn bản La Mã được căn chỉnh theo các thay đổi kích thước phông chữ. Nó mặc định là đường cơ sở có cùng tên với giá trị được tính của thuộc tính đường cơ sở căn chỉnh. Nghĩa là, vị trí của điểm căn chỉnh "ý thức hệ" theo hướng tiến triển khối là vị trí của đường cơ sở "ý thức hệ" trong bảng đường cơ sở của đối tượng được căn chỉnh.

Nguồn W3C

Thật không may, mặc dù đây là cách "chính xác" để đạt được những gì bạn có sau khi nó xuất hiện nhưng Firefox không triển khai nhiều thuộc tính trình bày cho Mô-đun văn bản SVG ( 'Tài liệu SVG trong Tài liệu MDN của Firefox )


Không có may mắn với điều đó. Bạn có thể cung cấp một ví dụ?
SeMeKh

2
Theo tôi, câu trả lời hay nhất, vì nó đã trả lời tôi mà không phải điều hướng đến trang văn bản. Tôi muốn hiển thị văn bản của mình ở y = 0, nhưng nó bị tắt màn hình, vì vậy tôi đã sử dụng quy tắc CSS "căn chỉnh- đường cơ sở: treo "và nó đã thực hiện chính xác những gì tôi đang tìm kiếm, văn bản ở điểm cao nhất trong vùng chứa SVG, mà không có một pixel nào ngoài màn hình.
R. Hill

1
@SeMeKh: Hmm tình cờ, nó hoạt động với tôi trên Chromium, nhưng bây giờ tôi mới xác minh rằng điều tương tự không hoạt động trên Firefox. Vì vậy, có vẻ như tài sản này hiện không được hỗ trợ trên các trình duyệt.
R. Hill

2
@ R.Hill Đây là bugreport cho firefox đã được mở hơn 11 năm trước bugzilla.mozilla.org/show_orms.cgi?id=308338 Btw: Sự khác biệt giữa 'giữa' và 'trung tâm' là gì?
mxmlnkn

9
Được nâng cấp bởi sai lầm và bởi vì tôi đã mắc lỗi tương tự trước đây, tôi không thể hoàn tác nó. ☹ alignment-baseline: centralkhông không làm việc cho SVGs trong FireFox, và điều đó có vẻ là do thiết kế. dominant-baseline: centralhoạt động trên mọi trình duyệt mà tôi đã thử cho đến nay, như được chỉ ra trong câu trả lời này: stackoverflow.com/a/15997503/1450294
Michael Scheper

227

Theo SVG spec, alignment-baselinechỉ áp dụng cho <tspan>, <textPath>, <tref><altGlyph>. Sự hiểu biết của tôi là nó được sử dụng để bù đắp những thứ từ <text>đối tượng phía trên chúng. Tôi nghĩ những gì bạn đang tìm kiếm là dominant-baseline.

Các giá trị có thể dominant-baselinelà:

auto | use-script | no-change | reset-size | ideographic | alphabetic | hanging | mathematical | central | middle | text-after-edge | text-before-edge | inherit

Kiểm tra sự giới thiệu của W3C cho chi phối cơ sở bất động sản để biết thêm thông tin về mỗi giá trị có thể.


8
Điều này đã khắc phục sự cố của tôi với Firefox (không hoạt động với thuộc tính "căn chỉnh đường cơ sở"). "Đường cơ sở thống trị" hoạt động trên Chrome & Firefox. Cảm ơn!
Mariano Desanze

5
Ngoại trừ việc điều này không hoạt động trong bất kỳ phiên bản IE nào vào thời điểm này, vì vậy, nó thực sự không hữu ích cho nhiều ứng dụng trong thế giới thực.
Yona Appletree

3
Vì IE không hỗ trợ đường cơ sở chi phối hoặc đường cơ sở căn chỉnh, bạn có thể kiểm tra hỗ trợ cho tính năng như vậy element.hasAttribute('dominant-baseline')và nếu nó trả về sai áp dụng dy=-0.4emnhư được nêu trong câu trả lời này stackoverflow.com/a/29089222/2296470
Tigran

1
trội-baseline: trung tâm làm việc trong trường hợp của tôi. cảm ơn!
Liam Mitchell

1
lưu ý rằng đường cơ sở chiếm ưu thế không được IE10-12 Edge16 hỗ trợ
japrescott

47

attr ("chiếm ưu thế", "trung tâm")


1
Điều này được căn chỉnh bởi trung tâm của nhân vật (nhiều như các glyphs phông chữ chơi độc đáo), không chắc đây là câu trả lời ở đây cho câu hỏi này như thế nào.
matanster

3
Đây là phương pháp d3 hoặc jquery để gán các thuộc tính
glyph

1
Giải pháp này đặt đường cơ sở ở trung tâm dọc của văn bản. Vậy tọa độ y nằm ở tâm dọc. Đây là câu trả lời tôi đang tìm kiếm. Cảm ơn.
Henry

1
Cốt lõi của câu trả lời là chính xác - đặt thuộc tính trội-đường cơ sở thành trung tâm, tuy nhiên attr () không phải là hàm JS gốc và không có lời giải thích nào cả.
jave.web

30

Nếu bạn đang thử nghiệm điều này trong IE, đường cơ sở thống trị và đường cơ sở căn chỉnh không được hỗ trợ.

Cách hiệu quả nhất để căn giữa văn bản trong IE là sử dụng cái gì đó như thế này với "dy":

<text font-size="ANY SIZE" text-anchor="middle" "dy"="-.4em"> Ya Text </text>

Giá trị âm sẽ dịch chuyển nó lên và giá trị dương của dy sẽ dịch chuyển nó xuống. Tôi đã tìm thấy bằng cách sử dụng -.4em có vẻ hơi tập trung theo chiều dọc với tôi hơn -.5em, nhưng bạn sẽ là người đánh giá điều đó.


5
Cảm ơn bạn đã có câu trả lời duy nhất hoạt động trong IE. Thật xấu hổ khi chúng tôi phải làm điều này, nhưng các câu trả lời khác đã làm tôi lãng phí một lượng thời gian đáng kể để mọi thứ hoạt động trong Chrome / FF, sau đó thấy rằng nó không hoạt động trong IE trong quá trình kiểm tra trình duyệt.
Yona Appletree

Quyết định tốt đẹp và đơn giản! Và chúng ta nên nhớ xóa thuộc tính "căn chỉnh đường cơ sở" để bỏ qua ảnh hưởng của nó đối với vị trí văn bản trong các trình duyệt hỗ trợ nó.
YaTara

7

Sau khi xem Khuyến nghị của SVG, tôi đã hiểu rằng các thuộc tính cơ bản có nghĩa là định vị văn bản so với văn bản khác, đặc biệt là khi trộn các phông chữ và ngôn ngữ khác nhau. Nếu bạn muốn gửi văn bản sao cho nó đứng đầu ythì bạn cần sử dụng dy = "y + the height of your text".


Đánh giá cao các liên kết đến thông số kỹ thuật, một số đọc thực sự hữu ích ở đó. Chẳng "<list-of-lengths>"hạn, tùy chọn (được liên kết) chẳng hạn (cho phép thao tác trên mỗi ký tự)
brichins
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.