提问人:Bobby 提问时间:7/3/2023 更新时间:7/3/2023 访问量:40
全宽两列,内容左对齐,第二列在右页边框对齐
Two columns over full width with left-aligned content, second column aligned at right page border
问:
我目前正在格式化一本电子书,遇到了一个小问题。假设以下所需布局:
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
有没有一种解决方案可以采用这样的布局,但要对内容进行包装以适应更大的字体和更小的显示,这将与电子书阅读器一起使用?理想情况下,它还应该保留文本转语音软件的项目顺序(左-右、上-下),而不仅仅是视觉上的。
答:
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;
}
你得到这个:
评论
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;
评论
@media query
<tr>
display: block
text-to-speech