2017-02-13 3 views
0

Я читаю 8-ю главу CSS: The Definitive Guide, 4th Edition. Существует такой фрагмент в книге:Элемент исчезает после применения функции перспективы() с положительным аргументом

div#inner { 
 
    transform: perspective(750px) translateZ(60px) rotateX(45deg); 
 
}
<div id="outer"> 
 
    outer 
 
    <div id="inner">inner</div> 
 
</div>

ДИВ с #inner исчезает из моего хромированного браузера. После настройки значения аргумента функции перспективы и установки его на 0, я могу увидеть текст на странице с некоторым эффектом поворота.

Знаете ли вы, почему? Я пробовал эту страницу в сафари, проблема еще.

+0

Какая версия Chrome? Какая ОС? Я вижу, что внутренняя часть наполовину вырезана, но я все вижу. – sabithpocker

+0

Версия Chrome - 56.0.2924.87 (64-разрядная версия) и macOS - Sierra 10.12.3. Странно, что если добавить 'margin-left' в' body', я могу увидеть 'inner'. С ростом маржи, т.е. 1200px, 'inner' будут почти полностью« наружными ». Это о какой-то космической осведомленности? – krave

+0

@sabithpocker Я обнаружил, что 'translateZ()' без 'transform-style: preserve-3d' сдвинет элемент влево с увеличением аргумента. – krave

ответ

1

Перспективный происхождения находится в центре элемента по умолчанию.

Поскольку это элемент блока, этот центр находится справа от текстовой части элемента, и поэтому он приводит к перемещению влево - это может занять его за левой границей страницы в некоторых разрешениях.

Посмотрите, как он меняется, когда ширина элемента ниже:

div#inner { 
 
    background-color: lightblue; 
 
    transform: perspective(750px) translateZ(60px) rotateX(45deg); 
 
}
<div id="outer"> 
 
    outer 
 
    <div id="inner">inner</div> 
 
</div>

div#inner { 
 
    width: 70px; 
 
    background-color: lightgreen; 
 
    transform: perspective(750px) translateZ(60px) rotateX(45deg); 
 
}
<div id="outer"> 
 
    outer 
 
    <div id="inner">inner</div> 
 
</div>

+0

О! Центр коробки! Почему я не думал об этом. Это объясняет, почему ограничение ширины окна приведет к возврату текста на страницу. И это также объясняет, почему повышение маржи слева от тела будет тянуть «внутреннее» назад под «внешним», потому что повышение поля приведет к узкой ширине, которая, в свою очередь, сделает текст и центр ближе. Спасибо! – krave

0

Попробуйте

div#inner { 
 
      transform: rotate(30deg) translate(20px) perspective(30px); 
 
\t \t \t width: 100px; 
 
     }
<div id="outer"> 
 
     outer 
 
     <div id="inner">inner</div> 
 
    </div>

+0

Список преобразований критический, и я пытался сделать 3D-преобразование. Не 2D. – krave

+0

@krave try transform: перспектива (500px) translate3d (10px, 20px, 20px); – grinmax

Смежные вопросы