2016-05-13 2 views
4

Недавно я начал изучать HTML, CSS, JavaScript и jQuery с this set of books.Центрирование div на странице с наложением

Я пробовал каждый очевидный ответ, который я мог бы выкопать в Stack Overflow, чтобы сделать то, что обычно является очень простой задачей центрирования div на странице. На моей странице есть наложение, которое, как я подозреваю, является частью моей проблемы. Я работаю над тем, чтобы адаптировать CodePen к моему проекту. В этом CodePen только один элемент, тег H1, должен быть центрирован на странице, и он отлично работает.

На моей странице я заменяю тег h1 на div. Я включил ссылку на jsFiddle с комментариями re: что я пытался сделать. Я знаю, что мне не хватает чего-то очень простого, но я не могу понять, что это такое.

Благодарим вас за чтение, и я приветствую ваши предложения для этого front-end noob.

Ниже мой проблематичный код:

<!DOCTYPE html> 
<body> 
    <header> 
     <div class="hero" id="Portfolio"> 
     <div class="overlay"></div> 
     <div class="page-subject"> 
       <!-- Rather than a vanilla h1 tag following the div.overlay, I wrapped the h1 tag in a div called div.page-subject. I can't get this div to center --> 
      <h1>Portfolio</h1> 
      <div class="container space-around"> 
       <div><a href="#" class="hvr-pop"><img src="../images/icons/apple-app-store-128.png" alt="iOS Applications"></a></div> 
       <div><a href="#" class="hvr-pop"><img src="../images/icons/amazon-echo-128.png" alt="Amazon Alexa Skills"></a></div> 
      </div> 
     </div> 
    </div> 
</header> 

html, body { 
    height:100%; 
    padding:0; 
    margin:0; 
    font-family: Raleway,sans-serif; 
    color:#FFF; 
} 
header { 
    height: calc(100% - 65px); 
    background:#333; 

    -webkit-perspective: 1500px; 
    perspective: 1500px; 
    perspective-origin: center bottom; 
} 

h1 { 
    margin:0; 
    vertical-align: middle; 
    text-align:center; 
    font-size:80px; 
    font-weight:600; 
    text-transform:none; 
    text-shadow:1px 1px 1px rgba(0,0,0,0.5); 
} 


.hero#Portfolio { 
    position:relative; 
    background:#333 url(https://wallpaperscraft.com/image/surface_gray_dark_light_shadow_18440_2560x1600.jpg) no-repeat center center; 
    background-size:cover; 
    height: 100%; 
    width:100%; 

    -webkit-transform-origin: 50% 100%; 
    transform-origin: 50% 100%; 
    -webkit-transform-style: preserve-3d; 
    transform-style: preserve-3d; 

    display:table; 
} 
.hero .overlay { 
    content:""; 
    display:block; 
    position:absolute; 
    top:0; 
    bottom:0; 
    left:0; 
    right:0; 
    opacity:0; 
    background: linear-gradient(to bottom, rgba(0,0,0,1) 0%,rgba(0,0,0,0) 100%); 
} 
div.page-subject { 
    vertical-align: middle; 
} 

.container { 
    display: flex; 
} 
.container.space-around { 
    z-index: 10; 
    justify-content: space-around; 
    padding-bottom: 10px; 
} 

a { 
    position: relative; 
    z-index: 1; 
} 

a.hvr-pop img { 
    background: white; 
    border-radius: 25px; 
    display: block; 
    min-width: 64px; 
    max-width:128px; 
    min-height: 64px; 
    max-height:128px; 
    width: auto; 
    height: auto; 
} 


/* Pop */ 
@-webkit-keyframes hvr-pop { 
    50% { 
    -webkit-transform: scale(1.2); 
    transform: scale(1.2); 
} 
} 

@keyframes hvr-pop { 
    50% { 
    -webkit-transform: scale(1.2); 
    transform: scale(1.2); 
} 
} 
/*Does button animation from hover.css class*/ 
.hvr-pop { 
    display: inline-block; 
    vertical-align: middle; 
    -webkit-transform: translateZ(0); 
    transform: translateZ(0); 
    box-shadow: 0 0 1px rgba(0, 0, 0, 0); 
    -webkit-backface-visibility: hidden; 
    backface-visibility: hidden; 
    -moz-osx-font-smoothing: grayscale; 
} 
.hvr-pop:hover, .hvr-pop:focus, .hvr-pop:active { 
    -webkit-animation-name: hvr-pop; 
    animation-name: hvr-pop; 
    -webkit-animation-duration: 0.3s; 
    animation-duration: 0.3s; 
    -webkit-animation-timing-function: linear; 
    animation-timing-function: linear; 
    -webkit-animation-iteration-count: 1; 
    animation-iteration-count: 1; 
} 

