Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
---
2
layout: docs
3
title: Stretched link
4
description: Make any HTML element or Bootstrap component clickable by "stretching" a nested link via CSS.
5
group: utilities
6
---
7
 
8
Add `.stretched-link` to a link to make its [containing block](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block) clickable via a `::after` pseudo element. In most cases, this means that an element with `position: relative;` that contains a link with the `.stretched-link` class is clickable. Please note given [how CSS `position` works](https://www.w3.org/TR/CSS21/visuren.html#propdef-position), `.stretched-link` cannot be mixed with most table elements.
9
 
10
Cards have `position: relative` by default in Bootstrap, so in this case you can safely add the `.stretched-link` class to a link in the card without any other HTML changes.
11
 
12
Multiple links and tap targets are not recommended with stretched links. However, some `position` and `z-index` styles can help should this be required.
13
 
14
{{< example >}}
15
<div class="card" style="width: 18rem;">
16
  {{< placeholder width="100%" height="180" class="card-img-top" text=" " title="Card image cap" >}}
17
  <div class="card-body">
18
    <h5 class="card-title">Card with stretched link</h5>
19
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
20
    <a href="#" class="btn btn-primary stretched-link">Go somewhere</a>
21
  </div>
22
</div>
23
{{< /example >}}
24
 
25
Media objects do not have `position: relative` by default, so we need to add the `.position-relative` here to prevent the link from stretching outside the media object.
26
 
27
{{< example >}}
28
<div class="media position-relative">
29
  {{< placeholder width="144" height="144" class="mr-3" text=" " title="Generic placeholder image" >}}
30
  <div class="media-body">
31
    <h5 class="mt-0">Media with stretched link</h5>
32
    <p>This is some placeholder content for the media object. It is intended to mimic what some real-world content would look like, and we're using it here to give the component a bit of body and size.</p>
33
    <a href="#" class="stretched-link">Go somewhere</a>
34
  </div>
35
</div>
36
{{< /example >}}
37
 
38
Columns are `position: relative` by default, so clickable columns only require the `.stretched-link` class on a link. However, stretching a link over an entire `.row` requires `.position-static` on the column and `.position-relative` on the row.
39
 
40
{{< example >}}
41
<div class="row no-gutters bg-light position-relative">
42
  <div class="col-md-6 mb-md-0 p-md-4">
43
    {{< placeholder width="100%" height="200" class="w-100" text=" " title="Generic placeholder image" >}}
44
  </div>
45
  <div class="col-md-6 position-static p-4 pl-md-0">
46
    <h5 class="mt-0">Columns with stretched link</h5>
47
    <p>Another instance of placeholder content for this other custom component. It is intended to mimic what some real-world content would look like, and we're using it here to give the component a bit of body and size.</p>
48
    <a href="#" class="stretched-link">Go somewhere</a>
49
  </div>
50
</div>
51
{{< /example >}}
52
 
53
## Identifying the containing block
54
 
55
If the stretched link doesn't seem to work, the [containing block](https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#Identifying_the_containing_block) will probably be the cause. The following CSS properties will make an element the containing block:
56
 
57
- A `position` value other than `static`
58
- A `transform` or `perspective` value other than `none`
59
- A `will-change` value of `transform` or `perspective`
60
- A `filter` value other than `none` or a `will-change` value of `filter` (only works on Firefox)
61
 
62
{{< example >}}
63
<div class="card" style="width: 18rem;">
64
  {{< placeholder width="100%" height="180" class="card-img-top" text=" " title="Card image cap" >}}
65
  <div class="card-body">
66
    <h5 class="card-title">Card with stretched links</h5>
67
    <p class="card-text">Some quick example text to build on the card title and make up the bulk of the card's content.</p>
68
    <p class="card-text">
69
      <a href="#" class="stretched-link text-danger" style="position: relative;">Stretched link will not work here, because <code>position: relative</code> is added to the link</a>
70
    </p>
71
    <p class="card-text bg-light" style="transform: rotate(0);">
72
      This <a href="#" class="text-warning stretched-link">stretched link</a> will only be spread over the <code>p</code>-tag, because a transform is applied to it.
73
    </p>
74
  </div>
75
</div>
76
{{< /example >}}