Чтобы сделать дочерний элемент абсолютно неподвижным из его родительского элемента, вам необходимо установить относительное положение в исходном элементе И абсолютной позиции дочернего элемента.
Тогда в дочернем элементе «верх» находится относительно высоты родителя. Таким образом, вам также нужно «перевести» вверх ребенка на 50% от его собственной высоты.
.base{
background-color: green;
width: 200px;
height: 200px;
overflow: auto;
position: relative;
}
.vert-align {
position: absolute;
top: 50%;
transform: translate(0, -50%);
}
<div class="base">
<div class="vert-align">
Content Here
</div>
</div>
Существует другое решение используя гибкую коробку.
.base{
background-color:green;
width: 200px;
height: 200px;
overflow: auto;
display: flex;
align-items: center;
}
<div class="base">
<div class="vert-align">
Content Here
</div>
</div>
Вы найдете преимущества / недостатки для обоих.
То, что вы видите, представляет собой представление из my_string
, созданное его методом __repr__()
. Если вы его распечатаете, вы увидите, что на самом деле у вас есть одна обратная косая черта, как вы и предполагали:
>>> print(my_string)
why\does\it\happen?
В приведенной ниже строке есть три символа , а не четыре :
>>> 'a\\b'
'a\\b'
>>> len('a\\b')
3
Вы можете получить стандартное представление строки (или любого другого объекта) с помощью встроенной функции repr()
:
>>> print(repr(my_string))
'why\\does\\it\\happen?'
Python представляет обратную косую черту в качестве \\
, потому что обратная косая черта является escape-символом - например, \n
представляет новую строку, а \t
представляет вкладку.
Иногда это может вам помочь в проблему:
>>> print("this\text\is\not\what\it\seems")
this ext\is
ot\what\it\seems
Из-за этого должен быть способ сказать Python, что вы действительно хотите, чтобы два символа \n
, а не новая строка, и вы делаете что, преодолевая обратную косую черту, с другой:
>>> print("this\\text\is\what\you\\need")
this\text\is\what\you\need
Когда Python возвращает представление строки, он играет безопасно, избегая всех обратных косых черт (даже если они иначе не были бы частью побега последовательность), и это то, что вы видите. Однако сама строка содержит только одну обратную косую черту.
Более подробную информацию о строковых литералах Python можно найти по адресу: литералы String и Bytes в документации Python.
Как ответ Zero Piraeus объясняет, что использование одиночных обратных косых черт, подобных этому (вне исходных литералов строки ), является плохой идеей.
Но есть дополнительная проблема: в будущем будет ошибкой использовать неопределенную escape-последовательность, такую как \d
, вместо того, чтобы означать буквальную обратную косую черту, а затем d
. Итак, вместо того, чтобы просто повезти, что ваша строка использовала \d
вместо \t
, чтобы она делала то, что вы, вероятно, хотели, она определенно не сделает то, что вы хотите.
Начиная с версии 3.6, уже поднимает DeprecationWarning
, хотя большинство людей этого не видит. Он будет SyntaxError
в некоторой будущей версии.
Во многих других языках, включая C, использование обратной косой черты, которая не запускает escape-последовательность, означает, что обратная косая черта игнорируется.
На нескольких языках, включая Python, обратная косая черта, которая не запускает escape-последовательность, является буквальной обратной косой чертой.
На некоторых языках, чтобы избежать путаницы в отношении того, является ли язык C-like или Python-like, и чтобы избежать проблемы с работой \Foo
, но \foo
не работает, обратная косая черта, которая не запускает escape-последовательность, является незаконной.