- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在为一个网站编写服务器端代码,我可以使用多个字符串来表示每个实体。例如:
[{
full_name: 'San Francisco Giants',
long_name: 'Giants',
medium_name: 'Giants',
short_name: 'SF'
}, {
full_name: 'Arizona Diamondbacks',
long_name: 'Diamondbacks',
medium_name: 'D\'backs',
short_name: 'AZ'
}, ...]
我想显示适合我的固定宽度表格且无需换行的最长字符串。例如,在我想要的非常小的移动屏幕上:
/-------------\
| Team | Win %|
|------+------|
| SF | .580 |
| LA | .510 |
| AZ | .495 |
| CO | .442 |
| SD | .418 |
\______|______/
但是在稍微大一点的屏幕或者纵向模式下,我想要
/--------------------------\
| Team | Win % |
|------------+-------------|
| "Giants" | .580 |
| "Dodgers" | .510 |
| "D'backs" | .495 | <-- "Diamondbacks" (i.e., long_name) wouldnt fit
| "Rockies" | .442 | on one line, so the site displays "D'backs"
| "Padres" | .418 | (i.e. medium_name) instead.
\____________|_____________/
我没有使用固定宽度的字体。
这可以不借助 Javascript 来完成吗?
最佳答案
是的,它可以!
由于您无法提前知道哪个字符串适合,技巧是将所有 字符串放入 DOM 中,让浏览器的流规则确定适合哪个字符串。我将描述需要哪些 HTML 和 CSS,相应的服务器端代码应该变得清晰。
假设您有一个 div
(下面描述的“小工具”),只有当它里面的字符串不换行时才可见。然后,您可以通过按字符串长度的相反顺序垂直堆叠这些小工具来显示适合的最长字符串:
*-----------*
| AZ | \
*--\--------*
\ \
\
\ *-----------*
| D'backs | \
*--\--------*
\ \
\
\ *-----------*
| | \ <-- Empty because "Diamondbacks" doesn't fit.
*--\--------*
\ \
\
\ *-----------*
| | <-- Empty because "Arizona Diamondbacks" doesn't
*-----------* fit.
在页面上堆叠在一起,您只会看到适合的第一个字符串。例如,在上面的示例中,前两个小工具是不可见的,您会看到
*-----------*
| D'backs |
*-----------*
因为 AZ
会被覆盖。
到现在为止?伟大的。但问题仍然存在:如何制作一个仅在适合其中的字符串时才可见的 div
?换句话说,你如何使...
这是一些真正的 CSS 魔法。您必须盯着它看几分钟,才能思考它为什么会起作用。想象一个较小的“查看窗口”(div A
),紧靠在它后面的是一个更大的 div,宽度是它的两倍 (div B
)。 div B
内部是一个间隔符 (div C
) 和文本 (div D
)。整个事情看起来像这样:
|-div B-----------------*------------------*
||-div C---------------||-div D---------| |
|| (hidden fixed-width ||\ | | \
|| spacer div) || D ' b a c k s | |
||_____________________|*__\____________| * \
| |
| \ \ | \
| |
| \ \ | \
| |
| \ \ | \
| |
|______________________________\___\_______| \
\ \ \
\ *-div A-------------*
| |
\ | |
*___________________*
div A
是溢出隐藏的,所以当它全部垂直堆叠时,您只会看到位于 div A
后面的内容:在这种情况下,内容div
:
| div B - - - - - - *-div A-----------*
| div C - - - - - |/-div D--------\ | <-- Most of div B and all of div C
||D ' b a c k s | | are hidden because div A is
|\______________/ | set to overflow hidden.
| - - - - - - - |-----------------|
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
请注意,div C
和 div D
都设置为在 div B
内向左浮动。如果 div D
中的字符串太长,它将流到 div C
下方,并且不可见:
| div B - - - - - - *-div A-----------*
| div C - - - - - | | <-- Most of div B and all of div C
| | are hidden because div A is
| | set to overflow hidden.
| - - - - - - - |-----------------|
/-div D--------------------\
| D i a m o n d b a c k s |
\--------------------------/
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
这就是小工具!
这里有一些示例 CSS 可以使它更清楚:
.divA {
position: relative;
overflow: hidden;
}
.divB {
position: absolute;
top: 0;
right: 0;
width: 200%;
height: 1000px /* arbitrarily large */
}
.divC {
width: 50%;
height: 50%;
float: left;
}
.divD {
float: left;
background-color: white;
}
和 DOM:
<div class="divA">
<div class="divB">
<div class="divC"></div>
<div class="divD">AZ</div>
</div>
<div class="divB">
<div class="divC"></div>
<div class="divD">D'backs</div>
</div>
<div class="divB">
<div class="divC"></div>
<div class="divD">Diamondbacks</div>
</div>
</div>
这是此处给出的整个示例的一个工作示例:http://jsfiddle.net/sFjdL/
(请注意,这里有一些小的修改,使高度自然流动,我在这里不做描述。)
N
像素宽?您可以——但为了安全起见,您必须高估所需的空间,因此它可能不是最佳选择。为 N
选择最小的“安全”值很困难,而且总是会导致浪费。此外,您将无法为有视力障碍的用户处理大字体。上述解决方案可以很好地扩展。
@media
CSS 为正确的外形选择正确的字符串?同样,您必须提前知道每个字符串有多少像素长,这在服务器端是不可能的。您可能可以接近,但是当您可以完美时,为什么要“接近”?
您可以从多个方向理解这个概念。例如,这里有一个 div
,只有当它里面的字符串有 CSS 省略号时才会有悬停文本,因为它不适合:
.under {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
width: 50%;
position: absolute;
top: 0;
right: 0;
z-index: 1;
}
.over {
position: relative;
z-index: 2;
}
DOM:
<div class="divA">
<div class="invisible_for_height"></div>
<div class="divB">
<div class="under" title="Expectorating">Expectorating</div>
<div class="divC"></div>
<div class="divD over">Expectorating</div>
</div>
</div>
和演示:
此外,尝试将 div
设置为全部具有背景色并移除隐藏的溢出。它有助于调试!示例:http://jsfiddle.net/X3bqx/1/
关于html - 如何在不换行的情况下在 HTML 中显示字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18817464/
如何使用 SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
我刚刚开始使用 C++ 并且对 C# 有一些经验,所以我有一些一般的编程经验。然而,似乎我马上就被击落了。我试过在谷歌上寻找,以免浪费任何人的时间,但没有结果。 int main(int argc,
这个问题已经有答案了: In Java 8 how do I transform a Map to another Map using a lambda? (8 个回答) Convert a Map>
我正在使用 node + typescript 和集成的 swagger 进行 API 调用。我 Swagger 提出以下要求 http://localhost:3033/employees/sear
我是 C++ 容器模板的新手。我收集了一些记录。每条记录都有一个唯一的名称,以及一个字段/值对列表。将按名称访问记录。字段/值对的顺序很重要。因此我设计如下: typedef string
我需要这两种方法,但j2me没有,我找到了一个replaceall();但这是 replaceall(string,string,string); 第二个方法是SringBuffer但在j2me中它没
If string is an alias of String in the .net framework为什么会发生这种情况,我应该如何解释它: type JustAString = string
我有两个列表(或字符串):一个大,另一个小。 我想检查较大的(A)是否包含小的(B)。 我的期望如下: 案例 1. B 是 A 的子集 A = [1,2,3] B = [1,2] contains(A
我有一个似乎无法解决的小问题。 这里...我有一个像这样创建的输入... var input = $(''); 如果我这样做......一切都很好 $(this).append(input); 如果我
我有以下代码片段 string[] lines = objects.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
这可能真的很简单,但我已经坚持了一段时间了。 我正在尝试输出一个字符串,然后输出一个带有两位小数的 double ,后跟另一个字符串,这是我的代码。 System.out.printf("成本:%.2
以下是 Cloud Firestore 列表查询中的示例之一 citiesRef.where("state", ">=", "CA").where("state", "= 字符串,我们在Stack O
我正在尝试检查一个字符串是否包含在另一个字符串中。后面的代码非常简单。我怎样才能在 jquery 中做到这一点? function deleteRow(locName, locID) { if
这个问题在这里已经有了答案: How to implement big int in C++ (14 个答案) 关闭 9 年前。 我有 2 个字符串,都只包含数字。这些数字大于 uint64_t 的
我有一个带有自定义转换器的 Dozer 映射: com.xyz.Customer com.xyz.CustomerDAO customerName
这个问题在这里已经有了答案: How do I compare strings in Java? (23 个回答) 关闭 6 年前。 我想了解字符串池的工作原理以及一个字符串等于另一个字符串的规则是
我已阅读 this问题和其他一些问题。但它们与我的问题有些无关 对于 UILabel 如果你不指定 ? 或 ! 你会得到这样的错误: @IBOutlet property has non-option
这两种方法中哪一种在理论上更快,为什么? (指向字符串的指针必须是常量。) destination[count] 和 *destination++ 之间的确切区别是什么? destination[co
This question already has answers here: Closed 11 years ago. Possible Duplicates: Is String.Format a
我有一个Stream一个文件的,现在我想将相同的单词组合成 Map这很重要,这个词在 Stream 中出现的频率. 我知道我必须使用 collect(Collectors.groupingBy(..)
我是一名优秀的程序员,十分优秀!