菜名和价格可以左右对齐,但是这中间的虚线或者点应该怎么做,放在他们中间,我没什么好的思路
我目前想的是设一个基准,比如说一百个‘·’,然后菜名多一个字就减去几个点,价格多一位就减去几个点,这个思路,但是又感觉不一定对得齐
使用 hr 标签元素,配合 flex 布局,就好了
<style>
* {
color: #6d524e;
}
hr {
border: none;
border-top: 4px dotted #6d524e;
}
.item {
display: flex;
}
.mid {
flex: 1;
margin: 0 8px;
}
</style>
<body>
<!-- 项目1 -->
<div class="item">
<div class="left">菜名1</div>
<div class="mid">
<hr/>
</div>
<div class="right">价格1</div>
</div>
<!-- 项目2 -->
<div class="item">
<div class="left">菜名22222222</div>
<div class="mid">
<hr/>
</div>
<div class="right">价格22222222</div>
</div>
<!-- 项目3 -->
<div class="item">
<div class="left">菜名3333333333333333333</div>
<div class="mid">
<hr/>
</div>
<div class="right">价格33</div>
</div>
</body>
用 flex
方式的布局就可以了。
<ul>
<li>
<span>菜单名</span>
<span>..........................</span>
<span>34.00</span>
</li>
<li>
<span>菜单</span>
<span>..........................</span>
<span>111234.00</span>
</li>
<li>
<span>菜单名</span>
<span>..........................</span>
<span>4.00</span>
</li>
<li>
<span>菜单名菜单名</span>
<span>..........................</span>
<span>234.00</span>
</li>
</ul>
ul,li {
list-style: none;
padding: 0;
margin: 0;
}
li {
display: flex;
width: 180px;
}
span {
flex: 0;
white-space: nowrap;
padding: 0 4px;
box-sizing: border-box;
}
span:nth-child(2) {
flex: 1;
overflow: hidden;
padding: 0;
line-height: .6;
}
span:nth-child(3) {
text-align: right;
}
其实就是利用 flex
布局的弹性拉伸来实现这个功能。
因为左右菜名和单价都是可以说是可以确定的宽度的,只要中间的点点点容器拉伸就可以实现了。
只不过可能这个点会出现半个之类的。
大概实现了一个
Codpen Demo
有点类似分割线的效果,可以通过通过定位加边框实现,不需要手动生成点,可以看下我的 demo https://play.tailwindcss.com/TadJl7u6DO?size=382x720
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
ctx.font = "your-font-size-and-style";
const nameWidth = ctx.measureText("菜名").width;
const priceWidth = ctx.measureText("价格").width;
const totalWidth = yourTotalWidth;
const dotWidth = ctx.measureText("·").width;
const numberOfDots = Math.floor((totalWidth - nameWidth - priceWidth) / dotWidth);
const line = "菜名" + "·".repeat(numberOfDots) + "价格";
8 回答4.6k 阅读✓ 已解决
6 回答3.3k 阅读✓ 已解决
6 回答2.3k 阅读
5 回答6.3k 阅读✓ 已解决
5 回答1.2k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
flex即可,
左右两边的菜名和价格就不说了,
直接
flex: 0 0 auto
就行,按实际需求设置下超出多少宽度就显示…
中间的虚线,
flex: 1 1 100%
,然后画个虚线就行画虚线方式很多,看哪种符合你的需求即可
background-image
搞个线性渐变