'use strict'; 
// This creates to folding animation 
$(window).scroll(function() { 
    var heroHeight = $('header').height(); 
    var yPosition = $(document).scrollTop(); 


    if (yPosition <= heroHeight) { 
    var effectFactor = yPosition/heroHeight; 
    var rotation = effectFactor * (Math.PI/2 - Math.asin((heroHeight - yPosition)/heroHeight)); 
    $('.hero').css({ 
     '-webkit-transform': 'rotateX('+rotation+'rad)', 
     'transform': 'rotateX('+rotation+'rad)', 
    }) 
    .find('.overlay').css('opacity', effectFactor); 
    } 


    /** 
    * Sticky nav-bar 
    */ 
    if (yPosition <= heroHeight) { 
    $('nav').removeClass('fixed'); 
    } else { 
    $('nav').addClass('fixed'); 
    } 

}); 

$(document).ready(function() { 
    var pathname = (window.location.pathname.match(/[^\/]+$/)[0]); 
    $("nav ul a.current").removeClass("current"); 
    $("nav ul a[href='" + pathname + "']").addClass("current"); 
}); 
+0

Вертикальное выравнивание не работает так, как вы думаете. Я использую его для выравнивания divs с встроенным блоком отображения, чтобы они совпадали.См. Мой комментарий и попробуйте преобразования. –

ответ

1

Просто добавьте это:

div.page-subject { 
    vertical-align: middle; 
    display: table-cell; 
} 

Вот Fiddle.

+0

Я думал, что я близок к тому, чтобы что-то делать, но я не думал, что это одна линия! Спасибо – Adrian

+0

@Adrian да, вы были очень близки к нему :) –

1

Как об этом.

Использование div.page-субъектных вместо тега и использовать

div.page-subject { 
    vertical-align: middle; 
    display: inline-block; 
    width: 100%; 
    text-align: center; 
    font-size: 1.2rem; 
    margin: 1rem 0; 
} 
0

Центрирование вещи по горизонтали легко.

display: block; 
margin: auto; 
position: relative, absolute, or fixed depending... 

Центрирующее устройство вертикально требует больше работы, и я всегда делаю это так.

top: 50%; 
transform: translateY(-50%); 
position: relative, absolute, or fixed depending... 
display: block; 

Однако вы также можете сделать все это с трансформациями

top: 50%; 
left: 50%; 
transform: translateX(-50%) translateY(-50%); 
position: relative, absolute, or fixed depending... 
display: block; 

Если с помощью преобразования не забудьте использовать префиксы. Я использую этот авто prefixer: http://pleeease.io/play/

0

Попробуйте

.hero{ 
    display: flex; 
    flex-direction: column; 
    justify-content: center; 
    align-items: center; 
} 
0

отцентрировать DIV по горизонтали попытаться использовать этот один

/* lets say its width is 500px */ 
.hero{ 
    width:500px; 
    display:block; 
    margin-left:auto; 
    margin-right:auto; 
    background:#FFFFFF; 
} 

, если вы хотите, чтобы сделать его центр как по вертикали и горизонтально, то вам необходимо установить его в положение, как этот,

.hero { 
    width:500px; 
    height:500px; 
    position:absolute; 
    left:50%; /* centers horizontally on the screen */ 
    top:50%; /* centers vertically on the screen */ 
    background-repeat:no-repeat; 
    background-position:center; 
    margin:-250px 0 0 -250px; /* is width and height divided by two */ 
    background:#FFFFFF; 
} 

Вы должны установить наложение элемента в качестве родителя .hero элемента и наложение элемента должен быть, как эта,

.overlay { 
    position: fixed; 
    top:0; 
    left:0; 
    right:0; 
    bottom:0; 
    width:100%; 
    height:100%; 
    background:rgba(0,0,0,0.7); 
    z-index:9999; /* makes sure it stays on top */}