Làm cho áp phích video HTML5 có cùng kích thước với chính video


93

Có ai biết cách thay đổi kích thước của áp phích video HTML5 sao cho phù hợp với kích thước chính xác của chính video đó không?

đây là jsfiddle hiển thị sự cố: http://jsfiddle.net/zPacg/7/

đây là mã đó:

HTML:

<video controls width="100%" height="100%"  poster="http://www.wpclipart.com/blanks/buttons/glossy_buttons/glossy_button_blank_orange_rectangle.png">
  <source src="http://demo.inwebson.com/html5-video/iceage4.mp4" type="video/mp4" />
  <source src="http://demo.inwebson.com/html5-video/iceage4.ogg" type="video/ogg" />
  <source src="http://demo.inwebson.com/html5-video/iceage4.webm" type="video/webm" />
</video>

CSS:

video{
border:1px solid red;
}​

Lưu ý rằng hình chữ nhật màu cam không chia tỷ lệ theo đường viền màu đỏ của video.

Ngoài ra, chỉ thêm CSS bên dưới cũng không hoạt động vì nó thay đổi tỷ lệ video cùng với áp phích:

video[poster]{
height:100%;
width:100%;
}

1
tôi không nghĩ rằng bạn có thể sử dụng "%" trong các thuộc tính; tuy nhiên thay đổi nó thành 100 không khắc phục được sự cố. tôi sẽ đặt cược phong cách truyền thông -webkit của nó. vui lòng chọn qua chúng trac.webkit.org/browser/trunk/Source/WebCore/css/…
albert,

@albert, cảm ơn Tôi không thấy bất kỳ tài liệu tham khảo nào postertrong liên kết bạn đã gửi. Bạn có thể chỉ cho tôi CSS trông như thế nào cho những gì bạn đang nói đến, tức là " -webkit media style" không? cảm ơn
tim peterson

tốt đó là những gì tôi có nghĩa là "hái"; đó là những kiểu phương tiện cụ thể của chrome; tôi chỉ quen thuộc với chúng một cách mơ hồ, chưa kể các bộ chọn giả mà chúng đang khai báo; không có điểm bắt đầu: tôi sẽ tìm kiếm các khai báo có padding, v.v.
albert,

Câu trả lời:


49

Bạn có thể sử dụng hình ảnh áp phích trong suốt kết hợp với hình nền CSS để đạt được điều này ( ví dụ ); tuy nhiên, để có nền được kéo dài theo chiều cao và chiều rộng của video, bạn sẽ phải sử dụng <img>thẻ được định vị tuyệt đối ( ví dụ ).

Nó cũng có thể đặt background-sizethành100% 100% trong các trình duyệt hỗ trợbackground-size ( ví dụ ).


Cập nhật

Cách tốt hơn để làm điều này là sử dụng thuộc tính object-fitCSS như @Lars Ericsson gợi ý.

Sử dụng

object-fit: cover;

nếu bạn không muốn hiển thị những phần hình ảnh không phù hợp với tỷ lệ khung hình của video và

object-fit: fill;

để kéo dài hình ảnh cho vừa với tỷ lệ khung hình của video

Thí dụ


- @ user1419007, ví dụ của bạn lặp lại hình nền. Vì bạn đề xuất đây không phải là cách tốt nhất, bạn có phiền cung cấp jsfiddle trình bày cách thực hiện chiến lược thứ 2 của mình không?
tim peterson

Tôi đã no-repeatchỉnh sửa hình nền. Đối với giải pháp khác, hãy cho tôi một chút thời gian để giải quyết vấn đề này.
user2428118 Ngày

Chỉnh sửa: thêm ví dụ cho giải pháp đề xuất thứ hai.
user2428118 Ngày

cảm ơn vì điều đó, chúng tôi cần một số javascript để thay đổi z-indexhình ảnh sao cho video có thể nhìn thấy khi bạn bắt đầu phát.
tim peterson

2
.. ví dụ thứ hai không hoạt động trong chrome? bạn cần cung cấp cho div bên ngoài một vị trí như jsfiddle.net/xh8er ; sau đó nó hoạt động.
commonpike

87

Tùy thuộc vào trình duyệt bạn đang nhắm mục tiêu, bạn có thể sử dụng thuộc tính object-fit để giải quyết vấn đề này:

object-fit: cover;

hoặc có thể filllà những gì bạn đang tìm kiếm. Vẫn đang được xem xét cho IE .


3
Đây chắc chắn là câu trả lời.
cilphex

1
+1 cho liên kết đến thuộc tính object-fit , object-fit: initialtôi đã sử dụng nó.
FireBrand

"object-fit: fill" đã thành công! cũng như "object-fit: initial" (kỳ lạ là vì tôi không thấy giá trị "initial" trong thông số tại developer.mozilla.org/en-US/docs/Web/CSS/object-fit ). Cả "bìa" và "chứa" đều bóp méo áp phích đang phát trong trình duyệt gốc của Samsung trong Android 5.1.1. Và không ảnh hưởng đến IE!
plugincontainer

