【问题标题】:Align text on slanted line在斜线上对齐文本
【发布时间】:2018-10-03 18:40:40
【问题描述】:

是否可以使文本在斜线上左对齐?它的对齐方式应该遵循倾斜的倾斜图像并需要对 IE9+ 的支持?

我的例子code

img {
  display: block;
  float: left;
  transform: rotate(-5deg);
  margin: 0 15px;
}
<div>
  <img src="http://placehold.it/150x250&text=img" alt="image" />
  <p>Lorem ipsum dolor sit amet. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu,luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in, paragraph.</p>
</div>

【问题讨论】:

标签: css css-shapes


【解决方案1】:

使用 LESS

你们让我想得更多,所以我想出了自己的丑陋解决方案。 我的想法是添加一堆额外的方形元素并计算其大小

.loop(@i) when (@i > 0){
  .loop((@i - 1));
  .space@{i}{
    width: floor(@i*@hSize/(1/tan(5deg)));
  }
}
@hSize: 15px;
.space {
  float: left;
  clear: left;
  width: @hSize;
  height: @hSize;
}

HTML:

<p>
  <span class="space space1"></span>
  <span class="space space2"></span>
  <!-- (...) -->
  <span class="space space11"></span>
  Lorem ipsum dolor sit amet. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu, luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in, paragraph.
</p>

概念证明:http://codepen.io/Tymek/pen/jEypOX?editors=110

@chipChocolate.py,我不使用 JavaScript 只是一个原则问题。如果有人想根据我的解决方案编写 JS/jQuery 代码,欢迎您。之后请在这里分享。

【讨论】:

  • 想知道您是否有一个版本也带有负度数(掩码会从大到小)?
  • 尝试在 HTML 中反转 &lt;span&gt; 顺序,或将计算更改为 width: floor(@hSize-@i*@hSize/(1/tan(5deg)));。那是懒惰的版本——我不想再检查三角函数了。
【解决方案2】:

警告: shape-outside 属性不应在实际项目中使用1。这个答案只是为了展示所需的输出如何 用这个属性来实现。

这是一个使用 shape-outside 属性 (modern webkit browsers only) 的示例:

DEMO

img {
  display: block;
  float: left;
  transform: rotate(-5deg);
  margin: 0 20px;
  -webkit-shape-outside: polygon(0 3%, 85% -3%, 100% 97%, 15% 103%);
  shape-outside: polygon(0 3%, 85% -3%, 100% 97%, 15% 103%);
}
<div>
  <img src="http://placehold.it/150x250&text=img" alt="image" />
  <p>Lorem ipsum dolor sit amet. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu,
    luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in,
    paragraph.</p>
</div>

1CSS Shapes Module Level 1 实际上(2016 年 5 月)的状态为“候选人推荐”。由于这意味着它是一项正在进行的工作,它可能随时更改,因此不应用于测试以外的其他用途。

使用shape-inside property 可以实现相同的布局,并为文本指定一个包含框,但我所知道的目前没有浏览器支持此属性。


有关跨浏览器方法,请参阅Tymek's answer

【讨论】:

  • 这并不像其他示例那样拥抱图像的右侧。
  • 请注意,目前 CSS3 形状规范仍在进行中,并未得到 W3C 的认可。
  • @SalmanA 因为这个答案越来越受欢迎,我确实认为它应该明确指出它不应该被使用。
  • 查看其他示例,其中文本的左边缘实际上具有与图像右边缘匹配的倾斜。在您的情况下,您只需将其保留为没有倾斜的文本。
  • 啊,我似乎比最低版本低一个版本。对于那个很抱歉。我什至没有意识到我的 chrome 已经有一段时间没有更新了。
【解决方案3】:

img {
  display: block;
  float: left;
  transform: rotate(-5deg);
  margin: 0 15px;
}
p {
  transform: skew(6deg);
  font-style: italic;
}
<div>
  <img src="http://placehold.it/150x250&text=img" alt="image" />
  <p>Lorem ipsum dolor sit amet. Vestibulum commodo volutpat a, convallis ac, laoreet enim. Phasellus fermentum in, dolor. Pellentesque facilisis. Nulla imperdiet sit amet magna. Vestibulum dapibus, mauris nec malesuada fames ac turpis velit, rhoncus eu,
    luctus et interdum adipiscing wisi. Aliquam erat ac ipsum. Integer aliquam purus. Quisque lorem tortor fringilla sed, vestibulum id, eleifend justo vel bibendum sapien massa ac turpis faucibus orci luctus non, consectetuer lobortis quis, varius in,
    paragraph.</p>
</div>

【讨论】:

  • 虽然看起来很有说服力,但显然右边的文字边缘也有歪斜
  • 不错但不可靠,因为它只适用于小于 5 或​​ 7 的角度值,并且文本看起来永远不会正常。
【解决方案4】:

我不能给你一个代码示例,这比倾斜变换更复杂。

您必须解析文本和其中包含的相关 DOM,并查找每个新的文本行(不是 br 或 \n,而是每个渲染行的每个第一个字符)。

有了这些信息,您可以添加一个根据图像位置和尺寸计算得出的padding-left

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 2017-12-15
    • 2018-10-18
    • 2011-12-16
    • 1970-01-01
    • 2014-02-23
    • 2019-04-15
    • 2020-10-07
    相关资源
    最近更新 更多