问题
I'm having a problem where a floated div moves beneath another floated div when the browser width resizes. I created an example of this behavior in a jsfiddle (below) in which I use dummy text and a dummy table. If you open the jsfiddle, and resize the width of the display area, you'll see that eventually the right hand div (the table) moves beneath the left hand div (the text).
https://jsfiddle.net/p7yr5t4u/23/
.view {
float: left;
position: relative;
height: 100%;
}
#A {
width: 200px;
}
Ideally what I would like to see happen is for the right hand div to display a horizontal scrollbar when the browser width resizes, and for it to stay on the right hand side instead of moving beneath the left hand div. I tried setting "overflow-x: auto" on the div to no avail. How can I make a horizontal scrollbar appear in the table on the right instead of having it move beneath the text on the left?
I researched Stack Overflow for this problem and found this thread as well as this thread. The only solution I could glean is that float itself is a problem, and it's hard to get this desired behavior when divs are floated. Is there a way for me to get my desired result while keeping the float layout? Or is float itself the culprit?
回答1:
A simple fix is to convert float to inline-block
and use white-space:nowrap
:
.container {
white-space:nowrap;
}
.view {
white-space:normal;
display: inline-block;
vertical-align:top;
position: relative;
height: 100%;
}
#A {
width: 200px;
}
table {
font-family: arial, sans-serif;
border-collapse: collapse;
}
td,
th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
<div class="container">
<div id="A" class="view">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor
in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div id="B" class="view">
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
</div>
</div>
回答2:
If you don't mind one additional wrapper under #B and you really want to use floats, you can do it like this. I took those 200px of #A as a “constant” since you used it in your example.
.view {
float: left;
position: relative;
height: 100%;
}
#A {
width: 200px;
}
#B {
box-sizing: border-box;
margin-left: -200px;
padding-left: 200px;
width: 100%;
}
#C {
overflow-x: auto;
}
table {
font-family: arial, sans-serif;
border-collapse: collapse;
}
td, th {
border: 1px solid #dddddd;
text-align: left;
padding: 8px;
}
tr:nth-child(even) {
background-color: #dddddd;
}
<div>
<div id="A" class="view">
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</div>
<div id="B" class="view">
<div id="C">
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
<tr>
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Ernst Handel</td>
<td>Roland Mendel</td>
<td>Austria</td>
</tr>
<tr>
<td>Island Trading</td>
<td>Helen Bennett</td>
<td>UK</td>
</tr>
<tr>
<td>Laughing Bacchus Winecellars</td>
<td>Yoshi Tannamuri</td>
<td>Canada</td>
</tr>
<tr>
<td>Magazzini Alimentari Riuniti</td>
<td>Giovanni Rovelli</td>
<td>Italy</td>
</tr>
</table>
<div>
</div>
</div>
</div>
来源:https://stackoverflow.com/questions/52320571/how-to-keep-floated-div-from-moving-beneath-other-floated-div-when-the-browser-w