Мне нужна помощь с наложением одного человека div
на другого div
.
Мой код выглядит так:
<div class="navi"></div>
<div id="infoi">
<img src="info_icon2.png" height="20" width="32"/>
</div>
К сожалению, я не могу гнездиться внутри div#infoi
или img
внутри div.navi
.
Это должно быть два отдельных div
s, как показано, но мне нужно знать, как я мог бы разместить div#infoi
над div.navi
и справа крайнюю сторону и по центру сверху div.navi
.
overflow: hidden
использованияoverflow: visible
вместо этого.Ответы:
Я бы предложил изучить
position: relative
и дочерние элементы сposition: absolute
.источник
absolute
позиционируемые элементы расположены относительно их ближайшего явно позиционированного (position:absolute|relative|fixed
) родительского элемента. просто дальнейшие разъяснения ... jsfiddle.net/p5jkc8gzПринятое решение прекрасно работает, но IMO не хватает объяснения, почему оно работает. Пример ниже сводится к основам и отделяет важный CSS от несоответствующего CSS стиля. В качестве бонуса я также включил подробное объяснение того, как работает позиционирование CSS.
TLDR; если вам нужен только код, прокрутите вниз до «Результат» .
Проблема
Есть два отдельных элемента, родственных элемента, и цель состоит в том, чтобы расположить второй элемент (со знаком
id
ofinfoi
), чтобы он появился в предыдущем элементе (тот, у которого естьclass
ofnavi
). Структура HTML не может быть изменена.Предложенное решение
Чтобы достичь желаемого результата, мы собираемся переместить или расположить второй элемент, который мы назовем
#infoi
так, чтобы он появился внутри первого элемента, который мы назовем.navi
. В частности, мы хотим#infoi
быть расположены в верхнем правом углу.navi
.CSS Позиция Требуется Знание
У CSS есть несколько свойств для позиционирования элементов. По умолчанию все элементы есть
position: static
. Это означает, что элемент будет располагаться в соответствии с его порядком в структуре HTML, за некоторыми исключениями.Остальные
position
значенияrelative
,absolute
,sticky
иfixed
. Установив элементposition
к одному из этих других значений, теперь можно использовать комбинацию следующих четырех свойств для позиционирования элемента:top
right
bottom
left
Другими словами, установив
position: absolute
, мы можем добавитьtop: 100px
для позиционирования элемента 100 пикселей сверху страницы. И наоборот, если мы установимbottom: 100px
элемент будет расположен на 100 пикселей от нижней части страницы.Вот где теряются многие новички CSS -
position: absolute
имеет систему координат. В приведенном выше примере системой отсчета являетсяbody
элемент.position: absolute
сtop: 100px
означает, что элемент расположен в 100 пикселях от верхней частиbody
элемента.Положение системы координат или контекст позиции можно изменить, установив
position
для родительского элемента любое значение, кромеposition: static
. То есть мы можем создать новый контекст позиции, задав родительский элемент:position: relative;
position: absolute;
position: sticky;
position: fixed;
Например, если
<div class="parent">
задан элементposition: relative
, любые дочерние элементы используют в<div class="parent">
качестве контекста позиции. Если бы был задан дочерний элементposition: absolute
иtop: 100px
, элемент был бы расположен в 100 пикселях от вершины<div class="parent">
элемента, потому что<div class="parent">
теперь это контекст позиции.Другой фактор, о котором нужно знать, это порядок стека или то, как элементы располагаются в направлении z. Здесь необходимо знать, что порядок стеков элементов по умолчанию определяется в порядке, обратном их порядку в структуре HTML. Рассмотрим следующий пример:
В этом примере, если два
<div>
элемента были расположены в одном и том же месте на странице,<div>Top</div>
элемент будет покрывать<div>Bottom</div>
элемент. Так<div>Top</div>
как<div>Bottom</div>
в структуре HTML идет после, он имеет более высокий порядок наложения.Показать фрагмент кода
Порядок размещения можно изменить с помощью CSS с помощью свойств
z-index
илиorder
.Мы можем игнорировать порядок размещения в этом выпуске, поскольку естественная HTML-структура элементов означает, что элемент, на котором мы хотим отображаться,
top
идет после другого элемента.Итак, вернемся к проблеме - мы будем использовать контекст позиции для решения этой проблемы.
Решение
Как указано выше, наша цель - расположить
#infoi
элемент так, чтобы он отображался внутри.navi
элемента. Чтобы сделать это, мы будем обернуть.navi
и#infoi
элементы в новом элементе<div class="wrapper">
таким образом , мы можем создать новый контекст позиции.Затем создайте новый контекст позиции, давая .
.wrapper
position: relative
С этим новым контекстом позиции мы можем позиционировать
#infoi
внутри.wrapper
. Во- первых, дать , что позволяет нам позиционировать абсолютно .#infoi
position: absolute
#infoi
.wrapper
Затем добавьте
top: 0
иright: 0
расположите#infoi
элемент в правом верхнем углу. Помните, потому что#infoi
элемент использует в.wrapper
качестве контекста позиции, он будет в правом верхнем углу.wrapper
элемента.Поскольку
.wrapper
это просто контейнер для.navi
, позиционирование#infoi
в верхнем правом углу.wrapper
дает эффект позиционирования в верхнем правом углу.navi
.И там у нас это есть,
#infoi
теперь, кажется, в правом верхнем углу.navi
.Результат
Пример ниже сводится к основам и содержит некоторые минимальные стили.
Показать фрагмент кода
Альтернативное (сеточное) решение
Вот альтернативное решение с использованием CSS Grid для позиционирования
.navi
элемента с#infoi
элементом справа. Я использовал подробныеgrid
свойства, чтобы сделать его максимально понятным.Показать фрагмент кода
Альтернативное (без обертки) решение
В случае, если мы не можем редактировать HTML, то есть мы не можем добавить элемент-обертку, мы все равно можем добиться желаемого эффекта.
Вместо того , чтобы использовать
position: absolute
на#infoi
элементе, мы будем использоватьposition: relative
. Это позволяет нам переместить#infoi
элемент из его позиции по умолчанию под.navi
элементом. С помощьюposition: relative
мы можем использовать отрицательноеtop
значение, чтобы переместить его из положения по умолчанию, иleft
значение100%
минус несколько пикселей, используяleft: calc(100% - 52px)
, чтобы расположить его рядом с правой стороной.Показать фрагмент кода
источник
Используя
div
стильz-index:1;
иposition: absolute;
вы можете наложитьdiv
на любой другойdiv
.z-index
определяет порядок, в котором div'ы укладываются. Div с более высокимz-index
появится перед div с более низкимz-index
. Обратите внимание, что это свойство работает только с позиционированными элементами .источник
Новая спецификация Grid CSS обеспечивает гораздо более элегантное решение. Использование
position: absolute
может привести к перекрытию или масштабированию, в то время как Grid избавит вас от грязных хаков CSS.Самый минимальный пример Grid Overlay:
HTML
CSS
Вот и все. Если вы не строите для Internet Explorer, ваш код, скорее всего, будет работать.
источник
Здесь следует простое решение на 100% на основе CSS. «Секрет» заключается в использовании
display: inline-block
элемента в оболочке. Изображениеvertical-align: bottom
на картинке - это хак для преодоления отступов в 4 пикселя, которые некоторые браузеры добавляют после элемента.Совет : если элемент перед упаковщиком встроен, он может оказаться вложенным. В этом случае вы можете «обернуть обертку» внутри контейнера,
display: block
обычно старого и доброгоdiv
.источник
Это то, что вам нужно:
источник
Я не большой программист и не эксперт в CSS, но я все еще использую вашу идею в своих веб-проектах. Я пробовал разные разрешения тоже:
Конечно, вокруг них будет обертка. Вы можете управлять расположением меню div, которое будет отображаться внутри заголовка div с левыми полями и верхними позициями. Вы также можете настроить меню div, если хотите.
источник
Вот простой пример добавления эффекта наложения со значком загрузки поверх другого элемента div.
Попробуйте это здесь: http://jsbin.com/fotozolucu/edit?html,css,output
источник