javascript - 使一个 CSS 对象在一个盒子中居中

标签 javascript css center

试图让受 JS 和 CSS 影响的文本在框中居中,但无论我尝试什么都行不通。

有关代码,请参见下文(或 this CodePen 中)。

   var words = document.getElementsByClassName('word');
   var wordArray = [];
   var currentWord = 0;

   words[currentWord].style.opacity = 1;
   for (var i = 0; i < words.length; i++) {
 splitLetters(words[i]);
   }

   function changeWord() {
 var cw = wordArray[currentWord];
 var nw = currentWord == words.length - 1 ? wordArray[0] : wordArray[currentWord + 1];
 for (var i = 0; i < cw.length; i++) {
   animateLetterOut(cw, i);
 }

 for (var i = 0; i < nw.length; i++) {
   nw[i].className = 'letter behind';
   nw[0].parentElement.style.opacity = 1;
   animateLetterIn(nw, i);
 }

 currentWord = (currentWord == wordArray.length - 1) ? 0 : currentWord + 1;
   }

   function animateLetterOut(cw, i) {
 setTimeout(function() {
   cw[i].className = 'letter out';
 }, i * 80);
   }

   function animateLetterIn(nw, i) {
 setTimeout(function() {
   nw[i].className = 'letter in';
 }, 340 + (i * 80));
   }

   function splitLetters(word) {
 var content = word.innerHTML;
 word.innerHTML = '';
 var letters = [];
 for (var i = 0; i < content.length; i++) {
   var letter = document.createElement('span');
   letter.className = 'letter';
   letter.innerHTML = content.charAt(i);
   word.appendChild(letter);
   letters.push(letter);
 }

 wordArray.push(letters);
   }

   changeWord();
   setInterval(changeWord, 4000);
 @import url(http://fonts.googleapis.com/css?family=Open+Sans:600);

 body {
   font-weight: 600;
   font-size: 40px;
 }
 
 .text {
   margin: auto;
   width: 60%;
   border: 3px solid #73AD21;
   padding: 10px;
   text-align: center;
 }
 
 p {
   display: inline-block;
   vertical-align: top;
   margin: 0;
   font-weight: 600;
   font-size: 40px;
 }
 
 .word {
   position: absolute;
   width: 500px;
   opacity: 0;
 }
 
 .letter {
   display: inline-block;
   position: relative;
   float: left;
   transform: translateZ(25px);
   transform-origin: 50% 50% 25px;
 }
 
 .letter.out {
   transform: rotateX(90deg);
   transition: transform 0.32s cubic-bezier(0.55, 0.055, 0.675, 0.19);
 }
 
 .letter.behind {
   transform: rotateX(-90deg);
 }
 
 .letter.in {
   transform: rotateX(0deg);
   transition: transform 0.38s cubic-bezier(0.175, 0.885, 0.32, 1.275);
 }
 
 .wisteria {
   color: #8e44ad;
 }
 
 .belize {
   color: #2980b9;
 }
 
 .pomegranate {
   color: #c0392b;
 }
 
 .green {
   color: #f49a4d;
 }
 
 .midnight {
   color: #98e322;
 }
<div class="text">
  <p>unleash the power of </p>
  <p>
    <span class="word wisteria">visual media.</span>
    <span class="word belize">visual media.</span>
    <span class="word pomegranate">visual media.</span>
    <span class="word green">visual media.</span>
    <span class="word midnight">visual media.</span>
  </p>
</div>

最佳答案

flex 可以让这变得简单:

var words = document.getElementsByClassName('word');
   var wordArray = [];
   var currentWord = 0;

   words[currentWord].style.opacity = 1;
   for (var i = 0; i < words.length; i++) {
 splitLetters(words[i]);
   }

   function changeWord() {
 var cw = wordArray[currentWord];
 var nw = currentWord == words.length - 1 ? wordArray[0] : wordArray[currentWord + 1];
 for (var i = 0; i < cw.length; i++) {
   animateLetterOut(cw, i);
 }

 for (var i = 0; i < nw.length; i++) {
   nw[i].className = 'letter behind';
   nw[0].parentElement.style.opacity = 1;
   animateLetterIn(nw, i);
 }

 currentWord = (currentWord == wordArray.length - 1) ? 0 : currentWord + 1;
   }

   function animateLetterOut(cw, i) {
 setTimeout(function() {
   cw[i].className = 'letter out';
 }, i * 80);
   }

   function animateLetterIn(nw, i) {
 setTimeout(function() {
   nw[i].className = 'letter in';
 }, 340 + (i * 80));
   }

   function splitLetters(word) {
 var content = word.innerHTML;
 word.innerHTML = '';
 var letters = [];
 for (var i = 0; i < content.length; i++) {
   var letter = document.createElement('span');
   letter.className = 'letter';
   letter.innerHTML = content.charAt(i);
   word.appendChild(letter);
   letters.push(letter);
 }

 wordArray.push(letters);
   }

   changeWord();
   setInterval(changeWord, 4000);
@import url(http://fonts.googleapis.com/css?family=Open+Sans:600);

 @import url(http://fonts.googleapis.com/css?family=Open+Sans:600);
 body {
   font-weight: 600;
   font-size: 40px;
   margin:auto;
 }
html {
  display:flex;
  height:100%;
}
 .text {
   border: 3px solid #73AD21;
   padding: 10px;
   text-align: center;
 }
 
 p {
   display: inline-block;
   vertical-align: top;
   margin: 0;
   font-weight: 600;
   font-size: 40px;  
 }
 
 .word {
   position: absolute;
   opacity: 0;
 }
 
 .letter {
   display: inline-block;
   position: relative;
   float: left;
   transform: translateZ(25px);
   transform-origin: 50% 50% 25px;
 }
 
 .letter.out {
   transform: rotateX(90deg);
   transition: transform 0.32s cubic-bezier(0.55, 0.055, 0.675, 0.19);
 }
 
 .letter.behind {
   transform: rotateX(-90deg);
 }
 
 .letter.in {
   transform: rotateX(0deg);
   transition: transform 0.38s cubic-bezier(0.175, 0.885, 0.32, 1.275);
 }
 
 .wisteria {
   color: #8e44ad;
 }
 
 .belize {
   color: #2980b9;
 }
 
 .pomegranate {
   color: #c0392b;
 }
 
 .green {
   color: #f49a4d;
 }
 
 .midnight {
   color: #98e322;
 }
<div class="text">
  <p>unleash the power of </p>
  <p>
    <span class="word wisteria">visual media.</span>
    <span class="word belize">visual media.</span>
    <span class="word pomegranate">visual media.</span>
    <span class="word green">visual media.</span>
    <span class="word midnight">visual media.</span>
  </p>
</div>

你可能还想给第二个 p 保存绝对文本一些大小。

p+p {
  width:5.5em;
}

DEMO

关于javascript - 使一个 CSS 对象在一个盒子中居中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35464522/

相关文章:

javascript - 是否有更清晰的方法来从这样的数组计算用户 session 长度?

html - 为什么我不能以边距 :0 auto; 为中心

html - 如何使用 CSS 设置其他 div 的 div 中心?

javascript - 使用JS水平居中没有宽度的div

html - 绝对定位图像上方的 float 文本

javascript - 使用 Javascript 选择除一个元素以外的所有元素

javascript - 使用 JavaScript 中的表单控件访问字段值?

javascript - 如何在 AngularJS MD 中使用 <md-progress-linear>?

javascript - 带有时间戳的搜索时间(以毫秒为单位) influxdb

html - Chrome 跨度渲染问题