Почему отрицательная маржа не работает?

Когда вы нажимаете "Возобновить", текст выводится слева. Это связано с тем, что первоначально я дал отрицательный отпечаток тексту.

Но отрицательный запас 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 в крайнем правом углу: см. этот скрипт.