前回の例には default slot があり、それはコンポーネントの直接の子をレンダリングするものでした。時々、配置場所をもっとコントロールしなければならないときがあると思います。そのような場合は、 named slots を使用することができます。
App.svelte
の中で、<span slot="telephone">
や company
、address
を子として持つ <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>
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 & 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>