Почему отрицательная маржа не работает?
Когда вы нажимаете "Возобновить", текст выводится слева. Это связано с тем, что первоначально я дал отрицательный отпечаток тексту.
Но отрицательный запас intro_page
не дает эффекта.
Я хочу, чтобы:
-
Когда я нажимаю resume_page
, текст резюме должен поступать слева (это работает), а текст intro_page
должен выходить вправо (это не работает).
Отрицательный запас intro_page
, похоже, не работает. Почему это?
-
Изначально страница должна быть пустой, кроме двух ссылок. В настоящее время отображается страница intro_page
. resume_page
скрывается должным образом, если требуется.
Короче говоря, все о resume_page
работает отлично. Я хочу, чтобы то же самое происходило с intro_page
function clicked_resume(OnScreen)
{
var resume = document.getElementById('resume_page');
if(OnScreen == 1)
{
resume.className = '';
clicked_about(0);
}
else if(OnScreen == 0)
{
resume.className = 'unseen';
}
}
function clicked_about(OnScreen)
{
var about = document.getElementById('intro_page');
if(OnScreen == 1)
{
about.className = '';
clicked_resume(0);
}
else if(OnScreen == 0)
{
about.className = 'unseen';
}
}
#intro_page.unseen{
display: block;
margin-right: -200px;
}
#intro_page{
margin-right: 0px;
display: block;
-webkit-transition: margin-right 1.5s ease-in;
transition: margin-right 1.5s ease-in;
}
#resume_page.unseen{
display: block;
margin-left: -600px;
}
#resume_page{
margin-left: 0px;
display: block;
-webkit-transition: margin-left 1.0s ease-in;
transition: margin-left 1.0s ease-in;
}
<h2 class="title_bar">
<ul>
<li><span onclick = "clicked_about(1)">About</span></li>
<li><span onclick="clicked_resume(1)">Resume</span></li>
</ul>
</h2>
<div id="intro_page" class="unseen">
<p id="intro_main_text"> I enjoy reading, swimming, jogging, painting and exploring. </p>
<figure class="intro_pic1">
<img src="img/award.jpg" alt="Receiving Award" height="50" />
<figcaption>Award 2015</figcaption>
</figure>
</div>
<div id="resume_page" class="unseen">
<p>My resume</p>
</div>
Ответы
Ответ 1
Попробуйте использовать position: relative
и right
вместо margin-right
. Он более надежный, поскольку он не учитывает позицию элемента при позиционировании других элементов, например, margin
. Для бонусных очков вы можете использовать transform: translate
вместо right
.
function clicked_resume(OnScreen)
{
var resume = document.getElementById('resume_page');
if(OnScreen == 1)
{
resume.className = '';
clicked_about(0);
}
else if(OnScreen == 0)
{
resume.className = 'unseen';
}
}
function clicked_about(OnScreen)
{
var about = document.getElementById('intro_page');
if(OnScreen == 1)
{
about.className = '';
clicked_resume(0);
}
else if(OnScreen == 0)
{
about.className = 'unseen';
}
}
body {
margin: 0;
overflow-x: hidden;
}
#intro_page.unseen{
display: block;
right: -100%;
}
#intro_page{
position: relative;
right: 0px;
display: block;
-webkit-transition: right 1.5s ease-in;
transition: right 1.5s ease-in;
}
#resume_page.unseen{
display: block;
left: -600px;
}
#resume_page{
position: relative;
left: 0px;
display: block;
-webkit-transition: left 1.0s ease-in;
transition: left 1.0s ease-in;
}
<h2 class="title_bar">
<ul>
<li><span onclick = "clicked_about(1)">About</span></li>
<li><span onclick="clicked_resume(1)">Resume</span></li>
</ul>
</h2>
<div id="intro_page" class="unseen">
<p id="intro_main_text"> I enjoy reading, swimming, jogging, painting and exploring. </p>
<figure class="intro_pic1">
<img src="img/award.jpg" alt="Receiving Award" height="50" />
<figcaption>Award 2015</figcaption>
</figure>
</div>
<div id="resume_page" class="unseen">
<p>My resume</p>
</div>
Ответ 2
Причина заключается в том, что в CSS элементы лежат слева направо, а margin-right никогда не будет работать так, как вы пожелаете.
Просто изменив свой CSS как это, он будет работать как прелесть.
body {
overflow:hidden
}
#intro_page.unseen{
transform: translateX(120%);
transition: transform 1s ease-in;
}
#intro_page{
transform: translateX(0);
transition: transform 1s ease-in;
}
#resume_page.unseen{
transform: translateX(-100%);
transition: transform 1s ease-in;
}
#resume_page{
transform: translateX(0);
transition: transform 1s ease-in;
}
Подсказка: для лучшей производительности в анимации всегда используйте переводы вместо позиции, поля, ширины...
http://jsfiddle.net/wgsy6ufx/1/
Ответ 3
Как вы можете прочитать это руководство, левые и правые отрицательные поля не ведут себя одинаково: отрицательный margin-left
тянет > стилизованный элемент влево, а отрицательный margin-right
тянет соседний правый элемент к стилизованному элементу. Он не перемещает сам стилизованный элемент.
Если вы хотите достичь своего результата, используйте position: relative
и свойство left
, чтобы расположить ваш intro div в крайнем правом углу: см. этот скрипт.