javascript - 均匀分布旋转文本

标签 javascript jquery html css

我想创建一个带有旋转文本的水平菜单(比如 -50 度)。 我的代码如下所示:

 .menuItem {
   text-align: right;
   margin-top: 3vh;
   list-style-type: none;
   display:inline-block;
  }

  .menuButton{
      text-align: right;
      background:none;
      padding: 0;
      border:none;
      -webkit-transform: rotate(310deg);
      -moz-transform: rotate(310deg);
      -ms-transform: rotate(310deg);
      -o-transform: rotate(310deg);
      transform: rotate(310deg);
      -webkit-transform-origin:100%;
      -moz-transform-origin:100%;
      -ms-transform-origin:100%;
      -o-transform-origin:100%;
      transform-origin:100% ;
  }
      <ul class="menu">
        <li class="menuItem">
          <button class="menuButton" id="newsButton">Button</button>
        </li>
        <li class="menuItem">
          <button class="menuButton" id="aboutButton">LoooooooongButton</button>
        </li>
        <li class="menuItem">
          <button class="menuButton" id="contactsButton">ShortButton</button>
        </li>
        <li class="menuItem">
          <button class="menuButton" id="otherStuffButton">LoooooooooooooongestButton</button>
        </li>

      </ul>

我已经设法旋转每个按钮,右对齐文本,并将它们水平放置,我面临的唯一问题是我无法均匀分布文本,因为文本较长的按钮与短文本相比,他们离左 sibling 的距离更远。 这个问题的最佳解决方案是什么? 谢谢大家。

更新

我刚刚通过 javascript 编写了一个简单的脚本,它获取容器宽度并均匀分布按钮:

var menuWidth = $('.menu').width();
var elements = document.querySelectorAll(".menuItem");
for (var element of elements){
    let ind = $(element).index();
    $(element).css("left", $(element).height()-$(element).width()+(menuWidth/(elements.length))*ind);
}

显然,这里的技巧是将 position: absolute 分配给所有菜单项,并将 position: relative 分配给菜单。 谢谢大家 ;)

最佳答案

这非常棘手,因为变换是纯粹的视觉效果,不会影响元素的实际位置。

通常,一种解决方案是根据需要调整元素的大小并绝对定位内容。

有点像这样:

.menu {
  display: flex;
  margin: 4em;
}
.menuItem {
  text-align: right;
  list-style-type: none;
  transform-origin: right center;
  transform: rotate(310deg);
  flex: 0 0 1.2em;
  height: 1.4em;
  position: relative;
  background: pink;
}
.menuButton {
  background: none;
  padding: 0;
  border: none;
  position: absolute;
  top: 0;
  right: 0;
}
<ul class="menu">
  <li class="menuItem">
    <button class="menuButton" id="newsButton">Button</button>
  </li>
  <li class="menuItem">
    <button class="menuButton" id="aboutButton">LoooooooongButton</button>
  </li>
  <li class="menuItem">
    <button class="menuButton" id="contactsButton">ShortButton</button>
  </li>
  <li class="menuItem">
    <button class="menuButton" id="otherStuffButton">LoooooooooooooongestButton</button>
  </li>

</ul>

现在这有缺点,因为 li 的大小没有动态大小,但我将其留在这里作为一般指南。

关于javascript - 均匀分布旋转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39191975/

相关文章:

javascript - 使用 Moment Timezone 将 UTC 转换为太平洋时间 (javascript)

javascript - 带有指向另一页的超链接的 Jquery Slideshowify

javascript - 如何设置带有格式化日期的 jQuery DatePicker?

html - 网站文字变大或变小

javascript - 如何从 Ajax() 的 innerHTML 缓存 JS 文件?

javascript - Css 缩放固定横幅

javascript - Rails 4 - 在单击事件上引导多个处理程序不起作用

c# - Img 标签在 Windows Azure 云服务中不显示图像

html - 链接不在固定导航中居中

html - li 标签不应显示多个 li 列表标签中的任何内容