1
Các bạn đã nhắm mục tiêu công cụ chọn css nào cho quy tắc phù hợp với đối tượng? Vì không có cách nào để nhắm mục tiêu hình ảnh áp phích, tôi cho rằng bạn đã sử dụng video{object-fit: cover;}?
zıəs uɐɟəʇs

@ zıəs uɐɟəʇs Trong css của tôi đó là ... video [poster] {object-fit: fill}
plugincontainer

27

Hoặc bạn có thể sử dụng preload="none"thuộc tính simple để hiển thị nền VIDEO. Và bạn có thể sử dụng background-size: cover;tại đây.

 video {
   background: transparent url('video-image.jpg') 50% 50% / cover no-repeat ;
 }

 <video preload="none" controls>
   <source src="movie.mp4" type="video/mp4">
   <source src="movie.ogg" type="video/ogg">
 </video>

2
câu trả lời tốt hơn. không phá vỡ bất kỳ điều gì và việc không tải trước video không thực sự làm tổn hại đến trang của bạn trừ khi đó là trang web tập trung vào video. +1.
CompleteNotLizards,

1
Tôi đã thay đổi kích thước nền khi chơi trên điện thoại di động. Từ các câu hỏi / câu trả lời khác ở đây (ví dụ: stackoverflow.com/questions/18229974/… ) có vẻ như vấn đề là trùng lặp hình ảnh (nền css của trình phát và áp phích phần tử video). Bản sửa lỗi này đã hoạt động.
plugincontainer

1
Rất tiếc ... đã hoạt động trong Chrome nhưng đã tạo ra sự cố mới trong trình duyệt Android gốc. Xem: stackoverflow.com/questions/39546792/...
plugincontainer

Cuối cùng đã được sửa - xem câu trả lời của Lars Ericsson bên dưới
plugincontainer

27

Tôi đã thử với điều này và đã thử tất cả các giải pháp, cuối cùng giải pháp mà tôi đi đến là một đề xuất từ ​​Thanh tra của Google Chrome. Nếu bạn thêm cái này vào CSS của mình, nó có tác dụng với tôi:

video{
   object-fit: inherit;
}

Cảm ơn bạn! Đây là việc sửa chữa chính xác tôi đang tìm kiếm để loại bỏ sự chênh lệch video trên đỉnh và đáy
cpcdev

11

Giải pháp của tôi kết hợp câu trả lời của user2428118 và Veiko Jääger, cho phép tải trước nhưng không yêu cầu hình ảnh minh bạch riêng biệt. Thay vào đó, chúng tôi sử dụng hình ảnh trong suốt 1px được mã hóa base64.

<style type="text/css" >
    video{
        background: transparent url("poster.jpg") 50% 50% / cover no-repeat ;
    }
</style>
<video controls poster="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" >
    <source src="movie.mp4" type="video/mp4">
    <source src="movie.ogg" type="video/ogg">
</video>

Nó chỉ phải là tên hình ảnh hoặc đường dẫn hoàn chỉnh?

Trong trình duyệt gốc android (trình duyệt có tên "Internet") trên chiếc điện thoại samsung của tôi, tấm áp phích đã được thay đổi kích thước ... thảm hại khi chơi. Giải pháp này - một gif trong suốt làm áp phích và "áp phích" làm nền - đã giải quyết được điều đó, NHƯNG, .. bây giờ áp phích không hiển thị trong IE-9, 10 hoặc 11
plugincontainer

1
Giải pháp là loại bỏ ảnh gif trong suốt và áp phích làm nền và sử dụng (xem câu trả lời của Lars Ericsson ở trên) video [áp phích] {object-fit: fill}. Đã giải quyết vấn đề trên trình duyệt gốc của Samsung trong Android 5.1.1. và IE hiển thị áp phích mà không có vấn đề gì
plugincontainer

Cách tiếp cận này tốt hơn đặc biệt là cho thiết bị di động. object-fitkhông ngăn chặn sự biến dạng kích thước hoang dã posterxảy ra trên Android khi nội dung vẫn đang tải.
TheLinguist

5

Tôi đã đưa ra ý tưởng này và nó hoạt động hoàn hảo. Về cơ bản, chúng tôi muốn loại bỏ khung hình đầu tiên của video khỏi màn hình và sau đó thay đổi kích thước của áp phích thành kích thước thực của video. Nếu sau đó chúng ta thiết lập các kích thước, chúng ta đã hoàn thành một trong những nhiệm vụ này. Sau đó chỉ còn lại một. Vì vậy, bây giờ, cách duy nhất tôi biết để loại bỏ khung hình đầu tiên là xác định thực sự một áp phích. Tuy nhiên, chúng tôi sẽ cung cấp cho video một video giả, một video không tồn tại. Điều này sẽ dẫn đến một màn hình trống với nền trong suốt. Tức là nền của div mẹ của chúng ta sẽ được hiển thị.

