全宽两列,内容左对齐,第二列在右页边框对齐

Two columns over full width with left-aligned content, second column aligned at right page border

提问人:Bobby 提问时间:7/3/2023 更新时间:7/3/2023 访问量:40

问:

我目前正在格式化一本电子书,遇到了一个小问题。假设以下所需布局:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula,
ipsum accumsan  sollicitudin  mollis,  leo est porttitor lacus, id facilisis
tellus  lacus  blandit  metus.  Aenean  imperdiet  in eros facilisis mollis.

Great-grandson of Alexios III                            Son of Michael VIII
Son and co-ruler of Andronikos II                        Son of Michael IX
Son of Andronikos III                                    Son of John V

Aliquam  quam  eros,  eleifend vel erat ut, eleifend laoreet quam. Phasellus
euismod  ex  pellentesque  lacus  auctor, malesuada efficitur nunc pharetra.
Aliquam  ut  condimentum  neque.  Suspendisse ornare nibh non nisi pharetra,
ac       porttitor       sapien       venenatis.      Suspendisse   potenti.

文本对齐,两列都包含左对齐的文本,但第二列在右页边框处对齐。

以下是我当前使用表格的解决方案的演示

<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula,
ipsum accumsan sollicitudin mollis, leo est porttitor lacus, id facilisis
tellus lacus blandit metus. Aenean imperdiet in eros facilisis mollis.</p>

<table>
  <tr>
    <td>Great-grandson of Alexios III</td>
    <td>Son of Michael VIII</td>
  </tr>
  <tr>
    <td>Son and co-ruler of Andronikos II</td>
    <td>Son of Michael IX</td>
  </tr>
  <tr>
    <td>Son of Andronikos III</td>
    <td>Son of John V</td>
  </tr>
</table>

<p>Aliquam quam eros, eleifend vel erat ut, eleifend laoreet quam. Phasellus
euismod ex pellentesque lacus auctor, malesuada efficitur nunc pharetra.
Aliquam ut condimentum neque. Suspendisse ornare nibh non nisi pharetra,
ac porttitor sapien venenatis. Suspendisse potenti.</p>
p {
  text-align: justify;
}

table {
  width: 100%;
}

table td {
  white-space: nowrap;
}

table tr > td:first-child {
  width: 100%;
}

但是,这有一个严重的缺点,即当字体大小增加和/或显示宽度减小时,行为非常糟糕。在这种情况下,内容使得无法阅读,因为这些线永远不会被换行,而是开始相互重叠和/或被推出界外。nowrap

有没有一种解决方案可以采用这样的布局,但要对内容进行包装以适应更大的字体和更小的显示,这将与电子书阅读器一起使用?理想情况下,它还应该保留文本转语音软件的项目顺序(左-右、上-下),而不仅仅是视觉上的。

HTML CSS epub

评论

0赞 Kristiyan 7/3/2023
你可以使用 CSS ;当屏幕变得足够小时,您可以将其设置为,然后垂直放置它们。这样,它们将保留软件的顺序,并使其可读,而无需侧滚动。你想让我添加一个答案并告诉你这是怎么发生的吗?@media query<tr>display: blocktext-to-speech
0赞 Bobby 7/3/2023
当然,会很好,因为我不确定在这种情况下如何水平调整行的大小。

答:

1赞 Kristiyan 7/3/2023 #1

想象一下这样的事情。这样,它们将保留软件的顺序,并使其可读,而无需侧滚动。text-to-speech

p {
  text-align: justify;
}

table {
  width: 100%;
}

table td {
  white-space: nowrap;
}

table tr>td:first-child {
  width: 100%;
}

@media only screen and (max-width: 400px) {
  tr, td {
    display: block;
  }
  
  tr {
    margin-bottom: 10px;
  }
  
  .value::before {
    content: "- ";
    padding-left: 10px;
  }
}
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula, ipsum accumsan sollicitudin mollis, leo est porttitor lacus, id facilisis tellus lacus blandit metus. Aenean imperdiet in eros facilisis mollis.</p>

<table>
  <tr>
    <td>Great-grandson of Alexios III</td>
    <td class="value">Son of Michael VIII</td>
  </tr>
  <tr>
    <td>Son and co-ruler of Andronikos II</td>
    <td class="value">Son of Michael IX</td>
  </tr>
  <tr>
    <td>Son of Andronikos III</td>
    <td class="value">Son of John V</td>
  </tr>
</table>

<p>Aliquam quam eros, eleifend vel erat ut, eleifend laoreet quam. Phasellus euismod ex pellentesque lacus auctor, malesuada efficitur nunc pharetra. Aliquam ut condimentum neque. Suspendisse ornare nibh non nisi pharetra, ac porttitor sapien venenatis. Suspendisse potenti.</p>

要在代码片段中对其进行测试,您可以在桌面上调整窗口大小以使其更窄,或者在移动设备上打开它。

评论

0赞 Bobby 7/3/2023
我明白了,这就是你的意思。这是一种可能性,但我必须考虑它是否可接受,因为它仍然没有包装文本。但是一个巧妙的想法。
0赞 DONGMO BERNARD GERAUD 7/3/2023 #2

我不认为你必须使用表格来做到这一点。您可以简单地这样做:

<div class="container">
        <div class="top-section">
            <p>
                Lorem ipsum dolor sit amet, consectetur adipiscing elit. Curabitur vehicula,
                ipsum accumsan sollicitudin mollis, leo est porttitor lacus, id facilisis
                tellus lacus blandit metus. Aenean imperdiet in eros facilisis mollis.
            </p>
        </div>

        <div class="middle-section">
            <div class="left">
                <ul>
                    <li>Great-grandson of Alexios III</li>
                    <li>Son and co-ruler of Andronikos II</li>
                    <li>Son of Andronikos III</li>
                </ul>
            </div>
            <div class="right">
                <ul>
                    <li>Son of Michael VIII</li>
                    <li>Son of Michael IX</li>
                    <li>Son of John V</li>
                </ul>
            </div>
        </div>

        <div class="bottom-section">
            <p>
                Aliquam quam eros, eleifend vel erat ut, eleifend laoreet quam. Phasellus
                euismod ex pellentesque lacus auctor, malesuada efficitur nunc pharetra.
                Aliquam ut condimentum neque. Suspendisse ornare nibh non nisi pharetra,
                ac porttitor sapien venenatis. Suspendisse potenti.
            </p>
        </div>
    </div>
.container {
    width: 50%;
    margin: auto;
}

.middle-section {
    display: flex;
    justify-content: space-between;
    align-items: center;
}

ul {
    margin: 0;
    padding: 0;
}

li {
    margin: 0;
    padding: 0;
    list-style: none;
}

你得到这个:

enter image description here

评论

0赞 Bobby 7/3/2023
是的,这是一种可能性,但如果我认为正确的话,这不会保留文本到语音的顺序。
0赞 Bobby 7/3/2023
另外,您的答案中是否缺少CSS代码?在声明的 HTML 中使用了相当多的类。
0赞 DONGMO BERNARD GERAUD 7/3/2023
Bobby,您可以添加以下内容来证明文本的合理性:.top-section, .bottom-section { text-align: justify;