【问题标题】:Is "line feed" without "carriage return" possible in HTML?HTML中是否可以“换行”而没有“回车”?
【发布时间】:2016-03-11 09:37:52
【问题描述】:

示例文本:

And you, 
         could you have played 
                               a nocturne
On a waterspout for a flute?

这是Vladimir Mayakovsky 的一首诗的摘录,展示了他标志性的“梯形”乐句。

原文:

А вы
     ноктюрн сыграть
                     могли бы
На флейте водосточных труб?

另一个例子:

Простенького паренька
подцепила
          барынька.
Он работать,
             а ее
                  не удержать никак -
бегает за клёшем
                 каждого бульварника.
Что ж,
       сиди
            и в плаче
                      Нилом нилься.

基本上有没有回车的换行。我使用预先格式化的文本来展示这个概念。是否可以在 HTML 中实现常规比例字体?

【问题讨论】:

    标签: html css newline


    【解决方案1】:

    您可以使用带有上边距的嵌套内联块来做到这一点。

    span { 
      margin-top: 1em; 
      display: inline-block; 
      vertical-align: top; 
    }
    <div>А вы<span>ноктюрн сыграть<span>могли бы</span></span></div>
    <div>На флейте водосточных труб?</div>

    将所需的^ 标记转换为这种嵌套跨度格式的逻辑是:

    function preprocess(poem) {
      return poem.replace(/\^.*$/m, function(m) { 
        return "<span>" + preprocess(m.slice(1)) + "</span>"; 
      });
    }
    

    【讨论】:

      【解决方案2】:

      [您可以尝试在各种跨度元素中使用正负垂直对齐:]

      在 OP cmets 之后编辑。

      如果您可以忍受将其包装在 div 中并添加段落,您可以使用符号作为换行符并自动循环它们:

      str = $('#input').html();
      str = str.replace(/\^/, '<span>').replace(/\^/g, '</span><span>').replace(/<\/p>/, '</span><\/p>');
      console.log(str);
      $('#output').html(str);
      para = $('#output p');
      para.each(function() {
        span = $(this).find('span');
        for (var j = 0; j < span.length; j++) {
          span[j].style.verticalAlign = -90 * (j + 1) + '%';
        }
      });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <div id="input" style="display:none">
        <p>А вы ^ноктюрн сыграть ^могли бы</p>
        <p>На флейте водосточных труб?</p>
        <p>А вы ^ноктюрн сыграть ^могли бы</p>
        <p>На флейте водосточных труб?</p>
        <p>А вы ^ноктюрн сыграть ^могли бы</p>
        <p>На флейте водосточных труб?</p>
      </div>
      <div id="output"></div>

      [您可能需要使用百分比来完全按照您想要的方式得到它。]

      【讨论】:

      • 嗯,这是一个选项,但即使是一首诗,它也需要做很多乏味的工作,因为您需要为每一行手动调整百分比。考虑到“正确的”百分比是显而易见的——下一行应该从上一行完成的地方开始——有没有办法自动化这个任务?理想情况下,我想要某种特殊符号来表示换行 - “你,^could you have play ^a nocturne”。
      • 当它都可以在 CSS 中完成时,为什么被接受的解决方案会是一个涉及 JS 的解决方案,这非常神秘。
      【解决方案3】:

      根据需要使每一行的float: left div 数尽可能多。

      • Div 1 持有And you,
      • Div 2 持有&lt;br&gt;could you...
      • Div 3 持有&lt;br&gt;&lt;br&gt;a nocturne

      假设您可以在输入/导入时正确解析它,那么这种方式应该可以处理任何诗歌。

      div { float: left; }
      <div>And you,</div>
      <div><br>could you have played</div>
      <div><br><br>a nocturne</div>

      【讨论】:

      • 抱歉 - 我总是忘记正确编写代码:应该阅读:Div 1 持有而你,Div 2 持有
        你能... Div 3 持有

        夜曲 a夜曲
      • 再次抱歉 - 每个 div 应该是 style="float:left; width:auto; display:inline-block" 除了第一个 div 应该是明确的:both 而不是 float:left
      • 您可以编辑您的答案以添加新信息,而不是发布 cmets。但是width: auto已经是默认值了,float: leftdisplay:inline-block阻塞成display:block。所以不需要。
      • 是的,Oriol,你是对的 - 更简单的答案就是 display:inline-block,看起来 torazaburo 的答案要简洁得多
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 2011-12-27
      • 1970-01-01
      相关资源
      最近更新 更多