开发者

Floating Characters in CSS and Javascript

开发者 https://www.devze.com 2022-12-18 08:31 出处:网络
I\'m working on an English/Thai phrase app.In addition to displaying both English and Thai text, I need to display Phonetic text.The Phonetic text is English characters with arrows indicating inflecti

I'm working on an English/Thai phrase app. In addition to displaying both English and Thai text, I need to display Phonetic text. The Phonetic text is English characters with arrows indicating inflection above the syllables. Example:

knuckles

↘      ↑

kaw-new

In that example, the falling arrow should be centered above "kaw" and the up arrow should be centered above "new".

The HTML currently looks like:

<div id="2173" class="eng">knuckles</div>
<div id="2173" class="phonetic"><div class="arrow">↘</div><div class="text">kaw-</div><div class="arrow">↑</div><div class="text">new</div></div>

The CSS currently looks like:

.arrow {
    margin-left:1em;
    padding-bottom:1em;
    display:inline;
    position:absolute;
}

.text {
    display:inline;
    padding-top:0;
    margin-top:1em;
    position:relative;
    float:left;
}

That's the HTML and CSS I've come up with, but I can't seem to get it to display the way I want. It's almost right in Safari, but not at all right in Firefox (not bothering with IE testing as the app uses HTML5 localS开发者_运维百科torage which IE doesn't support). The HTML is being dynamically written using JavaScript, so I'm open to suggestions there. Also, I'm not using a monospaced font, so somehow I need to calculate the arrow's location in relation to the word it goes above.

If anyone has any suggestions I'd love to hear them.


How about

.syllable {
    display:inline-block;
}
.syllable span {
    display:block;
    text-align:center;
}

<span class="syllable"><span>↘</span>kaw</span>
-<span class="syllable"><span>↑</span>new</span>

This centers the arrow above each syllable. You should really make each syllable its own container (span is fine, but make it inline-block), because that's the most logical way to do it.

The clue here is that the inner span is a block container, which automatically takes up the whole line, forcing the text to start on the next line.


How about throwing them in to a 2x2 table with centered alignment?

I'm pretty sure that cross-browser, that will give you the best behavior.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号