如何將文本與對角線圖像對齊

已發表: 2022-02-16
對角線圖像文本

一位 OSTraining 客戶要求一種方法來對齊對角線圖像旁邊的文本,同時保持兩個元素之間的空間。

我的第一個想法是在文本的特定點添加斷線,但這不起作用,因為該網站是響應式的。

在與客戶交談後,我們提出了一個更優雅的解決方案......

用例

在這個例子中,文本需要左對齊,圖像右對齊。 這裡真正的挑戰是文本不能覆蓋圖像。 我們想要的結果如下圖所示:

2

解決方案

我們可以使用動態寬度值添加浮動在右側的空 div,以強製文本不覆蓋圖像。 請注意,在此示例中,圖像是使用 CSS 添加為背景的。

1

的HTML

此示例的 HTML 如下所示:

 <div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <div class="spacing"></div>    <p>A buch of dummy text goes here...</p> </div>

您可以注意到具有間距類的多個空 div。 這些元素與一些 CSS 結合生成文本和圖像之間的間距。

間距 div 的數量等於填充圖像高度所需的文本行數。 在此示例中,圖像需要覆蓋 14 行。

CSS

為了更好地解釋,我將把所需的 CSS 分成幾個部分。

 #container {  background-image: url(bg.png);  background-repeat: no-repeat;  background-position: right top;  background-size: 300px auto;  min-height: 300px; }

將圖像定義為具有特定位置和大小的背景。

 #container p {  line-height: 22px;  font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;  font-size: 14px; }

#container p選擇器引用文本。 定義 font-size 和 line-height 以稍後計算其他屬性的值非常重要。

 .spacing {  float: right;  clear: right;  height: 22px; }

此屬性告訴空 div 浮動在右側。 請注意, height的值與我們在段落中用於line-height的值相同。

 .spacing:nth-child(1) {  width: 305px; } .spacing:nth-child(2) {  width: 283px; } .spacing:nth-child(3) {  width: 261px; } .spacing:nth-child(4) {  width: 239px; } .spacing:nth-child(5) {  width: 217px; } .spacing:nth-child(6) {  width: 195px; } .spacing:nth-child(7) {  width: 173px; } .spacing:nth-child(8) {  width: 151px; } .spacing:nth-child(9) {  width: 129px; } .spacing:nth-child(10) {  width: 107px; } .spacing:nth-child(11) {  width: 85px; } .spacing:nth-child(12) {  width: 63px; } .spacing:nth-child(13) {  width: 41px; } .spacing:nth-child(14) {  width: 19px; }

上面的代碼是可能需要使用計算器的有趣部分。

.spacing:nth-child(1)選擇的寬度值將應用於具有間距類的第一個 div,以同樣的方式.spacing:nth-child(2)定義稍小的寬度,依此類推,直到到達間距元素14 號。

將動態值從高到低定義到右側每個空 div 的原因可以使文本與左側對齊而不覆蓋圖像。

4

話雖如此,我們如何計算每個空 div 的寬度? 答案需要一個基於以下值的小公式:

  • 文本的行高(在我的示例中為 22px)
  • 背景尺寸(本例中為 300 像素)

第一個空 div 的寬度是 305 像素,這是定義的背景寬度加上 5 個額外像素的值,我決定包括以避免文本太靠近圖像的邊緣。

響應式支持

使用示例代碼,該設計在任何屏幕尺寸下都能正常工作。 查看演示並調整瀏覽器大小以查看它的實際效果。

查看演示

獎金:少

直接使用 CSS 的一種替代方法是 LESS。 如果您不熟悉 LESS,我們有一個教程。

您可以使用 LESS 生成相同的結果,從而輕鬆地為每個具有間距類的 div 創建多個寬度值,而無需擔心數學問題。

 @textHeight: 22px; @backgroundWidth: 300px; @extraSpacing: 5px; @initialWidth: @backgroundWidth + @extraSpacing; @textLines: @backgroundWidth / @textHeight;

通過變量確定文本的高度和背景寬度。

 #container {    background-image: url(bg.png);    background-repeat: no-repeat;    background-position: right top;    background-size: @backgroundWidth auto;    min-height: @backgroundWidth; }

容器的屬性。

 #container p {    line-height: @textHeight;    font-family: Arial, "Helvetica Neue", Helvetica, sans-serif;    font-size: @textHeight - 8; } .spacing {    float: right;    clear: right;    height: @textHeight; }

基於一些變量動態計算的文本和間距屬性。

 .generate-spacing(@i, @end) when (@i <= @end) {    .spacing:nth-child(@{i}) {        width: @initialWidth - ((@i - 1) * @textHeight);    }    .generate-spacing((@i + 1), @end); } .generate-spacing(1, @textLines);

為所有空 div 生成動態寬度的循環。

在 Codepen 中測試此代碼