- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用可变宽度字体创建两列左对齐文本。我目前的流程:
我觉得这在逻辑上是合理的,但输出看起来像这样(使用可变宽度字体):
a 12345678910
as 12345678910
asd 12345678910
asdf 12345678910
asdfg 12345678910
我正在寻找的输出是这样的:
a 12345678910
as 12345678910
asd 12345678910
asdf 12345678910
asdfg 12345678910
我错过了什么?
const int maxNameWidth = 150;
Font measurementFont;
Graphics graphics;
float spaceWidth;
void Main()
{
measurementFont = new Font("Arial", 14);
graphics = Graphics.FromImage(new Bitmap(1, 1));
spaceWidth = graphics.MeasureString(" ", measurementFont).Width;
addRow("a", "12345678910");
addRow("as", "12345678910");
addRow("asd", "12345678910");
addRow("asdf", "12345678910");
addRow("asdfg", "12345678910");
measurementFont.Dispose();
graphics.Dispose();
}
void addRow(string name, string value) {
float width = graphics.MeasureString(name, measurementFont).Width;
int amountOfSpacesNeeded = Convert.ToInt32((maxNameWidth - width) / spaceWidth);
Console.WriteLine(name + " ".PadRight(amountOfSpacesNeeded) + content); // The console font is Arial
}
编辑:修复了填充 name
而不是实际乘以空格量的愚蠢错误。结果现在好多了,但还是有点偏差。我确实注意到五个空格的宽度不等于 spaceWidth * 5
但是...
最佳答案
终于明白了。但是我认为这个解决方案是令人作呕的垃圾,所以我会保持这个问题开放,直到有人有更好/更少的蛮力方法。
基本上,由于无法计算的字距调整(据我所知),计算让我少了 1-2 个空格,我只是再次测量字符串并从中添加或减去空格,直到它到达 maxNameWidth
的另一侧它的方向;例如。如果太短则添加一个空格,再次测量并查看是否超过 maxNameWidth
,如果是则停止,反之亦然。
完整代码:
const int maxNameWidth = 150;
Font measurementFont;
Graphics graphics;
float spaceWidth, xWidth;
enum Direction { None, FromHigh, FromLow };
void Main()
{
measurementFont = new Font("Arial", 14);
graphics = Graphics.FromImage(new Bitmap(1, 1));
spaceWidth = graphics.MeasureString(" ", measurementFont).Width;
xWidth = graphics.MeasureString("x", measurementFont).Width;
addRow("a", "12345678910");
addRow("as", "12345678910");
addRow("asd", "12345678910");
addRow("asdf", "12345678910");
addRow("asdfg", "12345678910");
measurementFont.Dispose();
graphics.Dispose();
}
void addRow(string name, string value) {
float width = graphics.MeasureString(name, measurementFont).Width;
int amountOfSpacesNeeded = Convert.ToInt32((maxNameWidth - width) / spaceWidth);
string firstColumn = name + " ".PadRight(amountOfSpacesNeeded);
float currWidth;
Direction dir = Direction.None;
while (true) {
// I add an 'x' here because just measuring a bunch of spaces does not work (the width of one space is apparently equal to the width of five according to graphics)
currWidth = graphics.MeasureString(firstColumn + "x", measurementFont).Width - xWidth;
if (((dir == Direction.FromLow) || (dir == Direction.None)) && (currWidth < maxNameWidth)) {
dir = Direction.FromLow;
firstColumn += " ";
}
else if (((dir == Direction.FromHigh) || (dir == Direction.None)) && (currWidth > maxNameWidth)) {
dir = Direction.FromHigh;
firstColumn = firstColumn.Remove(firstColumn.Length - 1);
}
else {
break;
}
}
Console.WriteLine(firstColumn + value);
}
输出(用 14pt Arial 粘贴到某处以查看对齐方式):
a 12345678910
as 12345678910
asd 12345678910
asdf 12345678910
asdfg 12345678910
关于c# - 如何垂直对齐非等宽文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50013521/
如果图像的宽度和高度相等,我如何添加类“相等”。 这是我的代码: var img = $('img', this); var width = img.width(); var height = img
任何人都可以告诉我涵盖大部分 unicode 字符的等宽字体吗?如果没有,那么包含大部分欧洲语言字符集的等宽字体? 最佳答案 我也在寻找单色空间、丰富的 Unicode 字体。到目前为止,我使用 De
我编写了一个程序来拍摄照片并创建 ASCII 表示(ASCII 艺术)。起初,我将 ASCII 字符串写入控制台,但现在我有了一个保存文本的 JLabel。但是,JLabel 输出是不规则的,不像控制
如果我有生成的列表 我要分成几列 like this是否有可能以某种方式让列与最宽的列一样宽 . 我有一个下拉导航,目前我在 上只有一个固定宽度s 但对于较小的导航元素,如“常见问题解答”,有很多
我对编程很陌生。 我试图让三个 col-md-4 具有相同的宽度。我假设如果在 HTML 中正确引用了 Bootstrap,则不需要 CSS。任何建议将不胜感激。 代码: /*NAV LOGO*/ .
是否可以像这样制作一个纯 CSS 解决方案: 元素有一些最小宽度。 它们应该动态增长以填充所有容器宽度,然后换行 列表中的所有元素都应具有相同的宽度。 现在是这样的: 这也是我希望它看起来像的样子(我
我正在尝试通过 flexbox 创建三行,其中将包含可变数量的列(顶部和底部的行将在数量上匹配)和一个中间列,它只是一个列。 由于列数是可变的,因此父级上没有设置宽度。 我正在努力让中间列的宽度与顶部
是否可以像这样制作一个纯 CSS 解决方案: 元素有一些最小宽度。 它们应该动态增长以填充所有容器宽度,然后换行 列表中的所有元素都应具有相同的宽度。 现在是这样的: 这也是我希望它看起来像的样子(我
我将对象动态添加到面板,然后添加到我的边框布局。我需要西部、中心和东部的大小都相等。这是我目前所拥有的: static int width = 300;//Screen width static in
我有一列 4 个元素。由于内容不同,所有元素的宽度都不同。使用 flexbox,有谁知道如何使所有元素与最大元素的宽度相同,同时保持它们全部居中? 这是我目前拥有的。 .container { d
我正在创建一个表单,我有 2 个并排的 div。这是我当前的 html: First name Middle n
如何并排排列 3 个 UIButton。我正在使用自动布局。我的要求是: 1.无论设备如何,它们都应该是等宽的 2.从 View 的开始到结束垂直占据 我尝试了不同的方法,我没能实现。是否可以通过界面
我在 flexbox 中使用 box-sizing: border-box; 具有不同的 border 厚度。我希望 flexbox 中的元素具有相等的宽度,但它会计算没有边框的元素的 width。
我在 flexbox 中使用 box-sizing: border-box; 具有不同的 border 厚度。我希望 flexbox 中的元素具有相等的宽度,但它会计算没有边框的元素的 width。
我是一名优秀的程序员,十分优秀!