Проблема заключается в том, что overflow-x: visible; overflow-y: scroll
является невозможным сочетание в CSS. Всякий раз, когда visible
сопряжен с scroll
, он преобразуется в auto
. Другими словами, это эквивалентно:
overflow-x: visible;
overflow-y: scroll;
overflow-x: auto;
overflow-y: scroll;
Это был плохой descision для спецификации, но есть обходные.
Изготовление расширительных элементов position: absolute
, их размер не изменит контейнер, и они не будут обрезаны overflow: hidden
. Чтобы правильно их расположить, дополнительный div
с position: relative
обернут вокруг всего контейнера.
HTML:
<div class='container1'>
<div class='container2'>
<ul class='messages'>
<li><pre>Hello</pre></li>
<li>
<pre>This is a
really really really
really really long message.</pre>
</li>
<li><pre>World</pre></li>
</ul>
</div>
</div>
CSS:
* {
margin: 0;
padding: 0;
}
.container1 {
position: relative;
width: 200px;
}
.container2 {
background: #f0f;
width: 100%;
height: 100%;
overflow: scroll;
}
.messages {
overflow: visible;
list-style: none;
}
.messages li {
background: #ff0;
width: 100%;
height: 24px;
margin-top: 12px;
}
.messages li pre {
position: absolute;
display: inline-block;
box-sizing: border-box;
width: 100%;
max-height: 24px;
padding: 4px;
background: #0ff;
border-radius: 4px;
line-height: 16px;
overflow: hidden;
text-overflow: ellipsis;
width: auto;
min-width: 100%;
max-width: 100%;
transition: max-width 200ms ease-out, height 200ms ease-out;
}
.messages li pre:hover {
z-index: 1;
background: #00f;
max-width: 80vw;
max-height: 80vh;
transition: max-width 200ms ease-in, max-height 200ms ease-in;
}
Fiddle:
https://jsfiddle.net/cyL6tc2k/2/
Кредит на хитрость здесь: http://front-back.com/how-to-make-absolute-positioned-elements-overlap-their-overflow-hidden-parent
Возможные дю plicate [CSS overflow-x: visible; и overflow-y: скрытый; вызвав проблему прокрутки] (http://stackoverflow.com/questions/6421966/css-overflow-x-visible-and-overflow-y-hidden-causing-scrollbar-issue) – andreas
Предполагается, что направление x должно прокручиваться, когда .messages завис? – Luke
№ Сообщение должно выходить наружу и над контейнером, например, когда свиток отключен как для x, так и для y. – sdgfsdh