css文字处理(溢出、折行)


一、文字溢出,省略号显示

前提:元素必须是块级元素、行内块元素,否则设置的样式不会生效。

1、单行文本省略

.single-content {
 	/* 文本不换行 */
 	white-space: nowrap;
    /* 超出隐藏 */
    overflow: hidden;
    /* 超出的文字省略号表示 */
    text-overflow: ellipsis;
}

2、多行文本省略

此样式在IE浏览器上不生效,在其它浏览器有效果

 .multi-content {
 	display: -webkit-box;
 	/* 垂直对齐 */
 	-webkit-box-orient: vertical;
 	/* 几行省略 */
 	-webkit-line-clamp: 3;
 	/* 超出隐藏 */
 	overflow: hidden;
 	/* 超出的文字省略号表示 */
 	text-overflow: ellipsis;
 }

3、IE浏览器,按字数省略显示

function wordlimit(className, num) {
	var dom = document.getElementsByClassName(className)[0];
	// 去掉前后空格
 	var domValue = dom.innerHTML.replace(/(^\s*)|(\s*$)/g, "");
 	if (domValue.length > num) {
 		dom.innerHTML = domValue.substring(0, num) + '...'
    }
}
wordlimit('multi-content', 20);//wordlimit(class名,展示的文字字数)

4、举例

(1) 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字溢出</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        .main:after {
            content: '';
            clear: both;
            display: block;
        }
        .main>div {
            width: 200px;
            float: left;
            margin: 10px 0 0 10px;
        }
        .title {
            text-align: center;
        }
        .detail-style {
            border: 1px solid red;
            padding: 20px;
            margin-top: 10px;
        }
        .single-content {
            /* 文本不换行 */
            white-space: nowrap;
            /* 超出隐藏 */
            overflow: hidden;
            /* 超出的文字省略号表示 */
            text-overflow: ellipsis;
        }
        .multi-content {
            display: -webkit-box;
            /* 垂直对齐 */
            -webkit-box-orient: vertical;
            /* 几行省略 */
            -webkit-line-clamp: 3;
            /* 超出隐藏 */
            overflow: hidden;
            /* 超出的文字省略号表示 */
            text-overflow: ellipsis;
            padding: 0;
        }
    </style>
</head>
<body>
    <div class="main">
        <div class="main-normal">
            <div class="title">正常显示</div>
            <div class="normal-content detail-style">
                一个人最怕不老实,青年人最可贵的是老实作风。"老实"就是不自欺欺人,做到不欺骗人家容易,不欺骗自己最难。"老实作风"就是脚踏实地,不占便宜。世界上没有便宜的事,谁想占便宜水就会吃亏。 ——徐特立
            </div>
        </div>
        <div class="main-single">
            <div class="title">单行省略</div>
            <div class="single-content detail-style">
                一个人最怕不老实,青年人最可贵的是老实作风。"老实"就是不自欺欺人,做到不欺骗人家容易,不欺骗自己最难。"老实作风"就是脚踏实地,不占便宜。世界上没有便宜的事,谁想占便宜水就会吃亏。 ——徐特立
            </div>
        </div>
        <div class="main-multi">
            <div class="title">多行省略</div>
            <div class="multi-content detail-style">
                一个人最怕不老实,青年人最可贵的是老实作风。"老实"就是不自欺欺人,做到不欺骗人家容易,不欺骗自己最难。"老实作风"就是脚踏实地,不占便宜。世界上没有便宜的事,谁想占便宜水就会吃亏。 ——徐特立
            </div>
        </div>
    </div>
</body>
</html>

(2) 页面渲染效果
在这里插入图片描述

二、文字折行显示

1、 word-break: break-all

两个break,强制换行,容器末尾换行,会截断单词,不会产生多余的空格。

2、word-wrap: break-word

两个word,单词长度大于容器后,会超出容器显示;当单词很长时,换行显示,会产生多余的空格,影响观感。会产生不可预期的效果。

