CSS 将文本旋转 n 度,但不旋转边界框?

2023-11-25

我知道 CSStransform: rotate属性,以及用于制作有角度的方法div元素,但有一个非常重要的设计元素我无法在任何地方找到解决:

如何保持边界框的角度

当我创建有角度的 div 元素时,我使用一个旋转的包装元素n度数,然后是子元素(通常是span)旋转的-n度。不幸的是,这会导致子元素拥有独立于其父元素的自己的矩形边界。

下图是一个非常基本的示例,每个人似乎都可以接受,其中子元素的文本位于无角度的矩形内,但这不是我想要的:

CSS rotated text outside the parent boundary

.parent {
    width: 200px;
    height: 200px;
    transform: rotate(30deg);
    background-color: blue; /* for clarity in img */
}
.child {
    display: inline-block;
    transform: rotate(-30deg);
    background-color: rgba(250, 80, 80, 0.4); /* for clarity in img */
}

值得注意的是,子元素必须有display: inline-block以便实际旋转。

这大约是我正在寻找的内容:

                                  Some
                            text goes here
                       and automatically just-
                  ifies to the shape of the parent
              element which in this case hap-
         pens to be a rectangle. Here's
            more text to show the
                full shape..
                     --

我尝试过使用text-orientation,不同的位置值组合,以及其他技巧transform,但我无法让文本表现得好像父元素是其边界;相反,它只是创建自己的!

我可以接受 JavaScript 解决方案,但纯 CSS 肯定会更好。希望这对于有资格的个人解决问题来说是足够的信息。

谢谢你的时间!


我认为近似这一点的唯一方法是考虑shape-outside但获得正确的值将非常棘手。

下面有一个插图。您所要做的就是更新宽度/高度值来控制整体形状:

.container {
  display: flex;
  width: 400px;
  margin: 20px auto;
  text-align: justify;
}

.box>div {
  display: inline;
}

