javascript - 使绝对定位按钮的宽度与其内容相同
问题描述
我有浮动按钮,我希望它们的宽度与它们的内容一样宽。内容可能有几行长。
我已经尝试了很多东西,但似乎没有任何效果。任何想法如何实现这一目标?
$('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>
推荐阅读
- amazon-web-services - 创建 AWS CodeBuild“发生未指定的错误”
- entity-framework - EF Core SQLite - 无法将 NULL 插入时间戳
- javascript - 按对象数组javascript中的多个键分组
- ionic-framework - 离子错误错误:未捕获(承诺):错误:找不到模块'../home/home.module'错误:找不到模块'../home/home.module'
- bash - 循环遍历目录中的文件
- android - 我可以构建 LineageOS 的模拟器版本吗?
- typescript - 将变量键入为泛型类型的函数
- angular - 如何在 Firestore 中执行复合 OR 操作?
- java - Java / QueryDSL 中的行构造函数比较查询生成
- python - psycopg2 copy_expert - 查找插入的行数