三眼計算と組み合わせたvuecssの遷移効果(幅)について考えていますか???実装メカニズム???


ここに画像の説明を挿入
上の写真のようにCSSトランジション効果が見られます。3つの目を使用するとバグが表示されます。
なぜこのバグが表示されるのかわかりません。下にメッセージを残してください

  • 思考1:最初に値を変更してから、そのスタイルを変更します。
    理由は記事の最後にあります。コード次のようになっいない可能性があり
    ます。
<template>
	<div id="app">
		<div class="container">
			<div class="item_list">
				:class="{ active: value == i ? true : '' }"
				<ul class="item">
					<li
						class="li"
						:class="{ active: value == i ? true : '' }"
						@mouseenter="enter(i)"
						v-for="(item, i) in item_list"
						:key="i"
					>
						{
    
    {
    
     item }}<span></span>
					</li>
				</ul>
				:class="{ active: true }"
				<ul class="item">
					<li
						class="li"
						:class="{ active: true }"
						@mouseenter="enter(i)"
						v-for="(item, i) in item_list"
						:key="i"
					>
						{
    
    {
    
     item }}<span></span>
					</li>
				</ul>
			</div>
		</div>
	</div>
</template>
<script>
export default {
    
    
	data() {
    
    
		return {
    
    
			value: 0,
			item_list: ["首页", "关于", "新闻", "技术支持"],
		};
	},
	methods: {
    
    
		enter(val) {
    
    
			this.value = val;
		},
	},
};
</script>
<style lang="scss">
* {
    
    
	text-decoration: none;
	list-style: none;
}
#app {
    
    
	.container {
    
    
		width: 1200px;
		margin: 0 auto;
		background: #e5e5e5;
		height: auto;
		.item_list {
    
    
			.item {
    
    
				display: flex;
				justify-content: space-around;
				.li {
    
    
					position: relative;
				}
			}
		}
	}
	.active {
    
    
		span {
    
    
			position: absolute;
			width: 0px;
			height: 5px;
			background: #000;
			bottom: -20px;
			left: -20px;
			transition: width 2s;
		}
		&:hover span {
    
    
			width: 100px;
		}
	}
}
</style>


考えに答えるのを手伝うことを歓迎します:彼に最初に値を変更させてから、cssサスペンションを実行させます

  • 理由1。:f12のスタイル変更を参照できます。最初のホームページスタイルが追加されたので、すべて正常です。後者は、スパンのスタイルがロードされていないため、ホバーを実行してスパン幅を指定しました。直接ですが、幅後退効果(この時点での遷移効果が有効)については、スパンの幅0も直後に応答することを意味します。過剰な効果には、最初のフレームと最後のフレームが必要です。この種のバグ
  • 理由2。:原因1が発生する理由:次のコードを確認してください(cssが一時停止され、値を変更するために実行されました)
<li	class="li":class="{ active: value == i ? true : '' }"
mouseenter="enter(i)"v-for="(item, i) in item_list":key="i">
enter(val) {
    
    this.value = val;},

解決策
アクティブの外側に別の
スパン{ 幅:0px; }を追加します。要約:この例では、cssが最初にロードされ、バグ現象が発生ます。過度の効果には初期フレームと終了フレームが必要であるため、の初期値はスパンは最初に指定する必要があります


上記の結論に誤りがある場合は訂正してください。意見が異なる場合は、以下にメッセージを残してください。

おすすめ

転載: blog.csdn.net/weixin_46476460/article/details/112723901