Skip to main content

前回の例には default slot があり、それはコンポーネントの直接の子をレンダリングするものでした。時々、配置場所をもっとコントロールしなければならないときがあると思います。そのような場合は、 named slots を使用することができます。

App.svelte の中で、<span slot="telephone">companyaddress を子として持つ <Card> コンポーネントをレンダリングしようとしています。これに対応するように、named slots を Card.svelte に追加しましょう:

Card.svelte
<div class="card">
	<header>
		<slot name="telephone" />
		<slot name="company" />
	</header>

	<slot />
		
	<footer>
		<slot name="address" />
	</footer>
</div>

App.svelte<small> 要素にいくつかスタイルを追加して、自身の行におさまるようにします。<Card> のコンテンツは Card.svelte から font-family (この書体は 'Silian Rail' と呼ばれます) などのスタイルを継承しますが、通常のスコープのルールが適用されるため、この要素がある場所、つまり App.svelte にスタイルを追加します:

App.svelte
<style>
	main {
		display: grid;
		place-items: center;
		height: 100%;
		background: url(./wood.svg);
	}

	small {
		display: block;
		font-size: 0.6em;
		text-align: right;
	}
</style>

別の方法として、Card.svelte の中で :global 修飾子を使用して .card の内側にあるすべての small 要素をターゲットにすることができます:

Card.svelte
<style>
	/* ... */ 

	.card :global(small) {
		display: block;
		font-size: 0.6em;
		text-align: right;
	}
</style>

Next: Slot fallbacks

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<script>
	import Card from './Card.svelte';
</script>
 
<main>
	<Card>
		<span>Patrick BATEMAN</span>
		<span>Vice President</span>
 
		<span slot="telephone">212 555 6342</span>
 
		<span slot="company">
			Pierce &amp; Pierce
			<small>Mergers and Aquisitions</small>
		</span>
		
		<span slot="address">358 Exchange Place, New York, N.Y. 100099 fax 212 555 6390 telex 10 4534</span>
	</Card>
</main>
 
<style>
	main {
		display: grid;
		place-items: center;
		height: 100%;
		background: url(./wood.svg);
	}
</style>
initialising