javascript - 使绝对定位按钮与其内容宽度相同

标签 javascript jquery css

我有一些 float 按钮,我希望它们的宽度与其内容一样宽。内容可能有几行长。

我尝试了很多方法,但似乎没有任何效果。有什么想法可以实现这一点吗?

$('button').css('width', $('button span').outerWidth() + 'px')

$.each($('button'), (i, v) => {
  $(v).css('width', $(v).find('span').outerWidth() + 'px');
  $(v).css('top', i*100 + 'px');
});
section {
  position: relative;
  width: 300px;
}

button {
  position: absolute;
  padding: 0;
  text-align: left;
}

span { background: lightcoral; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>

  <button>
    <span>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veritatis iure nostrum dicta cumque. Nisi facilis corporis hic, pariatur molestiae error distinctio architecto quas itaque deserunt aliquam quo molestias dolor ex!</span>
  </button>

  <button>
    <span>Lorem ipsum dolor sit amet, consectetur adipisicing.</span>
  </button>

  <button>
    <span>Lorem ipsum dolor sit amet.</span>
  </button>

  <button>
    <span>Lorem.</span>
  </button>

  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>

</section>

最佳答案

您需要考虑边框,因此将 box-sizing: content-box; 以及 1px 添加到最终宽度(我正在寻找原因......)

$.each($('button'), (i, v) => {
  $(v).css('width', ($(v).find('span').outerWidth() + 1) + 'px');
  $(v).css('top', i * 100 + 'px');
});
section {
  position: relative;
  width: 300px;
}

button {
  position: absolute;
  box-sizing: content-box;
  padding: 0;
  text-align: left;
}

span {
  background: lightcoral;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<section>

  <button>
    <span>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Veritatis iure nostrum dicta cumque. Nisi facilis corporis hic, pariatur molestiae error distinctio architecto quas itaque deserunt aliquam quo molestias dolor ex!</span>
  </button>

  <button>
    <span>Lorem ipsum dolor sit amet, consectetur adipisicing.</span>
  </button>

  <button>
    <span>Lorem ipsum dolor sit amet.</span>
  </button>

  <button>
    <span>Lorem.</span>
  </button>

  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>
  <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dignissimos, provident laborum itaque ratione nisi enim delectus dolorem dicta quod, quam vitae odit officiis. Ratione pariatur eos sapiente ut expedita. Incidunt?</p>

</section>

关于javascript - 使绝对定位按钮与其内容宽度相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61385326/

相关文章:

javascript - Laravel Ajax 调用 url 到 Controller

html - 专门使用 SVG 图像文件有什么缺点吗?

javascript - Chrome 扩展已禁用 "This extension may have been corrupted"Chrome 63.0.3239.84

jquery - 如何停止 jQuery SlidesJS 幻灯片放映?

jquery - MVC 3 Razor Ajax HttpDelete IIS6

html - 试图让这个 div 在加载时旋转

css - Bootstrap 3 Cover 示例 - 标题和导航覆盖内容

javascript - 为什么这个对象没有被覆盖?

javascript - 从 Amazon 检索 ASIN 并将其存储在 Netsuite 中

javascript - 在 AngularJS Material 中使用 md-virtual-repeat 进行无限滚动