Nit*_*hin 7 html css sticky jsx core-ui
我正在尝试使用此处Core UI's找到的反应模板构建反应仪表板。
CSS
.top-stick {
position: sticky !important;
position: -webkit-sticky;
top: 5rem;
overflow-y: auto;
height: calc(100vh - 5rem);
}
Run Code Online (Sandbox Code Playgroud)
JSX
<div className="animated fadeIn">
<Row className="app-scrollable-body">
<Col xs="12" sm="4" md="3" className="top-stick">
<Card className="toic">
<CardBody>
Lorem ipsum dolor sit amet
</CardBody>
</Card>
</Col>
<Col xs="12" sm="8" md="9">
<Card>
<CardHeader>Card title</CardHeader>
<CardBody>
Lorem ipsum dolor sit amet
</CardBody>
</Card>
</Col>
</Row>
<div className="app-fixed-footer">
<span>
<a href="https://coreui.io">CoreUI</a> © 2018
creativeLabs.
</span>
<span className="ml-auto">
Powered by{" "}
<a href="https://coreui.io/react">CoreUI for React</a>
</span>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
但是在滚动时卡片似乎没有粘住。
上inspecting的CSS存在。还没有overflow: hidden为那里的CSS树。
问题是在里面使用了overflow .app-body。这有点棘手,但不应该为overflow具有滚动的元素和粘性元素之间的任何元素设置属性。
这里有一个基本的例子来说明。滚动在视口上,我们有一个带有overflow:hidden(甚至auto)的包装器,因此粘性行为将不起作用。
.container {
display:flex;
align-items:flex-start;
border:2px solid green;
}
.content {
flex:1;
height:200vh;
background:red;
margin:10px;
}
.sticky {
flex:1;
height:100px;
background:blue;
margin:10px;
position:sticky;
top:0;
}
.wrapper {
overflow:hidden;
border:2px solid red;
}Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
<div class="container">
<div class="sticky"></div>
<div class="content"></div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
如果我们删除溢出,它将按预期工作:
.container {
display:flex;
align-items:flex-start;
border:2px solid green;
}
.content {
flex:1;
height:200vh;
background:red;
margin:10px;
}
.sticky {
flex:1;
height:100px;
background:blue;
margin:10px;
position:sticky;
top:0;
}
.wrapper {
border:2px solid red;
}Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
<div class="container">
<div class="sticky"></div>
<div class="content"></div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
如果我们将 保持overflow在包装器内,但我们将滚动条移动到容器元素,它也会起作用,因为滚动条和粘性元素之间没有设置溢出的元素:
.container {
display:flex;
align-items:flex-start;
border:2px solid green;
max-height:200px;
overflow:auto;
}
.content {
flex:1;
height:200vh;
background:red;
margin:10px;
}
.sticky {
flex:1;
height:100px;
background:blue;
margin:10px;
position:sticky;
top:0;
}
.wrapper {
overflow:hidden;
border:2px solid red;
}Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
<div class="container">
<div class="sticky"></div>
<div class="content"></div>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
相关:什么是“滚动框”?