.box>div:before,
.box>div:after {
  content: "";
  float: left;
  shape-outside: linear-gradient(var(--d), #fff 49%, transparent 50%);
  background: linear-gradient(var(--d), transparent 49.5%, red 50% 51%, transparent 51.5%);
}

.box>div:after {
  float: right;
}

.box>div:first-child:before {
  --d: to bottom right;
  width: 60%;
  height: 120%;
}

.box>div:first-child:after {
  --d: to bottom left;
  width: 40%;
  height: 140%;
}

.box>div:last-child:before {
  --d: to top right;
  width: 40%;
  height: 140%;
}

.box>div:last-child:after {
  --d: to top left;
  width: 60%;
  height: 120%;
}
<div class="container">
  <div class="box">
    <div></div>
    <div></div>
    Lor em ipsum dolor sit amet, consectetur adipiscing elit. Sed id dolor nisl. Curabitur efficitur imperdiet dui quis molestie. Sed interdum elit ut sem pharetra lacinia. Proin porta auctor risus ac tempus. Etiam mollis malesuada diam at ultrices. Cras
    vel congue nisl, non auctor lorem. Nam ac lobortis nulla.
  </div>
</div>

CSS shape-outside custom text

我们可以添加更多的 CSS 变量以使其更加灵活:

.container {
  --w: 60%;
  --h1: 110%;
  --h2: 130%;
  display: inline-flex;
  width: 300px;
  margin: 20px auto 200px;
  text-align: justify;
}

.box>div {
  display: inline;
}

.box>div:before,
.box>div:after {
  content: "";
  float: left;
  shape-outside: linear-gradient(var(--d), #fff 49%, transparent 50%);
  background: linear-gradient(var(--d), transparent 49.5%, red 50% 51%, transparent 51.5%);
}

.box>div:after {
  float: right;
}

.box>div:first-child:before,
.box>div:last-child:after {
  --d: to bottom right;
  width: var(--w);
  height: var(--h1);
}

.box>div:first-child:after,
.box>div:last-child:before {
  --d: to bottom left;
  width: calc(100% - var(--w));
  height: var(--h2);
}

.box>div:last-child:before {
  --d: to top right;
}

.box>div:last-child:after {
  --d: to top left;
}
<div class="container">
  <div class="box">
    <div></div>
    <div></div>
    Lor em ipsum dolor sit amet, consectetur adipiscing elit. Sed id dolor nisl. Curabitur efficitur imperdiet dui quis molestie. Sed interdum elit ut sem pharetra lacinia. Proin porta auctor risus ac tempus. Etiam mollis malesuada diam at ultrices. Cras
    vel congue nisl, non auctor lorem. Nam ac lobortis nulla.
  </div>
</div>

<div class="container" style="--w:50%;--h1:120%;--h2:120%;">
  <div class="box">
    <div></div>
    <div></div>
    Lor em ipsum dolor sit amet, consectetur adipiscing elit. Sed id dolor nisl. Curabitur efficitur imperdiet dui quis molestie. Sed interdum elit ut sem pharetra lacinia. Proin porta auctor risus ac tempus. Etiam mollis malesuada diam at ultrices. Cras
    vel congue nisl, non auctor lorem. Nam ac lobortis nulla.
  </div>
</div>

<div class="container" style="--w:30%;--h1:120%;--h2:120%;">
  <div class="box">
    <div></div>
    <div></div>
    Lor em ipsum dolor sit amet, consectetur adipiscing elit. Sed id dolor nisl. Curabitur efficitur imperdiet dui quis molestie. Sed interdum elit ut sem pharetra lacinia. Proin porta auctor risus ac tempus. Etiam mollis malesuada diam at ultrices. Cras
    vel congue nisl, non auctor lorem. Nam ac lobortis nulla.
  </div>
</div>

CSS text shape rotated rectangle

请注意,这些值与您使用的文本密切相关。您将需要大量的试验和错误才能获得最佳值(我怀疑是否存在适用于任何内容的通用解决方案......)

相关问题:如何使用边框半径将文本环绕在形状周围?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CSS 将文本旋转 n 度,但不旋转边界框? 的相关文章

  • 如何在jqplot中显示饼图之外的标签?

    Jqplot 有如下图表 jqplot 图表 http www jqplot com tests pie donut charts php 我的问题是如何在 a 之外显示标签jqplot chart像下面这样high chart 高图表可以
  • 输入类型=图像 - onclick(),将触发其事件,但在 jquery 中的函数上表现不佳

    我认为这可能是两篇文章 2个问题 所以如果你对此发表评论 我会将它们分开 主要问题实际上是 我怎样才能为按钮设置图像背景 简单且正确 我想现在我可以确定这些事实了 因为我在将图像设置为按钮背景时遇到了 小 问题 我想 好吧 如果很难设置的话
  • 使用画布仅删除文本而不删除图像

    我正在尝试删除画布元素中的文本 而不丢失Background Image of the Canvas Element 我想我需要保存Imagesrc并把它还给Canvas Element之后clearRect 但我不知道该怎么做 我希望有人
  • 我的 CSS 未在 Internet Explorer 11 和 Firefox 中加载!仅适用于 Chrome

    我正在创建一个简单的网页 我的 CSS 只能在 Chrome 中使用 它在 Firefox 和 IE11 中都不起作用 这是我的 HTML h1 b u Adding a new Visitor u b h1 br div class wr
  • 设置浏览器窗口最小化的最小尺寸限制?

    有没有办法在所有浏览器中手动设置浏览器窗口的最小尺寸 你可以试试 body min width 600px 一旦视口小于 600 像素 您将得到一个水平滚动条 这仅适用于支持 min width CSS 属性的现代浏览器 我认为不可能限制用
  • 在我的 index.php 中加载 CSS 和 JS 等资源时出现错误 403

    我使用的是 Linux Elementary OS 并在 opt 中安装了 lampp My CSS and JS won t load When I inspect my page through browser The console
  • HTML5 历史 API

    我如何使用 HTML5 历史 api 我确实经历过https developer mozilla org en DOM Manipulated the browser history https developer mozilla org
  • 来自 JSON 的 Angular 8 动态表单

    我正在尝试从 JSON 模式递归生成动态表单 但我正在努力解决找不到表单控件的问题 这是代码示例 我收到这个错误 错误错误 找不到名称为 createdAt 的控件 我尝试了不同的方法 但仍然存在问题 我知道我错过了一些东西 所以请帮忙 任
  • 用隐藏单元格补充 colspanned 表格有什么不好吗?

    我一直在表格上开发一些排序和选择功能 我发现在具有跨单元格的表格中定位非常困难 我只是添加了跨区单元格并将其隐藏 它看起来不错 它与我的 js 一起工作 非常适合索引 但我想知道这是否是合法的方法 stuffing display none
  • jquery 验证错误位置

    这看起来很简单 但我无法弄清楚 我正在使用 jquery 验证插件 我验证所有文件 但我想要的是在输入文本行中显示验证消息警报 例如在电子邮件输入中 请填写电子邮件地址 但现在它出现在所有字段下 在我的html中
  • 如何并排放置两个

    我有两个 div 我想要并排放置的元素 如下所示 navigation content 我想要导航 div 根据需要尽可能大 但不能更大 收缩以适应行为 内容 div 然后应该填充剩余的空间 如何在不指定百分比 例如 20 80 的情况下使
  • 按百分比设置 bootstrap 模态身高

    我正在尝试制作一个带有主体的模态 当内容变得太大时 该主体会滚动 但是 我希望模式能够响应屏幕尺寸 当我将最大高度设置为 40 时 它没有任何效果 但是 如果我将最大高度设置为 400px 它会按预期工作 但不会响应 我确信我只是错过了一些
  • 如何更改 Bootstrap 3 div 列顺序

    正在做我的第一个响应式设计 在 Bootstrap 3 中可能会出现类似的情况 在 lg 上更改此设置 a b c sm 上的这个 a c b 您可以使用两个 div 一个用于第一类型的布置 另一个用于第二类型的布置 第一个仅在 lg 中显
  • Jquery 中的动态滚动位置

    请帮助我解决以下情况 我有 3 个页面 当滚动到达第二页时 用户滚动页面 它必须找到特定的 ID 然后触发一个函数 一旦第三页开始 另一个函数就会触发 根据要求我不应该使用任何插件
  • iOS7 中“-webkit-overflow-scrolling: touch” 最初的屏幕外元素被破坏

    既然转基因种子已经发布了 我们现在可以谈谈了 看起来 iOS7 中的 webkit overflow scrolling touch 已损坏 最初不在屏幕上的元素的触摸事件不会触发 或者在某些情况下只是不可靠 这是一个例子
  • 如何延迟加载嵌入在 iframe 上的 YouTube 视频?

    如何将延迟加载应用于iframe嵌入视频 我尝试添加loading eager loading auto and loading lazyload 您可以使用srcdoc你里面的属性iframe标签来加载图像 请参阅以下示例作为参考
  • 如何将送货地址复制到帐单地址

    我想知道是否可以将送货地址复制到帐单地址 当用户单击与送货地址相同的复选框时 送货地址值将被复制到账单输入字段 我完成了大部分部分 但我不确定如何将选择菜单 状态 值复制到帐单地址 我真的很感谢任何帮助 My code document r
  • 覆盖并重置 CSS 样式:auto 或 none 不起作用

    我想覆盖为所有表定义的以下 CSS 样式 table font size 12px width 100 min width 400px display inline table 我有一个特定的表 其类名为 other 最后的餐桌装饰应该是这
  • 为什么“tbody”不设置表格的背景颜色?

    我在用 tbody 作为 CSS 选择器来设置background color在一个表中 我这样做是因为我有多个 tbody 表内的部分 它们具有不同的背景颜色 我的问题是 当使用border radius在细胞上 细胞不尊重backgro
  • 需要有关 React Js 的帮助

    我是 React Js 新手 我的代码无法正常工作 请看下面 这是我的脚本文件Main jsx 该文件由 React 编译 输出放置在 dist 文件夹下的 main js 文件中 var react require react react

随机推荐

  • 如何允许匿名上传到云存储

    我需要我的用户将文件上传到我的 Google Cloud Storage 而无需通过 Google 进行身份验证 这些用户主要是运行我的应用程序的 Windows 台式机 笔记本电脑用户 在阅读了不同的身份验证机制后 我发现可断点续传可能就
  • OSX 10.9.2 上的 Java 1.7 作为 1.5 运行?

    为这件事揪着我的头发 java version and javac version两者都报告相同的 1 7 0 45 但是当我尝试编译最简单的类时 我收到一个类文件错误 gt cat A java public class A gt jav
  • 带有语句主体的 lambda 表达式无法转换为 nopCommerce 中的表达式树 [重复]

    这个问题在这里已经有答案了 我尝试在 nopCommerce 3 0 中创建 linq 联接查询 我在 linq 中加入两个表并写入 代码成功 但视觉工作室智能感知显示错误 例如 带有语句体的 lambda 表达式无法转换为表达式树 请看下
  • 为什么需要“-lpthread”?

    所以我的问题是 为什么在编译命令末尾需要 lpthread 为什么这个命令有效 gcc o name name c lpthread 但这不会 gcc o name name c 我在我的 C 代码中使用 pthread h 库 我已经在网
  • Jersey 客户端上传进度

    我有一个球衣客户端 需要上传一个足够大的文件以需要进度条 问题是 对于需要几分钟的上传 我看到传输的字节数达到 100 申请一开始 然后需要几分钟时间来打印 on finish 字符串 就好像字节被发送到缓冲区 我正在读取传输到缓冲区的速度
  • 如何修复 Vue3 客户端版本的“unsafe-eval”错误?

    我在我的应用程序中使用 Express cors 和头盔 Vue3仅在客户端使用 库文件自托管在public文件夹中 我只是做 将模块添加到客户端 问题是当我使用它时 它总是给我一个Uncaught EvalError Refused to
  • Java 中文件存在的锁定

    简洁版本 为什么要File createNewFile 不能用于文件锁定 或者更具体地说 如果使用它来锁定应用程序数据目录是否会出现问题 Details 我想使用锁定文件来保护我的应用程序数据目录 如果该文件lock存在 目录被锁定 应用程
  • SqlBulkCopy 从列表 <>

    如何使用 SqlBulkCopy 从简单对象的 List 中进行大量插入 我是否实现自定义 IDataReader With 快速会员 您可以做到这一点 而无需通过DataTable 在我的测试中 性能提高了一倍多 using var bc
  • 如何在我的应用程序中手动包含 VCL 样式?

    我有一个应用程序 它使用条件能够将其编译为 VCL 表单应用程序或 Delphi XE2 中的 Windows 服务应用程序 但是 由于我手动更改了项目的主源文件 IDE 将不再允许我使用标准项目选项窗口进行某些修改 具体来说 我无法选择要
  • 如何在 string.replace 中输入正则表达式?

    我需要一些关于声明正则表达式的帮助 我的输入如下 this is a paragraph with lt 1 gt in between and then there are cases where the lt 99 gt number
  • XMLHttpRequest upload.onprogress 立即完成

    我正在尝试使用 HTML5 制作一个带有进度表的文件上传器 这是我的代码
  • C++/CLI:相对于 C# 的优势

    与 C 相比 托管 C CLI 有什么主要优势吗 绝对不是我认为的语法 因为 C CLI 中的以下代码非常丑陋 C CLI 代码 Out List
  • 日志方法之间的区别

    我是 android 新手 我使用以下方法打印 log cat Log w Tag String text 并记录文本打印 但经过一段时间的搜索后 我找到了更多打印 logcat 的方法 例如 Log v Log d 现在我对这些方法感到困
  • 跨 JavaEE Web 服务使用单个 MongoClient

    在阅读了 mongo 文档后 该文档说 MongoClient 的每个实例都处理自己的池 我该如何在整个应用程序中只拥有一个实例呢 这看起来可能是使用单例 bean 的场景 但这似乎会违背连接池的目的 如果一次只有一个用户能够访问包含 Mo
  • 传递给 pytest 夹具的参数可以作为变量传递吗?

    我有两个简单的测试设置 我试图将它们分组到一个夹具中 并希望测试函数将 参数 传递给夹具 这是一个人为的例子 来解释我的问题 假设我有以下 pytest 夹具 pytest fixture scope module params param
  • DataTable.Select日期格式问题

    我正在使用 DataTable Select 在日期范围内过滤数据表 我的条件字符串是 CreatedOn gt 03 11 2009 00 00 00 AND CreatedOn lt 03 11 2009 23 59 00 此过滤器不返
  • UnicodeEncodeError:“ascii”编解码器无法对特殊名称的字符进行编码[重复]

    这个问题在这里已经有答案了 我的 python 版本 2 7 脚本运行良好 可以从本地 html 文件获取一些公司名称 但是当涉及到某些特定的国家 地区名称时 它会给出此错误 UnicodeEncodeError ascii 编解码器无法编
  • rgba 在 IE9 中不工作

    由于某种原因 我无法使用 IE9 在 CSS 中使用 rgba 我已经使用 Chrome 进行了测试 效果很好 不知道出了什么问题 我的 HTML 是
  • Eclipse + Maven:强制执行环境“JavaSE-1.6”而不是固定的JDK

    我使用 Eclipse 作为 IDE 并在其外部使用 Maven 以使所有依赖项保持最新并更新 Eclipse 项目 在 Eclipse 中 我通常指定 JRE 系统库作为任何 Java 项目的执行环境 通常是 JavaSE 1 6 在 p
  • CSS 将文本旋转 n 度,但不旋转边界框?

    我知道 CSStransform rotate属性 以及用于制作有角度的方法div元素 但有一个非常重要的设计元素我无法在任何地方找到解决 如何保持边界框的角度 当我创建有角度的 div 元素时 我使用一个旋转的包装元素n度数 然后是子元素