3

ピボット ワードが行の中央に表示されるように (ブラウザに表示された場合)、「ピボット」ワードの周囲にテキストを配置するにはどうすればよいですか?

行の開始と終了を言っ[てマークします。これは、明確にするためにここに含まれている中間線マーカーです。]X

したがって、単一行の場合:

                                       X
[            I am centered around my PIVOT word.                               ]
[                        Here is the PIVOT word of this second example.        ]

複数行の場合、次のようになります。

                                       X
[                                                  This is multiline text with ]
[    one word which functions as the PIVOT.  Then we have some more boring     ]
[ multiline text you don't have to worry about                                 ]
4

4 に答える 4

1

私の最初の答えを作り直しました。今ではずっとうまく機能します。フィドルを参照してください。これは、ピボット ワードで段落を分割するという考えに基づいています。ピボットワードと最後のセクションが段落に戻されます。次に、前半 (ピボット ワードの前) が配列に分割され、(最後の要素をポップするたびに) 逆方向にトラバースされて、幅に達するまでスパンが埋められます。これは、配列に残っている単語がなくなるまで繰り返されます。私は英語のネイティブ スピーカーではないので、これがすべて意味をなすことを願っています。

<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title></title>
        <script type="text/javascript" src="js/jquery-1.9.0/jquery.min.js"></script>
        <style type="text/css">
            .container {
                width: 500px;
                border: 1px solid #ddd;
            }
            .pivotWord {
                background-color: red;
                color: white;
                font-weight: bold;
            }
        </style>
    </head>
    <body>
        <div class="container">
            <p>
                Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in PIVOT voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
                Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. PIVOT Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
                Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et PIVOT dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in  voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
            <p>
                Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.  Excepteur sint occaecat cupidatat non PIVOT proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
            </p>
        </div>




        <script type="text/javascript">
            function pivotAround(pivotword){
                $('p').each(function(){
                    //initialize a few things
                    var sentence = $(this).html();
                    var splittedSentence = sentence.split(pivotword);
                    var paragraphWidth = $(this).width();
                    $(this).html("");

                    //create elements from the sentence parts.
                    var pivotSpan = $("<span />", {
                        'class': 'pivotWord'
                    }).html(pivotword);

                    var postSpan = $("<span />", {

                    }).html(splittedSentence[1]);

                    //append them to the DOM
                    $(this).append(pivotSpan)
                                 .append(postSpan);

                    //get size of pivotSpan
                    var pivotSpanWidth = pivotSpan.width();
                    //calculate where the pivot word should be
                    var pivotSpanLeftMargin = (paragraphWidth / 2) - (pivotSpanWidth / 2);
                    //make global array of splittedSentence[0]
                    preSpanArray = splittedSentence[0].split(' ');

                    distributeWithinMargin(pivotSpanLeftMargin, this);

                    //array not empty?
                    while(preSpanArray.length > 0){
                        distributeWithinMargin(paragraphWidth, this);
                    }
                });
            }

            function distributeWithinMargin(margin, element) {
                var span = $("<span />", {
                    'style': 'margin-left: -40000px'
                });
                $(element).prepend(span);
                while (preSpanArray.length > 0 && span.width() <= margin) {
                    var lastElement = preSpanArray.pop();
                    span.prepend(lastElement + " ");
                }
                /*
                 * last word makes the span too wide, so push it back to the stack
                 * only do this when array not empty, or you will end up in an
                 * endless loop
                 */ 
                if (preSpanArray.length > 0) {
                    preSpanArray.push(lastElement);
                    //remove that word from the span
                    var firstSpaceIndex = $(span).html().indexOf(" ");
                    $(span).html($(span).html().substring(firstSpaceIndex + 1));
                }

                //calculate the text-indent from that value
                var textIndent = margin - span.width();
                $(span).css('margin-left', textIndent);
            }

            pivotAround("PIVOT");       
        </script>
    </body>
</html>
于 2013-05-15T19:38:27.203 に答える
0

最後に、テーブルでこれを行う方法を見つけました。の幅が異なる場合は、と-stableの幅の値 (パーセントで等しい必要があります) で遊ぶ必要があります。leftright td

<table width="700px">
<tr>
<td style="width:47%;height:25px;text-align:right;overflow:hidden;whitespace: nowrap;">text</td>
<td style="min-width:40px;width:40px;height:25px;">pivot</td>
<td style="width:47%;height:25px;overflow:hidden;whitespace: nowrap;">text</td>
</tr>

<tr>
<td style="width:47%;height:25px;text-align:right;overflow:hidden;whitespace: nowrap;">longer text tot the left</td>
<td style="min-width:40px;width:40px;height:25px;">pivot</td>
<td style="width:47%;height:25px;overflow:hidden;whitespace: nowrap;">short here</td>
</tr>

<tr>
<td style="width:47%;height:25px;text-align:right;overflow:hidden;whitespace: nowrap;">sample</td>
<td style="min-width:40px;width:40px;height:25px;">pivot</td>
<td style="width:47%;height:25px;overflow:hidden;whitespace: nowrap;">text text text text text text text</td>
</tr>

</table>

私もあなたのためにフィドルをしました!

于 2013-05-15T18:23:40.077 に答える
0

CSS のみの解決策を考えることができますが、前後のテキストが 1 行を超えていない場合にのみ機能します。http://jsfiddle.net/2UQhC/5/で見つけることができます(正しく表示するには、「実行」を押す必要があります)。

基本的な考え方は次のとおりです。

  • position: relative の親コンテナがあります
  • 文頭のパラと文末のパラがあります。それぞれには、ピボット ワードを含むスパンが先頭に含まれています。
  • 両方のパラグラフは position:absolute で配置されます。開始は right: 50% (つまり、右端は中央にあります) で、終了は left:50% です。
  • パラのスパンは両方とも中央に向かって浮いています。
  • スパンには、パーセンテージ ベースの負のマージンを持つ疑似要素が与えられ、それぞれのコンテナーが中央に押し出されます。パーセンテージベースの幅は、含まれるフロート (行ブロックではなく) の幅を使用します。つまり、これらのパーセンテージ幅の基準は常に、選択したフォントまたはフォント サイズでピボット ワードをレイアウトする実際の幅になります。

難解すぎる場合に備えて、ピボット ワードとして「lilacs」を使用したコードを次に示します。

HTML -

<div>    
    <p id="left"><span>LILACS</span>April is the cruellest month, breeding&nbsp;</p>
    <p id="right"><span>LILACS</span>&nbsp;out of the dead land</p>
</div>

そしてCSS -

div {
    position: relative;
}

#left {
    position: absolute;
    right: 50%;
}

#right {
    position: absolute;
    left: 50%;
}

#left span {
    float: right;
}

#right span {
    float: left;
    visibility: hidden;
}

#left span:after {
    content: "";
    margin-right: -50%;
}

#right span:before {
    content: "";
    margin-left: -50%;
}

これは、文の両側の幅に関係なく (複数行にならない限り) 機能し、IE8 plus 以降で機能するはずです。

于 2013-05-15T19:42:37.750 に答える