使用CSS获得此效果很简单:
这是一个很长的段落......
我们只是用text-overflow:ellipsis.
然而相反
......是一段很长的段落.
似乎不太明显.
这是实现它的CSS
.reverse-ellipsis {
text-overflow: clip;
position: relative;
background-color: white;
}
.reverse-ellipsis:before {
content: '\02026';
position: absolute;
z-index: 1;
left: -1em;
background-color: inherit;
padding-left: 1em;
margin-left: 0.5em;
}
.reverse-ellipsis span {
min-width: 100%;
position: relative;
display: inline-block;
float: right;
overflow: visible;
background-color: inherit;
text-indent: 0.5em;
}
.reverse-ellipsis span:before {
content: '';
position: absolute;
display: inline-block;
width: 1em;
height: 1em;
background-color: inherit;
z-index: 200;
left: -.5em;
}
Run Code Online (Sandbox Code Playgroud)
它的主要问题是它的长度以及省略号看起来有点偏差的事实.
有没有人知道一个更短的解决方案,使省略号保持一致?
我有以下html:
<div class="x">
<div class="y" title="aaaaa">
<a href="/">
aaaaa
</a>
</div>
<div class="y" title="bbbbbb">
<a href="/">
bbbbbb
</a>
</div>
<div class="y" title="ccccc">
<a href="/">
ccccc
</a>
</div>
<div class="y" title="dddddddd">
<a href="/">
dddddddd
</a>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
用css:
.x{
width: 10em;
background-color: #FFB9B9;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.y {
font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
font-size: 18px;
font-weight: bold;
line-height: 18px;
white-space: nowrap;
background-color: #E1CECE;
display: inline-block;
}
Run Code Online (Sandbox Code Playgroud)
你可以在这里看到:http://jsfiddle.net/fDBbm/
省略号从一开始就在Firefox(16.0.2)中工作,但在Chrome(22.0.1229.94)中没有.
我想创建一个替换一些默认参数的包装函数.
这是我正在努力解决的问题的核心:
Error in localWindow(xlim, ylim, log, asp, ...) :
formal argument "cex" matched by multiple actual arguments
Run Code Online (Sandbox Code Playgroud)
现在有点上下文.假设我为这样的情节定义了一个包装函数:
myplot <- function(x, ... ) {
plot(x, cex= 1.5, ... )
}
Run Code Online (Sandbox Code Playgroud)
如果我打电话,myplot( 1:10, cex= 2 )我会得到上述错误.我知道我可以转到...清单
l <- list(...)
Run Code Online (Sandbox Code Playgroud)
然后我就能做到
if( is.null( l[["cex"]] ) ) l[["cex"]] <- 2
Run Code Online (Sandbox Code Playgroud)
但是,如何将此列表"插入"省略号参数?像(我知道这不起作用):
... <- l
Run Code Online (Sandbox Code Playgroud)
编辑:我可以在myplot定义中使用默认值(如@Thomas的答案所示),但我不想:函数接口将变得混乱.我想我可以像这样定义一个辅助函数:
.myfunchelper <- function( x, cex= 2.0, ... ) {
plot( x, cex= cex, ... )
}
myfunc <- function( x, ... …Run Code Online (Sandbox Code Playgroud) 我试图截断一段文本并添加省略号以表示有更多内容.
我试图使用CSS属性text-overflow:ellipsis- 但是看一下它的例子似乎只能使用no-wrap它,因此它只能用于单行文本,因此不适合截断段落.
然后我想出了另一个解决方案,这几乎是正确的,但只有一个问题......
因此ellipsis,我没有使用属性截断,而是通过使用overflow:hidden和设置a 来截断旧方式max-height
.tourItem .tourInfo
{
max-height: 110px;
overflow: hidden;
display: block;
}
Run Code Online (Sandbox Code Playgroud)
然后创建我使用的整齐省略号 :after
.tourItem .tourInfo:after {content:'...';}
Run Code Online (Sandbox Code Playgroud)
这似乎是正确的方式,但我遇到了两个问题......
overflow:hidden该办法:after的内容不会显示.但它是必需的,因为它控制截断的文本!overflow:hidden)显示在文本部分的下方.我需要它看起来像它是文本行的一部分......好吧,我确定某个人,某个地方必须已经为此提出了一个算法,所以我想在我开始(重新)发明它之前我会问.
我有一个任意(用户输入)非空文本字符串的列表.每个字符串可以是任意长度(0除外),它们都是唯一的.我想将它们显示给用户,但我想将它们修剪为我决定的固定长度,并用省略号(...)替换它们中的一部分.问题是我希望所有输出字符串都是唯一的.
例如,如果我有字符串:
然后我不想修剪字符串的末尾,因为这是独特的部分(不想显示"Microsoft Internet ..."3次),但是切出中间部分是可以的:
其他时候,中间部分可能是唯一的,我想修剪结束:
可能成为:
我想它应该永远不会在字符串的最开头进行椭圆化,即使这样也是允许的,因为这看起来很奇怪.而且我猜它可能会在字符串中超过一个位置,但在合理范围内 - 可能2次就可以了,但是3次或更多似乎过多了.或者可能的次数不如剩余的块的大小重要:椭圆之间少于约5个字符将是毫无意义的.
输入(数量和大小)都不会非常大,因此性能不是主要问题(好吧,只要算法不会尝试愚蠢的事情,就像枚举所有可能的字符串一样,直到它找到一个有效的集合!) .
我想这些要求看起来非常具体,但我实际上相当宽松 - 我只是想描述一下我的想法.
之前有过这样的事吗?是否有一些现有的算法或库可以做到这一点?我用Google搜索了一些但到目前为止没有发现任何类似的内容(但也许我只是在谷歌上搜索).我不得不相信某个人已经想要解决这个问题了!
我的目标是创建一个隐藏溢出和省略号的元素,除了我希望隐藏LEFT侧的字符,省略号也在左侧.这适用于大多数浏览器:
CSS:
#mydiv {
overflow:hidden;
white-space:nowrap;
text-overflow:ellipsis;
direction:rtl;
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div id="mydiv">foobar foobar foobar</div>
Run Code Online (Sandbox Code Playgroud)
当#mydiv比其内容更窄时,应该出现如下内容:
... obar foobar
但是,根据我的判断(以及对其他任何尝试此操作的人的公平警告,因为我已经direction:rtl在其他几个地方看到了解决方案),正确执行此操作的唯一主要浏览器似乎是Firefox.Safari和谷歌浏览器都会将省略号放在文本的左侧,但无论如何都会在右侧截断,如下所示:
... foobar foob
IE9和Opera彻头彻尾的困惑.IE在右侧截断并使文本与省略号重叠.Opera是迄今为止最具创造性的,它会使溢出在单个单词上显示一段时间(因为元素变得更窄,即),然后从右边开始截断最左边的单词.它也无法渲染省略号,在我做过的一个实验中,甚至将一个™角色一直向左移动.真.所以"foobar foobar foobar™"就变成了:
™foob foobar
另外需要注意的是,webkit浏览器的一个(非常烦人的)潜在选项可能是设置-webkit-rtl-ordering:visual左边的哪个截断但BUT也按字面顺序呈现相反的顺序:
... boofraboof
因此,通过浏览器或某种模糊特征嗅探,理论上可以设置该属性并动态反转元素的文本.
是否存在简单的跨浏览器解决方法,甚至是基于JS的复杂解决方案?
我有一个maxlines = 3的TextView,我想使用自己的省略号,而不是
"Lore ipsum ..."
Run Code Online (Sandbox Code Playgroud)
我需要
"Lore ipsum ... [See more]"
Run Code Online (Sandbox Code Playgroud)
为了给用户一个线索,点击视图将扩展全文.
可能吗 ?
我正在考虑检查TextView是否有省略号,并且在这种情况下添加文本"[查看更多]"并在之后设置省略号,但我找不到这样做的方法.
也许如果我找到文本被剪切的位置,我可以禁用省略号并创建子字符串,然后添加"... [查看更多]",但我又不知道如何获得该位置.
在 C 中,定义可变长度参数的唯一方法是使用省略号声明其原型并使用va_list, va_start, va_arg,va_end来提取它们。就像printf系列和scanf系列一样。
在 C++11 中,引入了一种新方法,如下所示。
template <typename T, typename... MoreT>
void func(T arg, MoreT... args){
// Do some stuff
func(args);
}
Run Code Online (Sandbox Code Playgroud)
每种方法的优点和缺点是什么?在 C++ 中是否不鼓励使用或鼓励它们中的任何一个?
SwiftUI 具有出色的动画功能,但它处理TextView 内容更改的方式存在问题。它对文本框的变化进行动画处理,但在没有动画的情况下立即更改文本。因此,当TextView的内容变长时,动画过渡会导致省略号 (...) 出现,直到文本框达到其全宽。例如,在这个小应用程序中,按下Toggle按钮在较短和较长的文本之间切换:
这是代码:
import SwiftUI
struct ContentView: View {
@State var shortString = true
var body: some View {
VStack {
Text(shortString ? "This is short." : "This is considerably longer.").font(.title)
.animation(.easeInOut(duration:1.0))
Button(action: {self.shortString.toggle()}) {
Text("Toggle").padding()
}
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
Run Code Online (Sandbox Code Playgroud)
问题是:如何避免省略号?将一个字符串动画化为两个字符串时,情况更糟,因为短字符串在动画化为较长字符串时完全被省略号替换。
例如,一种可能性是通过添加修饰符,.id(self.shortString ? 0 : 1)然后添加修饰符,为处于一种或另一种状态的视图分配一个单独的 id .transition()。这会将文本视为两个不同的视图,之前和之后。不幸的是,在我的情况下,我需要在更改期间移动文本位置,而不同的 id 使动画变得不可能。
我想解决方案是创造性地使用AnimatableData. …