HTML-часы для автоматического изменения размера с сохранением пропорции

#javascript #html #css #responsive-design #google-sites-2016

Вопрос:

Итак, я редактирую эти часы уже целый день, мне удалось удалить фон и дату/время по центру, как и предполагалось, я также хотел поместить их сбоку рамки, чтобы при добавлении я не тратил место впустую. Оказывается, хотя этот код соответствует тому, что я хотел, при попытке изменить его размер (щелчок и изменение размера рамки) часы сохраняют свой размер. У него есть этот скрипт, позволяющий изменять его размер, но, к сожалению, он не работает. Я понятия не имею, как это исправить. Я попытался использовать 100% вместо pxs, изменив ссылки на auto, но все равно не повезло.

 lt;stylegt; @import url(https://fonts.googleapis.com/css?family=Source Sans Pro:300,400,600,700,900|Dosis:300,400,600,700,800|Droid Sans:400,700|Lato:300,400,700,900|PT Sans:400,700|Ubuntu:300,400,500,700|Open Sans:400,300,600,700|Roboto:400,300,500,700,900|Roboto Condensed:400,300,700|Open Sans Condensed:300,700|Play:400,700|Maven Pro:400,500,700,900amp;subset=latin,latin-ext); body {  padding: 0;  margin: 0;  overflow: hidden; }  svg {  position: auto;  width: 100%;  height: 100%; }  .bgDot {  stroke: none;  fill: #215769; }  .clockCircle {  fill: none;  stroke: #2a2a2a; }  .clockArc {  fill: none;  stroke: #1bbccb; }  .clockDot {  fill: #e9fafc; }  .caption {  font-family: "Source Sans Pro";  font-weight: 300;  fill: White; }  .dayText {  font-size: 1.7rem; }  .dateText {  font-size: 2.5rem;  font-weight: 400; }  .timeText {  font-family: "Open Sans";  font-size: 5rem;  font-weight: 600;  fill: White; } lt;/stylegt;   lt;scriptgt;  window.console = window.console || function(t) {}; lt;/scriptgt;       lt;scriptgt;  if (document.location.search.match(/type=embed/gi)) {  window.parent.postMessage("resize", "*");  } lt;/scriptgt;   lt;/headgt;  lt;body translate="no" gt;  lt;svggt;  lt;defsgt;  lt;pattern id="dotPattern"  x="0" y="0" width="050" height="10"  patternUnits="userSpaceOnUse"gt;  lt;circle class="bgDot" cx="5" cy="5" r="2" /gt;  lt;/patterngt;    lt;radialGradient id="backHoleBelowClock" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"gt;  lt;stop offset="50%" style="stop-color:rgb(0,0,0);stop-opacity:0.7"/gt;  lt;stop offset="100%" style="stop-color:rgb(0,0,0);stop-opacity:0"/gt;  lt;/radialGradientgt;   lt;radialGradient id="blackVignette" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"gt;  lt;stop offset="40%" style="stop-color:rgb(0,0,0);stop-opacity:0" /gt;  lt;stop offset="100%" style="stop-color:rgb(0,0,0);stop-opacity:1" /gt;  lt;/radialGradientgt;   lt;filter id="glow"gt;  lt;feGaussianBlur stdDeviation="2.5" result="coloredBlur"/gt;  lt;feMergegt;  lt;feMergeNode in="coloredBlur"/gt;  lt;feMergeNode in="SourceGraphic"/gt;  lt;/feMergegt;  lt;/filtergt;     lt;filter id="shadow" x="-20%" y="-20%" width="140%" height="140%"gt;  lt;feGaussianBlur in="SourceAlpha" stdDeviation="3" result="shadow"/gt;  lt;feOffset dx="1" dy="1"/gt;  lt;feMergegt;  lt;feMergeNode/gt;  lt;feMergeNode in="SourceGraphic"/gt;  lt;/feMergegt;  lt;/filtergt;     lt;/defsgt;     lt;!-- Clock objects --gt;  lt;circle class="clockCircle hour" cx="190" cy="240" r="150" stroke-width="6" /gt;  lt;path id="arcHour" class="clockArc hour" stroke-width="6" stroke-linecap="round" filter="url(#glow)" /gt;  lt;circle class="clockDot hour" r="8" filter="url(#glow)" /gt;   lt;circle class="clockCircle minute" cx="190" cy="240" r="170" stroke-width="3" /gt;  lt;path id="arcMinute" class="clockArc minute" stroke-width="3" stroke-linecap="round" filter="url(#glow)" /gt;  lt;circle class="clockDot minute" r="5" filter="url(#glow)" /gt;    lt;!-- Caption objects --gt;  lt;text id="time" class="caption timeText" x="190" y="250" stroke-width="0" text-anchor="middle" alignment-baseline="middle" filter="url(#shadow)"gt;lt;/textgt;    lt;text id="day" class="caption dayText" x="190" y="189" stroke-width="0" text-anchor="end" alignment-baseline="middle" filter="url(#shadow)"gt;lt;/textgt;  lt;text id="date" class="caption dateText" x="85" y="300" stroke-width="0" alignment-baseline="middle" filter="url(#shadow)"gt;lt;/textgt;    lt;/svggt;  lt;script src="https://cpwebassets.codepen.io/assets/common/stopExecutionOnTimeout-1b93190375e9ccc259df3a57c1abc0e64599724ae30d7ea4c6877eb615f89387.js"gt;lt;/scriptgt;   lt;script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js'gt;lt;/scriptgt; lt;script src='https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.10.6/moment-with-locales.min.js'gt;lt;/scriptgt; lt;script src='https://cdnjs.cloudflare.com/ajax/libs/gsap/1.16.1/TweenMax.min.js'gt;lt;/scriptgt; lt;script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/16327/DrawSVGPlugin.js?r=5'gt;lt;/scriptgt;  lt;script id="rendered-js" gt; /* Inspired by https://dribbble.com/shots/2004657-Alarm-Clock-concept  */ var describeArc, polarToCartesian, setCaptions;  polarToCartesian = function (centerX, centerY, radius, angleInDegrees) {  var angleInRadians;  angleInRadians = (angleInDegrees - 90) * Math.PI / 180.0;  return {  x: centerX   radius * Math.cos(angleInRadians),  y: centerY   radius * Math.sin(angleInRadians) };  };  describeArc = function (x, y, radius, startAngle, endAngle) {  var arcSweep, end, start;  start = polarToCartesian(x, y, radius, endAngle);  end = polarToCartesian(x, y, radius, startAngle);  arcSweep = endAngle - startAngle lt;= 180 ? '0' : '1';  return ['M', start.x, start.y, 'A', radius, radius, 0, arcSweep, 0, end.x, end.y].join(' '); };  setCaptions = function () {  var dot, hour, hourArc, minArc, minute, now, pos;  now = new Date();  hour = now.getHours() % 12;  minute = now.getMinutes();  hourArc = (hour * 60   minute) / (12 * 60) * 360;  minArc = minute / 60 * 360;  $('.clockArc.hour').attr('d', describeArc(190, 240, 150, 0, hourArc));  $('.clockArc.minute').attr('d', describeArc(190, 240, 170, 0, minArc));  $('.clockDot.hour').attr('d', describeArc(190, 240, 150, hourArc - 3, hourArc));  $('.clockDot.minute').attr('d', describeArc(190, 240, 170, minArc - 1, minArc));  dot = $(".clockDot.hour");  pos = polarToCartesian(190, 240, 150, hourArc);  dot.attr("cx", pos.x);  dot.attr("cy", pos.y);  dot = $(".clockDot.minute");  pos = polarToCartesian(190, 240, 170, minArc);  dot.attr("cx", pos.x);  dot.attr("cy", pos.y);  return $('#time').text(moment().format('H:mm')); };  $('#day').text(moment().format('dddd'));  $('#date').text(moment().format('MMMM D'));  setCaptions();  setInterval(function () {  return setCaptions(); }, 10 * 1000);  $(function () {  TweenMax.staggerFrom(".clockArc", .5, {  drawSVG: 0,  ease: Power3.easeOut },  0.3);  TweenMax.from("#time", 1.0, {  attr: {  y: 350 },   opacity: 0,  ease: Power3.easeOut,  delay: 0.5 });   TweenMax.from(".dayText", 1.0, {  attr: {  y: 310 },   opacity: 0,  delay: 1.0,  ease: Power3.easeOut });   return TweenMax.from(".dateText", 1.0, {  attr: {  y: 350 },   opacity: 0,  delay: 1.5,  ease: Power3.easeOut });  });  // --- // generated by coffee-script 1.9.2 //# sourceURL=pen.js  lt;/scriptgt;  lt;/bodygt;  lt;/htmlgt;   

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

Ответ №1:

Скорее всего, вам понадобится viewBox атрибут, подобный добавленному в ваш элемент svg. Например.

lt;svg viewBox="0 0 500 500" gt;

 .resize{ position:relative; resize:both; width:100px; border: 1px solid red; overflow:hidden; }   body {  padding: 0;  margin: 0;  overflow: hidden; }    .bgDot {  stroke: none;  fill: #215769; }  .clockCircle {  fill: none;  stroke: #2a2a2a; }  .clockArc {  fill: none;  stroke: #1bbccb; }  .clockDot {  fill: #e9fafc; }  .caption {  font-family: "Source Sans Pro";  font-weight: 300;  fill: White; }  .dayText {  font-size: 1.7rem; }  .dateText {  font-size: 2.5rem;  font-weight: 400; }  .timeText {  font-family: "Open Sans";  font-size: 5rem;  font-weight: 600;  fill: White; } 
 lt;div class="resize"gt; lt;svg viewBox="0 0 500 500" gt;  lt;defsgt;  lt;pattern id="dotPattern"  x="0" y="0" width="50" height="10" patternUnits="userSpaceOnUse"gt;  lt;circle class="bgDot" cx="5" cy="5" r="2" /gt;  lt;/patterngt;    lt;radialGradient id="backHoleBelowClock" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"gt;  lt;stop offset="50%" style="stop-color:rgb(0,0,0);stop-opacity:0.7"/gt;  lt;stop offset="100%" style="stop-color:rgb(0,0,0);stop-opacity:0"/gt;  lt;/radialGradientgt;   lt;radialGradient id="blackVignette" cx="50%" cy="50%" r="50%" fx="50%" fy="50%"gt;  lt;stop offset="40%" style="stop-color:rgb(0,0,0);stop-opacity:0" /gt;  lt;stop offset="100%" style="stop-color:rgb(0,0,0);stop-opacity:1" /gt;  lt;/radialGradientgt;   lt;filter id="glow"gt;  lt;feGaussianBlur stdDeviation="2.5" result="coloredBlur"/gt;  lt;feMergegt;  lt;feMergeNode in="coloredBlur"/gt;  lt;feMergeNode in="SourceGraphic"/gt;  lt;/feMergegt;  lt;/filtergt;     lt;filter id="shadow" x="-20%" y="-20%" width="140%" height="140%"gt;  lt;feGaussianBlur in="SourceAlpha" stdDeviation="3" result="shadow"/gt;  lt;feOffset dx="1" dy="1"/gt;  lt;feMergegt;  lt;feMergeNode/gt;  lt;feMergeNode in="SourceGraphic"/gt;  lt;/feMergegt;  lt;/filtergt;     lt;/defsgt;     lt;!-- Clock objects --gt;  lt;circle class="clockCircle hour" cx="190" cy="240" r="150" stroke-width="6" /gt;  lt;path id="arcHour" class="clockArc hour" stroke-width="6" stroke-linecap="round" filter="url(#glow)" /gt;  lt;circle class="clockDot hour" r="8" filter="url(#glow)" /gt;   lt;circle class="clockCircle minute" cx="190" cy="240" r="170" stroke-width="3" /gt;  lt;path id="arcMinute" class="clockArc minute" stroke-width="3" stroke-linecap="round" filter="url(#glow)" /gt;  lt;circle class="clockDot minute" r="5" filter="url(#glow)" /gt;    lt;!-- Caption objects --gt;  lt;text id="time" class="caption timeText" x="190" y="250" stroke-width="0" text-anchor="middle" alignment-baseline="middle" filter="url(#shadow)"gt;lt;/textgt;    lt;text id="day" class="caption dayText" x="190" y="189" stroke-width="0" text-anchor="end" alignment-baseline="middle" filter="url(#shadow)"gt;lt;/textgt;  lt;text id="date" class="caption dateText" x="85" y="300" stroke-width="0" alignment-baseline="middle" filter="url(#shadow)"gt;lt;/textgt;  lt;/svggt; lt;/divgt; 

Комментарии:

1. Блестяще! Это сделало свое дело 🙂