
<div class="wrapper">
<input id="input" type="checkbox">
<div class="text" line-clamp="3">
<label class="btn" for="input"></label>
浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何定位的浮动元素是如何
</div>
</div>
<style>
.wrapper {
display: flex;
margin: 50px auto;
max-width: 800px;
overflow: hidden;
border-radius: 8px;
padding: 15px;
box-shadow: 20px 20px 60px #bebebe,
-20px -20px 60px #ffffff;
line-height: 24px;
box-sizing: border-box;
}
.text {
position: relative;
overflow: hidden;
}
/* 使用一个浮动的伪元素从而使浮动按钮能够置于右下角 */
.text::before {
content: '';
float: right;
width: 0px;
height: 100%;
margin-bottom: -24px;
}
/* 按钮样式 */
.btn {
float: right;
clear: both;
font-size: 16px;
height: 24px;
line-height: 24px;
color: #4c8bf5;
cursor: pointer;
border: none;
position: relative;
}
/* 属性选择器:方面设置其最大高度从而设置最多显示多少行,从而解决display: -webkit-box;的兼容性问题 */
[line-clamp="3"] {
max-height: 72px;
}
[line-clamp="5"] {
max-height: 120px;
}
/* 输入框:用来表示文本的展开与收起状态 */
#input {
display: none;
}
#input:checked+.text {
max-height: none;
}
/* 按钮前的阴影 */
.text .btn::before {
background-image: linear-gradient(to right, rgba(255, 255, 255, 0), rgba(255, 255, 255, 0.95) 70%, rgba(255, 255, 255, 0.95));
content: '';
display: block;
position: absolute;
width: 30px;
height: 100%;
left: -30px;
}
/* 按钮展开和收起文本切换 */
.btn::after {
content: '展开'
}
#input:checked+.text .btn::after {
content: '收起'
}
#input:checked+.text .btn::before {
visibility: hidden;
}
</style>注意:1,没有对于文本少于最少行的情况处理。2,微信小程序中不支持input的checked选择器,可以使用定义变量处理