3、举例

(1) 代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>文字折行</title>
    <style>
        .main>div {
            width: 200px;
            float: left;
            margin: 10px 0 0 20px;
        }
        .title {
            text-align: center;
        }
        .detail-style {
            border: 1px solid red;
            padding: 20px;
            margin-top: 10px;
        }
        .mandatory-content {
            word-break: break-all;
        }
        .compromise-content {
            word-wrap: break-word;
        }
    </style>
</head>
<body>
    <div class="main">
        <div class="main-normal">
            <div class="title">正常文本</div>
            <div class="normal-content detail-style">折行折行折行折行行折行折折行折折行折折折折111watermelonbeautiful</div>
        </div>
        <div class="main-mandatory">
            <div class="title">word-break: break-all</div>
            <div class="mandatory-content detail-style">折行折行折行折行行折行折折行折折行折折折折111watermelonbeautiful</div>
        </div>
        <div class="main-compromise">
            <div class="title">word-wrap: break-word</div>
            <div class="compromise-content detail-style">折行折行折行折行行折行折折行折折行折折折折111watermelonbeautiful</div>
        </div>
    </div>
</body>
</html>

(2) 页面渲染效果
在这里插入图片描述

### CSS 实现文字折行和换行的方法 #### 使用 `white-space` 属性控制文本换行行为 为了使文本在同一行内显示而不发生自然换行,可以通过设置 `white-space: nowrap;` 来阻止浏览器自动换行。这适用于任何类型的文本内容,无论是中文还是英文[^3]。 ```css .nowrap { white-space: nowrap; } ``` 对于需要正常处理空白符并允许在单词间断开的情况,则应保持默认值 `normal` 或者显式指定 `pre-line`,它们都会根据情况适当换行: ```css .normal-wrap { white-space: normal; /* or pre-line */ } ``` #### 控制特定条件下的换行方式 当遇到较长不可分割的单个词时,可能会超出容器边界而无法正确展示。此时可利用 `word-break` 和 `overflow-wrap` (旧版称为 `word-wrap`) 属性来调整换行逻辑: - **强制打断长单词** 当希望即使在一个非常长的单词内部也能进行拆分以适应布局需求时,可以应用如下样式规则: ```css .break-long-word { word-break: break-all; } ``` - **仅在必要时打破单词结构** 如果只是想要在确实有必要的情况下才去破坏单词完整性的话,可以选择更温和的方式——即只有当整个单词长度超过了其父级元素可用空间才会考虑将其切分成两部分呈现出来: ```css .wrap-if-needed { overflow-wrap: break-word; } ``` #### 设置固定宽度后的换行策略 如果给定了固定的宽度并且期望内容能够按照设定好的尺寸合理地分布到多行上去,除了上述提到过的几种手段外还可以借助于其他几个重要的CSS属性组合起来达到理想的效果: - **结合最大最小宽度限制** 对于那些可能因为内容过少而导致视觉上显得异常紧凑或者由于过多造成溢出问题的情形下,适当地加入 min-width/max-width 可以为最终渲染提供更好的弹性支持: ```css .fixed-width-text { width: 200px; max-width: 100%; box-sizing: border-box; } ``` - **处理超出行数的内容** 针对某些特殊场景比如新闻摘要、评论列表等场合往往只需要保留前几行有效信息即可满足业务诉求,在这种情况下就可以采用 `-webkit-line-clamp` 结合伪类 ::after 来截取多余的部分,并附加上省略标记提示用户还有更多未读的信息等待查看: ```css .ellipsis-multi-lines { display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 3; /* 显示三行 */ overflow: hidden; } .ellipsis-single-line::after { content: "..."; position: absolute; right: 0; bottom: 0; } ``` 以上就是关于如何运用CSS技术有效地管理和优化网页中的文本排列与换行机制的一些常见技巧介绍[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值