Dễ sử dụng, tuy nhiên, nó có thể không hoạt động với tất cả các trình duyệt web nếu bạn muốn thay đổi kích thước của nền div thành kích thước của video vì mã của tôi đang sử dụng "background-size".

HTML / HTML5:

<div class="video_poster">
    <video poster="dasdsadsakaslmklda.jpg" controls>
        <source src="videos/myvideo.mp4" type="video/mp4">
        Your browser does not support the video tag.
    </video>
<div>

CSS:

video{
    width:694px;
    height:390px;
}
.video_poster{
    width:694px;
    height:390px;
    background-size:694px 390px;
    background-image:url(images/myvideo_poster.jpg);
}

thật thông minh, tôi đã thử. Nó không hoàn hảo nhưng đạt được điều đó ... jsfiddle.net/trpeters1/NJtc9
tim Peterson

Vâng, bạn đúng. Bằng cách nhìn vào jsfiddle của bạn, giờ tôi nhận ra rằng kích thước của video cũng phải chính xác chứ không chỉ yếu tố video. Tôi đoán tôi chỉ may mắn khi tôi thử nó trên trang của mình.
Jonathan J

5
<video src="videofile.webm" poster="posterimage.jpg" controls preload="metadata">
    Sorry, your browser doesn't support embedded videos.
</video>

Che

video{
   object-fit: cover; /*to cover all the box*/
}

Lấp đầy

video{
   object-fit: fill; /*to add black content at top and bottom*/
   object-position: 0 -14px; /* to center our image*/
}

Lưu ý rằng các điều khiển video nằm trên hình ảnh của chúng tôi , vì vậy hình ảnh của chúng tôi không được hiển thị đầy đủ. Nếu bạn đang sử dụng bìa phù hợp với đối tượng, hãy chỉnh sửa hình ảnh của bạn trên ứng dụng trực quan dưới dạng photoshop và thêm nội dung bên dưới lề.


1

Tôi đã gặp sự cố tương tự và chỉ cần khắc phục bằng cách tạo hình ảnh có cùng tỷ lệ khung hình với video của tôi (16: 9). Chiều rộng của tôi được đặt thành 100% trên thẻ video và bây giờ hình ảnh (320 x 180) hoàn toàn phù hợp. Hy vọng rằng sẽ giúp!


1

Bạn có thể thay đổi kích thước kích thước hình ảnh sau khi tạo ngón tay cái

exec("ffmpeg -i $video_image_dir/out.png -vf scale=320:240 {$video_image_dir}/resize.png",$out2, $return2);

1

Bạn có thể sử dụng áp phích để hiển thị hình ảnh thay vì video trên thiết bị di động (hoặc các thiết bị không hỗ trợ chức năng tự động phát video). Vì thiết bị di động không hỗ trợ chức năng tự động phát video.

<div id="wrap_video">
<video preload="preload" id="Video" autoplay="autoplay" loop="loop" poster="default.jpg">
<source src="Videos.mp4" type="video/mp4">
Your browser does not support the <code>video</code> tag.
</video>
</div>

Giờ đây, bạn có thể chỉ cần tạo kiểu cho thuộc tính áp phích nằm bên trong thẻ video dành cho thiết bị di động thông qua truy vấn phương tiện.

#wrap_video
{
width:480px;
height:360px;
position: relative;
} 
@media (min-width:360px) and (max-width:780px)
{
video[poster]
{
top:0 !important;
left:0 !important;
width:480px !important;
height:360px !important;
position: absolute !important;
}
}

Trên thực tế, iOS 10+ hỗ trợ chức năng tự động phát video với thuộc tính playinline.
Lukas Petr

Làm thế nào để bạn chỉ định thuộc tính đó?
Khom Nazid

0
height:500px;
min-width:100%;
-webkit-background-size: 100% 100%;
-moz-background-size: 100% 100%;
-o-background-size: 100% 100%;
background-size:100% 100%;
object-fit:cover;

-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size:cover;

0

Điều này đã làm việc

<video class="video-box" poster="/" controls>
    <source src="some source" type="video/mp4">
</video>

Và CSS

.video-box{
 background-image: 'some image';
 background-size: cover;
}

0
  <div class="container">
        <video poster="~/Content/WebSite/img/SiteSetting/Load.gif" autoplay muted loop class="myVideo">
            <source src="~/Content/WebSite/images/VideoTube.mp4" type="video/mp4" />
        </video>

    </div>



 <style>
    .myVideo {
position: absolute;
right: 0;
left: 0;
bottom: 0;
min-width: 100%;
min-height: 100%;
object-fit: inherit;
 }
@media only screen and (max-width:768px) {
.myVideo {
    position: absolute;
    right: 0;
    left: 0;
    bottom: 0;
    max-width: -webkit-fill-available;
    min-height: 100%;
    object-fit: cover;
    }
   }

     @media only screen and (max-width:320px) {
.myVideo {
    position: absolute;
    right: 0;
    left: 0;
    bottom: 0;
    max-width: -webkit-fill-available;
    min-height: 100%;
    object-fit: cover;
  }
}
</style>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.