То, что вы хотите, на удивление сложно достичь, даже если вы ожидаете, что это будет довольно просто. Полностью адаптивное встроенное видео iframe может быть достигнуто с помощью небольшого обходного пути. По сути, вам нужно обернуть свой iframe в контейнер с позицией relative
, чтобы вы могли абсолютно точно позиционировать iframe внутри, ограничивая переполнение и создавая искусственное дно с помощью отступов, чтобы сместить соотношение сторон.
Рассмотрим этот пример: https://jsfiddle.net/8kh9j7wx/1/
Видео всегда будет находиться в пределах родительского элемента и всегда будет сохранить 100% ширину указанного элемента, сохраняя при этом очень важное соотношение сторон, на которое другие ответы здесь не в состоянии ответить.
Вот ваша измененная разметка:
Вот ваш CSS:
.video-container {
overflow:hidden;
padding-bottom:56.25%;
position:relative;
height:0;
}
.video-container iframe{
left:0;
top:0;
height:100%;
width:100%;
position:absolute;
}
Вы можете, конечно, ограничьте ширину до максимума, объявив max-width
на вашем элементе контейнера, и отцентрируйте его, используя margin:auto
.
Если посмотреть на код, упомянутый в вопросе, оправдание таково:
Вилка второго дочернего элемента и немедленный выход, чтобы предотвратить зомби. это приводит к тому, что второй дочерний процесс становится сиротским, что делает init процесс, отвечающий за его очистку. А поскольку первый ребенок лидер сеанса без управляющего терминала, возможно его приобрести, открыв терминал в будущем (Система V- на базе систем). Эта вторая вилка гарантирует, что ребенок не дольше лидера сеанса, не позволяя демону когда-либо получать управляющий терминал.
Таким образом, это необходимо для того, чтобы демон был повторно привязан к init (на тот случай, если процесс, запускающий демона, будет долгим), и исключает любой шанс того, что демон повторно получит управляющий терминал. Так что, если ни один из этих случаев не подходит, одной вилки должно быть достаточно. В " Сетевое программирование Unix - Стивенс " есть хороший раздел по этому поводу.
Согласно «Расширенному программированию в среде Unix» Стивенса и Раго, вторая вилка является скорее рекомендацией, и это сделано чтобы гарантировать, что демон не получит управляющий терминал в системах на основе System V.
Одна из причин заключается в том, что родительский процесс может немедленно wait_pid () для дочернего, а затем забыть об этом. Когда тогда умирает внучатый ребенок, его родителем является init, и он будет wait () для него - и вывести его из состояния зомби.
В результате родительский процесс не должен знать о разветвленных дочерних процессах, и это также дает возможность разветвлять долго выполняющиеся процессы из библиотек и т. Д.
Приличное обсуждение этого вопроса, похоже, находится на http://www.developerweb.net/forum/showthread.php?t=3025
Цитата из mlampkin оттуда:
... думайте о вызове setsid () как о "новом" способ сделать что-то (отделиться от терминала) и [второй] вызов fork () после него как избыточность для работы с SVr4 ...
У вызова daemon () есть родительский вызов _exit (), если он завершается успешно. Первоначальная мотивация могла заключаться в том, чтобы позволить родителю выполнять некоторую дополнительную работу, пока дочерний процесс демонизируется.
Это также может быть основано на ошибочном убеждении, что это необходимо для того, чтобы гарантировать, что у демона нет родительского процесса и он переродится в init - но это произойдет в любом случае, когда родитель умрет в случае единственной вилки.
Так что я полагаю, что в конечном итоге все сводится к традиции - единственной вилки достаточно, пока родитель все равно умирает в короткие сроки.
Взято из Bad CTK :
«В некоторых версиях Unix вы вынуждены выполнять двойной форк при запуске, чтобы перейти в режим демона. . Это потому, что одиночное разветвление не гарантирует отсоединение от управляющего терминала. "